208 lines
7.1 KiB
C
Raw Normal View History

2025-04-26 16:03:23 +08:00
/** ##########################################################################
** 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();
}
}