/** ########################################################################## ** Filename : SimpleOs.c ** Project : ** Module : ** Processor : ** Version : 1.0 ** Compiler : ** Date/Time : ** Abstract : ** Contents : ** Note : ** (c) Copyright dmdz Co.,Ltd ** -------------------------------------------------------------------------- ** R E V I S I O N H I S T O R Y ** -------------------------------------------------------------------------- ** Date Ver Author Description ** -20231103- V01-- --Linboyi--- --初版-- ** #########################################################################*/ /***************************************************************************** * I N C L U D E F I L E S *****************************************************************************/ #include "Cpu.h" #include "SimpleOs_Cfg.h" #include "common_memory.h" #include "SimpleOs_CallOut.h" #include "SimpleOs_Time.h" /***************************************************************************** * D E F I N E S / M A C R O S *****************************************************************************/ #define OS_TASK_PRE_READY (uint8_t)0 #define OS_TASK_RUNNING (uint8_t)1 #define OS_TASK_WAITING (uint8_t)2 #define OS_TASK_READY (uint8_t)3 #define OS_TASK_SUSPENDED (uint8_t)4 /***************************************************************************** * T Y P E D E F I N I T I O N S *****************************************************************************/ typedef struct { uint8_t ucTaskState[OS_TASK_MAX_NUM]; uint8_t ucEventState[OS_EVENT_TASK_MAX_NUM]; uint8_t ucTaskRunNum; uint8_t ucMoreTaskCnt; } SimpleOs_Struct_Type; /***************************************************************************** * G L O B A L V A R I A B L E S * only configuration table allowed here,variables are not allowed! *****************************************************************************/ static SimpleOs_Struct_Type SimpleOs_Struct; /***************************************************************************** * C O N S T A N T S *****************************************************************************/ /***************************************************************************** * F U N C T I O N P R O T O T Y P E *****************************************************************************/ static void SimpleOs_MainFunction(void); /***************************************************************************** |Prototype : SimpleOs_Init |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : *****************************************************************************/ static void SimpleOs_Init(void) { common_memory_fill( (uint8_t *)&SimpleOs_Struct, 0u, sizeof(SimpleOs_Struct) / sizeof(uint8_t)); } /***************************************************************************** |Prototype : SimpleOs_Start |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : *****************************************************************************/ void SimpleOs_Start(void) { (void)SimpleOs_Init(); (void)SimpleOsTime_Init(); (void)OS_StartUpHook(); (void)SimpleOs_MainFunction(); } /***************************************************************************** |Prototype : SimpleOs_ActiveTask |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : *****************************************************************************/ void SimpleOs_ActiveTask(uint8_t TaskId) { if(TaskId < (uint8_t)OS_TASK_MAX_NUM) { if((uint8_t)OS_TASK_PRE_READY == SimpleOs_Struct.ucTaskState[TaskId]) { OS_EnterCriticalArea_0();/*PRQA S 3138*/ SimpleOs_Struct.ucTaskState[TaskId] = OS_TASK_READY; OS_LeaveCriticalArea_0();/*PRQA S 3138*/ } } } /***************************************************************************** |Prototype : SimpleOs_MainFunction |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : *****************************************************************************/ static void SimpleOs_MainFunction(void) { for(;;) { if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task1ms]) { SimpleOs_Struct.ucTaskState[OS_Task1ms] = OS_TASK_RUNNING; OS_Task1msFun(); SimpleOs_Struct.ucTaskState[OS_Task1ms] = OS_TASK_PRE_READY; } if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task2ms]) { SimpleOs_Struct.ucTaskState[OS_Task2ms] = OS_TASK_RUNNING; OS_Task2msFun(); SimpleOs_Struct.ucTaskState[OS_Task2ms] = OS_TASK_PRE_READY; } if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task5msA]) { SimpleOs_Struct.ucTaskState[OS_Task5msA] = OS_TASK_RUNNING; OS_Task5msAFun(); SimpleOs_Struct.ucTaskState[OS_Task5msA] = OS_TASK_PRE_READY; } if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task5msB]) { SimpleOs_Struct.ucTaskState[OS_Task5msB] = OS_TASK_RUNNING; OS_Task5msBFun(); SimpleOs_Struct.ucTaskState[OS_Task5msB] = OS_TASK_PRE_READY; } if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task5msC]) { SimpleOs_Struct.ucTaskState[OS_Task5msC] = OS_TASK_RUNNING; OS_Task5msCFun(); SimpleOs_Struct.ucTaskState[OS_Task5msC] = OS_TASK_PRE_READY; } if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task10msA]) { SimpleOs_Struct.ucTaskState[OS_Task10msA] = OS_TASK_RUNNING; OS_Task10msAFun(); SimpleOs_Struct.ucTaskState[OS_Task10msA] = OS_TASK_PRE_READY; } if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task10msB]) { SimpleOs_Struct.ucTaskState[OS_Task10msB] = OS_TASK_RUNNING; OS_Task10msBFun(); SimpleOs_Struct.ucTaskState[OS_Task10msB] = OS_TASK_PRE_READY; } if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task10msC]) { SimpleOs_Struct.ucTaskState[OS_Task10msC] = OS_TASK_RUNNING; OS_Task10msCFun(); SimpleOs_Struct.ucTaskState[OS_Task10msC] = OS_TASK_PRE_READY; } if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task10msD]) { SimpleOs_Struct.ucTaskState[OS_Task10msD] = OS_TASK_RUNNING; OS_Task10msDFun(); SimpleOs_Struct.ucTaskState[OS_Task10msD] = OS_TASK_PRE_READY; } if((uint8_t)OS_TASK_READY == SimpleOs_Struct.ucTaskState[OS_Task10msE]) { SimpleOs_Struct.ucTaskState[OS_Task10msE] = OS_TASK_RUNNING; OS_Task10msEFun(); SimpleOs_Struct.ucTaskState[OS_Task10msE] = OS_TASK_PRE_READY; } (void)OS_ErrorHook(); } }