/*
   Project  : Приём данных по радио-каналу
	 Version  : 1
	 Date     : 16.10.2023
	 Author   : Sergey
	 Chip     : AVR
	 Comments :
	 
*/

#ifndef RTOS_INCLUDED
#define RTOS_INCLUDED

// Функции управления питанием
#include <sleep.h> 

// Здесь можно менять значения настроек ----------------------------------------------------
// Предельное число задач в очереди
#define TASK_QUEUE_SIZE        1
// Предельное число таймеров в очереди
#define SOFT_TIMER_QUEUE_SIZE  2
//------------------------------------------------------------------------------------------

// Коды ошибок
//Ошибка в указании размера очереди задач
#define ERR_TASK_QUEUE        0xAA
//Ошибка в указании размера очереди програмных таймеров
#define ERR_SOFT_TIMER_QUEUE  0xBB

// Для фиксации ошибок в указании размеров очередей (занимает 2 Байта EEPROM)-----------------------------------
// Все ошибки будут фиксироватся в EEPROM памяти в определённой ячейке
eeprom unsigned char eep_ErrTaskQueue       @0x00;  //Ячейка для сохранения ошибок очереди задач
eeprom unsigned char eep_ErrSoftTimerQueue  @0x01;  //Ячейка для сохранения ошибок очереди програмных таймеров 
//--------------------------------------------------------------------------------------------------------------  


/*
   Указатель на тип памяти eeprom
   Сам указатель хранится в SRAM
   И этот указатель теперь указывает
   на выбранный адрес EEPROM памяти
*/
// Переполнение очереди задачь
//char eeprom *ptr_RTOS_Owerflow_Task;
// Переполнение очереди програмных таймеров
//char eeprom *ptr_RTOS_Owerflow_SoftTimer;       

typedef void (*TPTR)(void); // Указатель без типа. Просто адрес
/*
   Эта директива запрещает компилятору выдавать предупреждения о том, 
    что функция объявлена, но в программе не используется.
*/
#pragma used+

// Прототипы функций --------------------------------
void InitRTOS(void);
void CPU_Stop(void);
void TaskManager(void);
void TimerService(void);
void SetTask(TPTR Task);
void SetTimerTask(TPTR Task, unsigned int NewTime); 
void DeleteTask(TPTR Task);                        
//---------------------------------------------------

/* 
   Эта директива разрешает компилятору выдавать предупреждения о том, 
    что функция объявлена, но в программе не используется.
*/
#pragma used-
#endif 