12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /******************************************************************************************
- * За основу взят планировщик задач с сайта ChipEnable.ru *
- * http://chipenable.ru/index.php/programming-avr/item/110-planirovschik.html *
- * *
- * Доработал Шибанов Владимир aka KontAr *
- * Дата: 26.03.2014 *
- * *
- * Изменения: *
- * - добавлен однократный вызов задачи *
- * - добавлено удаление задачи по имени *
- * - при повторном добавлении задачи обновляются ее переменные *
- * - добавлен указатель на "хвост" списка *
- * - функции РТОС скорректированы с учетом "хвоста" *
- ******************************************************************************************
- * shilov, 2015.04.07 *
- * совместил с модулем милисекундных задержек на таймере *
- ******************************************************************************************/
- #pragma once
- #ifndef RTOS_H
- #define RTOS_H
- #include <avr/io.h>
- #define MAX_TASKS 10 // Количество задач
- /**
- * Будем использовать таймер 0, период -- 1 мсек
- */
- #define TIMER_HZ 1000
- #define TIMER_PRESCALER 64
- #define TIMER_CNT (0x100 - (F_CPU / TIMER_PRESCALER / TIMER_HZ))
- #define TIMER_TCCR TCCR0
- #define TIMER_TCNT TCNT0
- #define TIMER_TIMSK TIMSK
- #define TIMER_CSB ((0<<CS02)|(1<<CS01)|(1<<CS00))
- #define TIMER_INT (1<<TOIE0)
- #define TIMER_OVF_VECT TIMER0_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);
- inline void tdelay_us(uint16_t usek) {
- usek = usek + TCNT1;
- while (TCNT1 < usek) {};
- }
- #endif
|