简易版自制RTOS
代码来源于立创开源平台,ID:专业理工男
.h文件
#ifndef __TASKS_H
#define __TASKS_H#include "app.h"
#include "control.h"
#include "debug1.h"#define PRIORITY_NOR 1 //低优先级
#define PRIORITY_HIG 2 //高优先级#define TASK_RUN 1 //运行
#define TASK_STOP 0 //停止//任务结构体
typedef struct
{uint8_t Priority; //优先级uint8_t Run; //运行或停止uint16_t Timer; //计数值uint16_t ItvTime; //重载值void (*TaskHook)(void); //函数句柄
} TASK_COMPONENTS;//任务列表
typedef enum
{TASK0, TASK1,TASK2,TASK3,TASK4,TASK_MAX //最大任务数
} TASK_LIST;//函数声明
void Task_0(void);
void Task_1(void);
void Task_2(void);
void Task_3(void);
void Task_4(void);
void Task_Count(void);
void Task_Process(void);#endif
.c文件
#include "tasks.h"/**************************************************************************************************
* 版本:V1.00
* 日期:2024-10-01
* 功能:实现任务合理分配响应
* 更新:初始版本
* 作者:专业理工男
**************************************************************************************************///任务结构体初始化
static TASK_COMPONENTS TaskComps[] =
{{ PRIORITY_NOR, 0, 1, 10, Task_0 },{ PRIORITY_NOR, 0, 3, 50, Task_1 },{ PRIORITY_NOR, 0, 5, 500, Task_2 },{ PRIORITY_NOR, 0, 7, 1000, Task_3 },{ PRIORITY_HIG, 0, 9, 10, Task_4 },
};/**************************************************************************************************
* 功能:任务0
* 参数:无
* 描述:低优先级,平均10ms执行一次
**************************************************************************************************/
void Task_0(void)
{Control_Task(); //控制任务}/**************************************************************************************************
* 功能:任务1
* 参数:无
* 描述:低优先级,平均50ms执行一次
**************************************************************************************************/
void Task_1(void)
{BMP280_Task(); //BMP280气压计任务Feed_Dog(); //喂狗
}/**************************************************************************************************
* 功能:任务2
* 参数:无
* 描述:低优先级,平均500毫秒执行一次
**************************************************************************************************/
void Task_2(void)
{}/**************************************************************************************************
* 功能:任务3
* 参数:无
* 描述:低优先级,平均1秒执行一次
**************************************************************************************************/
void Task_3(void)
{Sys_Params_Save_Task(); //系统参数保存任务
}/**************************************************************************************************
* 功能:任务4
* 参数:无
* 描述:高优先级,10ms执行一次,实时任务
**************************************************************************************************/
void Task_4(void)
{DI_Input(); //开关量输入检测
}/**************************************************************************************************
* 功能:任务计数
* 参数:无
* 描述:1ms调用一次,含高优先级任务
**************************************************************************************************/
void Task_Count(void)
{uint8_t i;for(i = 0; i < TASK_MAX; i++){if(TaskComps[i].Timer) //任务计数,低优先级和高优先级{TaskComps[i].Timer--;if(TaskComps[i].Timer <= 0){TaskComps[i].Timer = TaskComps[i].ItvTime; //重载计数值TaskComps[i].Run = TASK_RUN; //任务使能}}if(TaskComps[i].Run && (TaskComps[i].Priority == PRIORITY_HIG)) //高优先级任务 {TaskComps[i].Run = TASK_STOP; //任务失能TaskComps[i].TaskHook(); //任务执行}}
}/**************************************************************************************************
* 功能:任务执行
* 参数:无
* 描述:低优先级任务
**************************************************************************************************/
void Task_Process(void)
{uint8_t i;for(i = 0; i < TASK_MAX - 1; i++){if(TaskComps[i].Run && (TaskComps[i].Priority == PRIORITY_NOR)) //低优先级任务 {TaskComps[i].Run = TASK_STOP; //任务失能TaskComps[i].TaskHook(); //任务执行}}
}
/**************************************************************************************************
* 功能:定时器0中断服务函数
* 参数:无
* 描述:1ms定时
**************************************************************************************************/
void Timer0_Isr(void) interrupt 1
{static uint16_t i;Task_Count(); //任务计数i++;if(i >= 500){i = 0;}
}