//-----------------------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); } }