下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

恢复上下文
[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.