首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RTOS TCB与任务堆栈

RTOS TCB与任务堆栈
EN

Stack Overflow用户
提问于 2019-12-28 05:57:10
回答 1查看 2.4K关注 0票数 1

对于RTOS中任务的TCB和任务堆栈之间的区别,我有一点误解,TCB是不是已经携带了所有关于上下文切换的信息,比如寄存器值等等?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-12-28 11:15:46

C不直接支持线程处理或多任务处理,也不支持线程,但是C实现通常需要局部变量、函数参数和函数返回地址的堆栈。

在先发制人的多线程环境中,每个线程必须有一个独立的堆栈,以便非线程感知的C代码有一个不同的执行环境。

正如您所述,TCB包含“有关上下文切换(例如寄存器值)的信息”,这在某些实现中可能是正确的,而在另一些实现中,TCB可能只包含任务堆栈的值--指针--将所有其他寄存器推到上下文开关上线程自己的堆栈中。在上下文切换期间,堆栈指针将被还原,然后存储在堆栈上的上下文被恢复。从线程堆栈中弹出的最后一个寄存器将是程序计数器,它将立即跳转到同一个堆栈(因此也是相同的局部变量和调用堆栈)的相同位置,这与它在被抢占时所拥有的相同。

请注意,实现可能在不同的方面有所不同,但上面是一个泛化的描述,而不是专门对FreeRTOS的描述。

以AVR目标为例的FreeRTOS上下文切换和操作系统滴答引起的上下文切换的详细信息在:https://www.freertos.org/implementation/a00018.html中给出。在那里,TCB只保留任务的堆栈指针,程序计数器被放置在堆栈上(在本例中是由中断自动设置的)。

您可以在特定的实现中检查struct tskTaskControlBlock

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59508515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档