任务调度开源代码是什么

1、前言通过[嵌入式软件架构设计-任务调度]了解到 mcu 的三种任务调度:前后台顺序执行法、时间片论法和操作系统,下面介绍一个基于时间片论法的任务调度模块开源代码。
2、介绍代码主要特点有:
适用于裸机平台移植简单,三个核心函数,初始化、启动和任务调度管理可动态地添加/删除普通任务,也能添加/删除中断任务普通任务具备简单的调度优先级功能实现了简单的 mcu 负载率计算,根据负载率可参考评估系统的实时性和响应性实现思路:
通过1ms定时器中断服务函数进行任务调度计时和任务状态就绪切换普通任务在主循环中判断就绪状态并执行,而中断任务则在中断服务函数中判断就绪状态并执行普通任务在创建时会根据优先级在普通任务列表中进行排序,优先级越高的函数在列表中越靠前当正在执行的普通任务每次执行完毕后,都会重新从普通任务列表中从头开始判断状态并执行,从而实现调度优先级功能(并非抢占式)根据普通空闲任务运行次数和中断空闲任务运行次数得到 mcu 的负载率计算3、代码示例源文件部分代码如下
/** * @brief 创建新的任务调度 * * @note 任务函数不能被阻塞,尽量保证任务执行的时间小于 1ms,且调度周期一定要大于调度函数任务耗时 * @param[in] pfntask 回调任务函数 * @param[in] time 调度周期, 单位ms. * @param[in] priority 调度优先级 5-250, 其他预留, 值越小, 优先级越高 */void ctask_creat(taskruncb pfntask, uint16_t time, uint8_t priority){ int i, j; if (priority 250) { priority = 250; } for (i = 0; i < ctask_support_num; i++) { if (sg_ttaskmanage.task[i].priority i; j--) { sg_ttaskmanage.task[j] = sg_ttaskmanage.task[j - 1]; sg_ttaskmanage.task[j - 1].isused = false; } } sg_ttaskmanage.task[i].isused = true; sg_ttaskmanage.task[i].isrunnig = false; sg_ttaskmanage.task[i].itvtime = time; sg_ttaskmanage.task[i].pfntaskhook = pfntask; sg_ttaskmanage.task[i].timer = time; sg_ttaskmanage.task[i].priority = priority; break; }}头文件接口定义
/* exported types ----------------------------------------------------------------------------------------------------*/typedef void (*taskruncb)(void);/* exported constants ------------------------------------------------------------------------------------------------*//* exported macro ----------------------------------------------------------------------------------------------------*//* exported functions ------------------------------------------------------------------------------------------------*/extern void ctask_init(void);extern void ctask_remarks(void);extern void ctask_start(void);extern void ctask_creat(taskruncb pfntask, uint16_t time, uint8_t priority);extern void ctask_destory(taskruncb pfntask);extern void ctask_isrcreat(taskruncb pfntask, uint16_t time);extern void ctask_isrdestory(taskruncb pfntask);extern uint8_t ctask_getloadrate(void);extern uint32_t ctask_getsystimer(void);4、下载链接下载链接可复制
https://gitee.com/const-zpc/ctask

LifeSmart云起成为冬奥村智能家居项目指定供应商
迪信通CEO:oppo那些手机厂商为何回归线下渠道
小米6最新消息:小米6亮白版“王牌”来袭,7月14日开售,又要开始抢购了!
微软助力企业打造现代化安全战略 伟世通推出汽车应用商店
中芯国际发布公告:已知悉梁孟松有条件辞任的意愿
任务调度开源代码是什么
端点电流检测芯片,我们该如何选择?
L3G4200DH高性能三轴数字输出陀螺仪
智能手表能做到的事现在可以通过拨弄纹身实现
“新基建”将开启数据中心新一轮增长
人工智能和智能视频有望从安全视频中获取更多见解
手机厂商要造车、车企跨界造手机,谁的胜算更大?
关于三极管的问题解答
STM32+BH1750光敏传感器获取光照强度
如何区分真假手机电池!
有关batch size的设置范围
共享单车市场太乱,摩拜回应高层贪腐传闻:涉嫌违法已报案
电源快速脉冲群EFT和静电测试ESD不通过怎么办?
无人机红外载荷适用于哪些行业?
模拟导线覆冰监测装置-风河智能