6 Star 32 Fork 13

panlin/MCU任务调度器-协程方式

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

调度器

介绍

一个使用协程实现的裸机调度器,类似协程库,但任务函数以及接口被封装成近似RTOS用法。通过利用C编译器自带__LINE__宏获取行号,任务阻塞退出时调度器保存当前行作为下次跳转断点,任务等待资源就绪后被唤醒并通过switch(line)跳转到断点继续运行,从而实现任务的调度,由于裸机无需过多关心竞态冒险问题。

任务调度器具备的功能

1.任务数量无限制,取决于RAM/ROM大小
2.协作式任务优先级0~15
3.任务等待资源阻塞(通过特殊的宏调用子函数,子函数内部也能阻塞)
4.任务信号
5.消息队列
6.软件定时器
7.通用异步等待接口(新增)
8.延迟调用接口(新增)
9.空闲函数(新增)

已做移植的MCU

  1. STM32F103
  2. STC8A
  3. STC8G
  4. HC32F460
  5. PY32F003

移植文档

移植文档在DOC文件夹

任务优先级

  1. 16个优先级,范围是[0~15],数值越小优先级越高
  2. 优先级策略可配置

子函数调用接口

1.通过特定的宏调用子函数,子函数则具备调用阻塞类接口的功能
2.子函数嵌套调用深度可配置

阻塞延时

  1. 任务延时不影响其他任务的执行,时间到达后任务将被唤醒接着执行,有3个接口
    os_delay_tick:阻塞延时单位为tick.
    os_sleep_ms:阻塞延时单位为毫秒(需要在os_config.h中进行配置 1tick = nMS)
    os_sleep_s :阻塞延时单位为秒(需要在os_config.h中进行配置 1tick = nMS)

任务信号

1.每个任务都绑定一个信号
2.通过给任务对象发送信号,唤醒任务

消息队列

1.消息队列与任务绑定,任务创建时可配置是否使用消息队列
2.采用环形队列
3.消息等待可配置(超时时间/永久等待)
4.消息等待阻塞,收到消息后任务唤醒接着执行,或等待超时唤醒

软件定时器

1.周期定时/单次定时
2.软件定时(轮询中执行)/硬件定时器(在sysTick中断执行)

通用异步等待接口(新增)

1.处理函数由用户自定义,处理完成后由返回值决定是否唤醒正在等待的任务。 2.使用通用异步等待接口,实现类同步的编程方式,代码执行流更加的清晰。

延迟调用接口(新增)

轻量的定时器,在某些场景下能代替软件定时器,无需创建,直接一个接口搞定定时,省事

空闲函数接口(新增)

类似于RTOS的空闲钩子函数,调用接口设置空闲函数后,当没有任务被调度时,它将被调用。

调度器使用注意事项

1.任务/任务子函数中的变量如需保持数据,请加static关键字,因为所有的任务都共享一个堆栈,产生任务切换会退出函数
2.不可在任务体使用 switch(){case},只能使用if(){}else if(){}代替

硬件要求

1.内核平台:无要求 (已知C51需要特殊配置)
2.ROM-无裁剪:10K+
3.ROM-极致裁剪:4.6K+
4.RAM: 1K+

MIT License Copyright (c) 2022 panlin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

一个使用协程实现的裸机调度器,类似协程库,由于裸机无需过多关心竞态冒险问题,,理论上可以移植到任何MCU平台。 展开 收起
C 等 2 种语言
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C
1
https://gitee.com/panlin_code/mcu_schedule.git
git@gitee.com:panlin_code/mcu_schedule.git
panlin_code
mcu_schedule
MCU任务调度器-协程方式
master

搜索帮助