当前位置: 首页 > news >正文

简易版自制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;}
}

http://www.xdnf.cn/news/65521.html

相关文章:

  • AI律师匹配AI分析法律需求意图并匹配律师
  • 7. 服务通信 ---- 使用自定义srv,服务方和客户方cpp,python文件编写
  • 操作指南:在vue-fastapi-admin上增加新的功能模块
  • 江湖密码术:Rust中的 bcrypt 加密秘籍
  • 算法 | 成长优化算法(Growth Optimizer,GO)原理,公式,应用,算法改进研究综述,matlab代码
  • QLisview 实现model deletage,并且在不需要编辑的情况下自定义UI
  • 【Redis】Jedis与Jedis连接池
  • Oracle数据库和PLSQL安装配置
  • 基于单片机的BMS热管理功能设计
  • 实验四 Java图形界面与事件处理
  • 如何对只能有一个`public`顶层类这句话的理解
  • 【解决】Vue + Vite + TS 配置路径别名成功仍爆红
  • Unreal Engine中FRotator与FQuat在赛车游戏方向盘控制中的协同应用解析
  • 【C++编程入门】:从零开始掌握基础语法
  • CENTOS 7 安装VNC
  • 【Java面试笔记:基础】1.谈谈你对Java平台的理解?
  • 移动端动态滑动拨盘选择器【Axure元件库】
  • 自注意力机制、多头自注意力机制、填充掩码 Python实现
  • 如何在白平衡标定种构建不同类型的白平衡色温坐标系
  • Android 音悦适配-v4.3.3-可在线播放可下载音乐的第三方APP
  • 【解决方法】关于解决QGC地面站4.4.3中文BUG,无法标注航点的问题
  • 模型检测技术的发展历史简介
  • Redis基础知识
  • 山东大学软件学院创新项目实训开发日志(21)之小问题修复之对话方向修改
  • 工厂模式:简单工厂模式
  • 免费送源码:ava+springboot+MySQL 基于springboot 宠物医院管理系统的设计与实现 计算机毕业设计原创定制
  • 修改IP地址能否精确到地级市的县?——全面解析
  • 第39讲|决策树与作物分布建模:可解释的AI助力农业智能推演
  • WINDOWS下使用命令行读取本地摄像头FFMPEG+DirectShow,ffplay直接播放摄像头数据
  • arkTs:使用Refresh实现下拉刷新功能(含状态提示与动画控制)