rtos.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #pragma once
  2. #ifndef __RTOS_H
  3. #define __RTOS_H
  4. /******************************************************************************************
  5. * За основу взят планировщик задач с сайта ChipEnable.ru *
  6. * http://chipenable.ru/index.php/programming-avr/item/110-planirovschik.html *
  7. * *
  8. * Доработал Шибанов Владимир aka KontAr *
  9. * Дата: 26.03.2014 *
  10. * *
  11. * Изменения: *
  12. * - добавлен однократный вызов задачи *
  13. * - добавлено удаление задачи по имени *
  14. * - при повторном добавлении задачи обновляются ее переменные *
  15. * - добавлен указатель на "хвост" списка *
  16. * - функции РТОС скорректированы с учетом "хвоста" *
  17. * *
  18. * 18.05.2015, Shilov V.N. <shilow@ukr.net> *
  19. * - скрестил с timing_delay от ST *
  20. * - перенёс сюда обработчик прерываний для уменьшения оверхеда *
  21. * *
  22. ******************************************************************************************/
  23. #include "stm8s.h"
  24. // Количество задач
  25. #define MAX_TASKS 9
  26. #define ENABLE_INTERRUPT enableInterrupts()
  27. #define DISABLE_INTERRUPT disableInterrupts()
  28. /******************************************************************************************
  29. * Структура задачи
  30. */
  31. typedef struct task
  32. {
  33. void (*pFunc) (void); // указатель на функцию
  34. uint16_t delay; // задержка перед первым запуском задачи
  35. uint16_t period; // период запуска задачи
  36. uint8_t run; // флаг готовности задачи к запуску
  37. } task;
  38. /******************************************************************************************
  39. * Переменные
  40. */
  41. #define USE_RTOS 1
  42. /******************************************************************************************
  43. * Прототипы фукнций
  44. */
  45. void RTOS_Init (void);
  46. void RTOS_SetTask (void (*taskFunc)(void), uint16_t taskDelay, uint16_t taskPeriod);
  47. void RTOS_DeleteTask (void (*taskFunc)(void));
  48. void RTOS_DispatchTask (void);
  49. //void RTOS_Timer(void);
  50. void Delay(__IO uint16_t nTime);
  51. //void TimingDelay_Decrement(void);
  52. #endif /* __RTOS_H */