下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

协程
[有关协程的更多信息]

FreeRTOS 演示应用程序示例

下载内容中包含两个文件,使用含队列的协程进行演示:
  1. crflash.c

    其在功能上等同于标准演示文件 flash.c , 但使用了协程,而不是任务。 此外,其仅用于 演示用途,并未直接从协程内部切换 LED(如上述的快速示例),而是 通过队列将 LED 数量传递到了更高优先级的协程。

  2. crhook.c

    演示将数据从中断传递到协程的过程。 使用时间片钩子函数作为数据源。

PC 和较旧的 ARM Cortex-M3 演示应用程序之一 已经过预先配置,以使用此类示例协程文件,且可用作参考。 所有其他 演示应用程序被配置为仅可使用任务,但也可通过遵循以下流程轻松转换至协程演示。 这 将 flash.c 中实现的功能替换为了使用 crflash.c 进行实现:

  1. FreeRTOSConfig.h 中,将 configUSE_CO_ROUTINES 和 configUSE_IDLE_HOOK 设置为 1。
  2. 在 IDE 项目或项目生成文件中(取决于使用的演示项目):

    1. 将对文件 FreeRTOS/Demo/Common/Minimal/flash.c 的引用替换为 FreeRTOS/Demo/Common/Minimal/crflash.c
    2. 将文件 FreeRTOS/Source/croutine.c 添加到构建中。
  3. main.c 中:

    1. 包含入头文件 croutine.h,其中包含协程宏和函数原型。
    2. 将包含的 flash.h 替换为 crflash.h。
    3. 删除对创建 Flash 任务的函数 vStartLEDFlashTasks () 的调用……
    4. ……并替换为创建 Flash 协程的函数 vStartFlashCoRoutines (n),其中 n 为应创建的 协程数量。 每个协程以不同速率闪烁不同的 LED。
    5. 添加一个空闲钩子函数,该函数将按以下方式调度协程:
          void vApplicationIdleHook( void )
          {
              vCoRoutineSchedule( void );
          }
      	
      如果 main () 已包含空闲钩子,则只需将调用添加到现有钩子函数的 vCoRoutineSchedule() 即可。

  • 用 Flash 协程替换 Flash 任务意味着至少将减少两个待分配堆栈,因此 可以留给 RTOS 调度程序使用的堆栈空间也减少了。 如果您的项目 RAM 不足以在构建中包含 croutine.c,只需要 将 portT OTAL_HEAP_SPACE 的定义在 FreeRTOSConfig.h 内减少 ( 2 * portMINIMAL_STACK_SIZE ) 即可。




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