stm32_freertos_template/main.c

165 lines
3.4 KiB
C

//-----------------------definicje------------------------//
//-------------------------typy--------------------------//
typedef struct init_status_s
{
int8_t gui, eeprom;
int8_t CtrlTask;
int8_t DebugTask;
int8_t CheckKeyboardTask;
int8_t UpdateGUITask;
}init_status_t;
//------------------------zmienne-------------------------//
static init_status_t init_status;
//----------deklaracje funkcji prywatnych----------------//
void SystemInitializeTask (void);
void InitializePeripherals(void);
void CreateRTOSTasks(void);
void CtrlTask (void *parameters);
void DebugTask (void *parameters);
void CheckKeyboardTask (void *parameters);
void UpdateGUITask (void *parameters);
//----------funkcje publiczne----------------//
void main()
{
int8_t i,j,k;
//inicjalizacja urządzenia
xTaskCreate( SystemInitializeTask, "Autodetect", 96 , NULL,1, NULL );
//Przekaż kontrolę do RTOSa
vTaskStartScheduler();
// Jeżeli RTOS działa prawidłowo, to program nie dotrze do tego punktu
while (1);
}
void SystemInitializeTask (void)
{
InitializePeripherals();
CreateRTOSTasks();
vTaskDelete( NULL );
}
void InitializePeripherals(void)
{
debug_Initialize();
status.InitStatus.gui = gui_Initialize();
if ( status.InitStatus.gui < 0 )
{
debug_ReportError(-GUI_INIT_FAILED,"main.c" );
}
}
void CreateRTOSTasks(void)
{
status.InitStatus.CtrlTask = xTaskCreate( CtrlTask, ( signed char * ) "CtrlTask", 128 , NULL,2, NULL );
if ( status.InitStatus.SndCtrlTask < 0 )
{
debug_ReportError(-MALLOC_FAILURE,"xTaskCreate CtrlTask" );
}
status.InitStatus.DebugTask = xTaskCreate( DebugTask, ( signed char * ) "DebugTask", 128, NULL,0, NULL );
if ( status.InitStatus.DebugTask < 0 )
{
debug_ReportError(-MALLOC_FAILURE,"xTaskCreate DebugTask" );
}
status.InitStatus.CheckKeyboardTask = xTaskCreate( CheckKeyboardTask, ( signed char * ) "CheckKeyboardTask", 128, NULL,3, NULL );
if ( status.InitStatus.CheckKeyboardTask < 0 )
{
debug_ReportError(-MALLOC_FAILURE,"xTaskCreate CheckKeyboardTask" );
}
status.InitStatus.UpdateGUITask = xTaskCreate( UpdateGUITask, ( signed char * ) "UpdateGUITask", 128, NULL,1, NULL );
if ( status.InitStatus.UpdateGUITask < 0 )
{
debug_ReportError(-MALLOC_FAILURE,"xTaskCreate UpdateGUITask" );
}
}
void CtrlTask (void *parameters)
{
portTickType xLastWakeTime;
//inicjalizuj LastWakeTime
xLastWakeTime=xTaskGetTickCount();
while(1)
{
vTaskDelayUntil(&xLastWakeTime,10);
}
}
void DebugTask (void *parameters)
{
portTickType xLastWakeTime;
uint8_t *ptr;
//inicjalizuj LastWakeTime
xLastWakeTime=xTaskGetTickCount();
while(1)
{
/*
Send debug data to serial console
*/
vTaskDelayUntil(&xLastWakeTime,400);
}
}
void CheckKeyboardTask (void *parameters)
{
static uint8_t k;
portTickType xLastWakeTime;
//inicjalizuj LastWakeTime
xLastWakeTime=xTaskGetTickCount();
while(1)
{
keys_Poll();
k=keys_GetKeyCode();
gui_KeyPressed(k);
keys_ClearEvent();
vTaskDelayUntil(&xLastWakeTime,10);
}
}
void UpdateGUITask (void *parameters)
{
portTickType xLastWakeTime;
//inicjalizuj LastWakeTime
xLastWakeTime=xTaskGetTickCount();
while(1)
{
gui_RefreshScreen();
vTaskDelayUntil(&xLastWakeTime,100);
}
}