下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

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

RTOS 上下文切换 - 步骤 3
[详细示例]

RTOS 滴答中断执行

ISR 源代码如下。为方便阅读,已删除注释(可在之前的页面查看)。

/* Interrupt service routine for the RTOS tick. */ void SIG_OUTPUT_COMPARE1A( void ) { vPortYieldFromTick(); asm volatile ( "reti" ); } /*--------------------------------------------------*/

void vPortYieldFromTick( void ) { portSAVE_CONTEXT();

vTaskIncrementTick(); vTaskSwitchContext(); portRESTORE_CONTEXT();

asm volatile ( "ret" ); } /*--------------------------------------------------*/
SIG_OUTPUT_COMPARE1A() 是一个裸函数,因此第一个指令是调用 vPortYieldFromTick()。vPortYieldFromTick() 也是一个裸函数,因此 AVR 执行上下文是通过调用 portSAVE_CONTEXT() 显式保存的。

portSAVE_CONTEXT() 将整个 AVR 执行上下文推送到 TaskA 的堆栈上,从而产生下图所示的堆栈。TaskA 的堆栈指针目前指向其自身上下文的顶部。在存储堆栈指针的副本后, portSAVE_CONTEXT() 执行完成。实时内核已有 TaskB 堆栈指针的副本,该指针是在上次暂停 TaskB 时获取的。

AtoB3.gif


下一节: RTOS 实现 - 详细示例步骤 4


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