OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 188|回复: 1

使用C语言构建一个协作式多任务系统

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2020-8-23
在线时间
6 小时
发表于 2024-2-5 17:04:56 | 显示全部楼层 |阅读模式
本帖最后由 大橙子疯 于 2024-2-7 09:41 编辑

使用了标准库头文件 `<setjmp.h>`中的 `setjmp` 和 `longjmp`两个函数,构建了一个简单的查询式协作多任务系统,支持独立栈共享栈两种任务。
  • 其中涉及到获取和设置栈的地址操作,因此还需要根据不同平台提供获取和设置栈的地址操作(一般是汇编语言,因为涉及到寄存器)
  • 该调度系统仅运行在一个实际的线程中,因此本质上属于协程
  • 独立栈任务都有自己独立的运行栈空间,互不干扰;共享栈任务共用一个运行栈空间。

特点
  • 无任务优先级抢占的功能。
  • 任务切换的时机完全取决于正在运行的任务,体现协作
  • 支持独立栈共享栈两种任务,根据不同的应用场景决定。
* 独立栈任务具有自己的调用栈,可以随时随地阻塞任务
* 共享栈任务没有独立的调用栈,多个任务共享,不用过多考虑栈的分配问题

  • 查询式的调度方式,当前任务切换时,查询下个任务是否需要执行。
  • 移植性强,只需要修改设置栈和获取当前栈地址的宏即可。
  • 相对于“时间片论法”的任务调度来说,查询式协作多任务系统有以下特点:
* 无需使用定时器做为任务调度
* 每个任务都可以使用`while`循环,用于执行任务并保持程序的运行,程序结构清晰
* 每个任务都可以随时阻塞等待,甚至可以在嵌套的子函数中阻塞等待
* 通过阻塞等待,无需使用状态机等较为复杂的方式来优化缩减每个任务的执行时长

  • 相对于“RTOS操作系统”来说,查询式协作多任务系统有以下特点:
* 没有任务优先级抢占式的功能,因此临界资源(中断除外)和优先级反转的问题也不存在
    * 允许用户或应用程序根据需要自由地切换到下一个就绪任务
    * 通过自主调度和管理任务,查询式协作多任务系统可以提高工作效率
    * 没有操作系统的复杂

代码链接:协作式多任务系统





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
30
金钱
30
注册时间
2020-8-23
在线时间
6 小时
 楼主| 发表于 2024-2-5 17:32:23 | 显示全部楼层
草稿的文章都不能别编辑
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 06:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表