谷动谷力

 找回密码
 立即注册
查看: 1888|回复: 0
打印 上一主题 下一主题
收起左侧

FreeRTOS任务和协同程序 Tasks and Co-routines

[复制链接]
跳转到指定楼层
楼主
发表于 2022-2-25 20:51:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sunsili 于 2022-2-25 20:53 编辑

FreeRTOS任务和协同程序
Tasks and Co-routines


[入门]

有关基本多任务处理概念的介绍,请参阅FreeRTOS 的工作原理部分。
TasksCo-Routine文档页面提供了信息,以允许判断何时使用协同程序可能合适,也可能不合适。下面是一个简短的总结。请注意,可以仅使用任务、协程或两者的混合来设计应用程序 - 但是任务和协程使用不同的 API 函数,因此不能使用队列(或信号量)将数据从任务传递到协程,反之亦然。
协程实际上只适用于具有严格 RAM 限制的非常小的处理器。



“任务”的特征
简单来说:使用 RTOS 的实时应用程序可以构造为一组独立的任务。每个任务都在自己的上下文中执行,不会偶然依赖系统内的其他任务或 RTOS 调度程序本身。应用程序中只有一个任务可以在任何时间点执行,实时 RTOS 调度程序负责决定这应该是哪个任务。因此,RTOS 调度程序可能会在应用程序执行时重复启动和停止每个任务(将每个任务换入和换出)。由于任务不知道 RTOS 调度程序的活动,因此实时 RTOS 调度程序有责任确保交换任务时的处理器上下文(寄存器值、堆栈内容等)与同一任务时完全相同被换掉了。为了实现这一点,每个任务都提供了自己的堆栈。FreeRTOS 的工作原理部分了解更多信息。
任务摘要
简单的。
没有使用限制。
支持完全抢占。
完全优先。
每个任务都维护自己的堆栈,从而导致更高的 RAM 使用率。
如果使用抢占,必须仔细考虑重入。


“协同程序”的特征
注意:协同程序是为在非常小的设备上使用而实现的,但现在很少在现场使用。出于这个原因,虽然没有从代码中删除协程的计划,但也没有进一步开发它们的计划。
  • 堆栈使用应用程序中的所有协同程序共享一个堆栈。与使用任务编写的类似应用程序相比,这大大减少了所需的 RAM 量。
  • 调度和优先级协程相对于其他协程使用优先协作调度,但可以包含在使用抢占式任务的应用程序中。
  • 宏实现协程实现是通过一组宏提供的。
  • 使用限制RAM 使用量的减少是以对协同例程的结构方式的一些严格限制为代价的。
协同程序总结
在协同例程之间共享堆栈会导致 RAM 使用率低得多。
合作经营使重入不再是一个问题。
跨架构非常便携。
相对于其他协同程序具有完全优先级,但如果两者混合,则总是可以被任务抢占。
缺少堆栈需要特别考虑。
可以进行 API 调用的限制。
仅在协程本身之间进行协作操作。

+10
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-5-22 00:22 , Processed in 0.082585 second(s), 40 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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