下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

任务和协程
[入门指南]

有关多任务基本概念的介绍,请参阅 FreeRTOS 的工作原理部分。

任务协程文档页面提供信息,以便判断何时使用协程最为合适。以下是简要总结。请注意,可以仅使用任务,仅使用协程,或结合两者设计应用程序。然而,任务和协程使用不同的 API 函数,因此不能通过队列(或信号量)将数据从任务传递到协程,反之亦然。

协程实际上仅用于RAM具有严重RAM限制的非常小的处理器

 


“任务”的特点

简而言之 :使用 RTOS 的实时应用程序可以被构建为一组独立的任务。每个任务在自己的上下文中执行,不依赖于系统内的其他任务或 RTOS 调度器本身。在任何时间点,应用程序中只能执行一个任务,实时 RTOS 调度器负责决定所要执行的任务。因此, RTOS 调度器可以在应用程序执行时重复启停每个任务(将任务调入或调出)。由于任务不了解 RTOS 调度器活动,因此实时 RTOS 调度器负责确保任务调入时的处理器上下文(寄存器值、堆栈内容等)与任务调出时的处理器上下文完全相同。为实现这一点,每个任务都分配有自己的堆栈。当任务调出时,执行上下文被保存到该任务的堆栈中,以便以后再调入相同的任务时可以准确地恢复其执行上下文。请参阅 FreeRTOS 的工作原理部分,以获取更多信息。

任务总结

操作简单。
没有使用限制。
支持完全抢占式机制。
完全按优先顺序排列。
每个任务都保留自己的堆栈,从而提高 RAM 使用率。
如果使用抢占式机制,则必须谨慎考虑重入问题。

 

“协程”的特点

注意:协程是为了在非常小的设备上使用而实现的,但现在很少在领域中使用。因此尽管没有计划从代码中删除协程,但也没有计划进一步开发这些协程。

协程在概念上类似于任务,但有以下根本差异(详述在协程文档页面):

  1. 堆栈使用

    应用程序中的所有协程共用一个堆栈。与使用任务编写的类似应用程序相比,这大大降低了所需的 RAM。

     

  2. 调度和优先级

    协程间使用优先级协同调度,但可以包含在使用抢占式任务的应用程序中。

     

  3. 宏实现

    协程是通过一组宏实现的。

     

  4. 使用限制

    减少 RAM 使用是以一些严格限制协程构造为代价的。

协程总结

协程间共享堆栈会降低 RAM 使用。
协作操作减少了重入问题。
可以在不同架构间移植。
相对于其他协程完全优先,但如果混用协程和任务,那么总是会被任务抢占。
需要特别考虑堆栈不足的问题。
对 API 调用位置有限制。
只在协程间进行协作操作。

 

 

 

Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.