下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
FreeRTOS-Plus-TCP 现具有统一的 IPv4 和 IPv6 功能,支持多接口。
为基于 FreeRTOS 的固件实现防砖化 MCU FOTA:
宣布停止支持 FreeRTOS 202012 LTS。
FreeRTOS 网站现已提供简体中文版本
新的 FreeRTOS Long Term Support 版本现已发布。

恢复上下文
[RTOS 实现构建块]

RTOS 宏 portRESTORE_CONTEXT() 是 portSAVE_CONTEXT() 的逆向操作。被恢复的任务的上下文先前储存于 任务堆栈中。实时内核检索任务的堆栈指针,然后将上下文 POP 回正确的 处理器寄存器。
#define portRESTORE_CONTEXT() asm volatile ( "lds r26, pxCurrentTCB nt" (1) "lds r27, pxCurrentTCB + 1 nt" (2) "ld r28, x+ nt" "out __SP_L__, r28 nt" (3) "ld r29, x+ nt" "out __SP_H__, r29 nt" (4) "pop r31 nt" "pop r30 nt"

: : :

"pop r1 nt" "pop r0 nt" (5) "out __SREG__, r0 nt" (6) "pop r0 nt" (7) );
请参阅以上代码:

  • FreeRTOS pxCurrentTCB 变量保存可从中检索任务堆栈指针的地址。 这被加载到 X 寄存器(1 和 2)。
  • 被恢复的任务的堆栈指针被加载到 AVR 堆栈指针中,首先是低字节 (3),然后是高 半字节 (4)。
  • 之后,处理器寄存器以相反的数字顺序从堆栈中弹出 (pop),直至 R1。
  • 状态寄存器存储在寄存器 R1 和 R0 之间的堆栈上,因此在 R0 (7) 前被恢复 (6)。


下一节: RTOS 实现 - 整合所有部分


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