1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /******************************************************************************************
- * За основу взят планировщик задач с сайта ChipEnable.ru *
- * http://chipenable.ru/index.php/programming-avr/item/110-planirovschik.html *
- * *
- * Доработал Шибанов Владимир aka KontAr *
- * Дата: 26.03.2014 *
- * *
- * Изменения: *
- * - добавлен однократный вызов задачи *
- * - добавлено удаление задачи по имени *
- * - при повторном добавлении задачи обновляются ее переменные *
- * - добавлен указатель на "хвост" списка *
- * - функции РТОС скорректированы с учетом "хвоста" *
- ******************************************************************************************
- * shilov, 2015.04.07 *
- * совместил с модулем милисекундных задержек на таймере *
- ******************************************************************************************/
- #ifndef __RTOS_H
- #define __RTOS_H
- #include <ioavr.h>
- #include <intrinsics.h>
- #include <stdint.h>
- // Количество задач
- #define MAX_TASKS 10
- /**
- * Будем использовать второй таймер, период -- 1 мсек
- */
- #define TIMER_HZ 1000
- #define TIMER_PRESCALER 64
- #define TIMER_CNT (0x100 - (F_CPU / TIMER_PRESCALER / TIMER_HZ))
- #define TIMER_TCCR TCCR2
- #define TIMER_TCNT TCNT2
- #define TIMER_TIMSK TIMSK
- #define TIMER_CSB (1<<CS22)
- #define TIMER_INT (1<<TOV2)
- #define TIMER_OVF_VECT TIMER2_OVF_vect
- /**
- * Структура задачи
- */
- typedef struct task
- {
- void (*pFunc) (void); // указатель на функцию
- uint16_t delay; // задержка перед первым запуском задачи
- uint16_t period; // период запуска задачи
- uint8_t run; // флаг готовности задачи к запуску
- } task;
- /**
- * Прототипы фукнций
- */
- void RTOS_Init (void);
- void RTOS_SetTask (void (*taskFunc)(void), uint16_t taskDelay, uint16_t taskPeriod);
- void RTOS_DeleteTask (void (*taskFunc)(void));
- void RTOS_DispatchTask (void);
- void RTOS_Timer (void);
- void tdelay_ms(uint16_t msek);
- #endif // __RTOS_H
|