#pragma once
#ifndef __RTOS_H
#define __RTOS_H

/******************************************************************************************
 * За основу взят планировщик задач с сайта ChipEnable.ru                                 *
 * http://chipenable.ru/index.php/programming-avr/item/110-planirovschik.html             *
 *                                                                                        *
 * Доработал Шибанов Владимир aka KontAr                                                  *
 * Дата: 26.03.2014                                                                       *
 *                                                                                        *
 * Изменения:                                                                             *
 * - добавлен однократный вызов задачи                                                    *
 * - добавлено удаление задачи по имени                                                   *
 * - при повторном добавлении задачи обновляются ее переменные                            *
 * - добавлен указатель на "хвост" списка                                                 *
 * - функции РТОС скорректированы с учетом "хвоста"                                       *
 *                                                                                        *
 * 18.05.2015, Shilov V.N. <shilow@ukr.net>                                               *
 * - скрестил с timing_delay от ST                                                        *
 * - перенёс сюда обработчик прерываний для уменьшения оверхеда                           *
 *                                                                                        *
 ******************************************************************************************/

#include "stm8l15x.h"

// Количество задач
#define MAX_TASKS	9

#define  ENABLE_INTERRUPT enableInterrupts()
#define DISABLE_INTERRUPT disableInterrupts()

/******************************************************************************************
 * Структура задачи
 */
typedef struct task
{
   void (*pFunc) (void); // указатель на функцию
   uint16_t delay;       // задержка перед первым запуском задачи
   uint16_t period;      // период запуска задачи
   uint8_t run;          // флаг готовности задачи к запуску
} task;


/******************************************************************************************
 * Переменные
 */


/******************************************************************************************
 * Прототипы фукнций
 */
void RTOS_Config (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 Delay(__IO uint16_t nTime);
//void TimingDelay_Decrement(void);

#endif /* __RTOS_H */
