/******************************************************************************************
 * За основу взят планировщик задач с сайта 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 "stm32g0xx.h"

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

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

/**
 * Прототипы фукнций
 */
void RTOS_Init (void);
void RTOS_SetTask (void (*taskFunc)(void), uint32_t taskDelay, uint32_t taskPeriod);
void RTOS_DeleteTask (void (*taskFunc)(void));
void RTOS_DispatchTask (void);
void RTOS_Timer (void);

void tdelay_ms(uint32_t msek);

#endif
