FreeRTOS如何使用自己的堆分配调用栈来调用函数(任务)?

问题描述 投票:0回答:1

据我所知,C 编译器在调用函数时使用堆栈结构来分配局部变量、函数参数等。 但是 FreeRTOS 绕过了这种机制并使用自己的托管堆来分配调用堆栈帧?

问题是:究竟如何? 为了使用自己的函数调用堆栈内存管理方案,您在哪里指示编译器/链接器?

我查看了 FreeRTOS 源代码,对于目标和编译器我了解得更多一些(ARM 和 Microchip MCU;GCC、Keil、IAR 编译器),但找不到这是如何完成的。

非常感谢您的帮助。

stack heap freertos
1个回答
0
投票

无需深入研究源代码,您可以在此处阅读有关 FreeRTOS 工作原理的信息:https://www.freertos.org/implementation/main.html

编译器/链接器对 FreeRTOS 如何管理堆栈一无所知。内核负责所有工作。这称为上下文切换

总而言之,当一个任务被切换出去时,内核会将所有需要的处理器寄存器(即Context)复制到任务控制块(TCB)中。当任务恢复时,寄存器从 TCB 恢复,任务可以继续,就好像什么都没发生一样。

每个架构的实现都不同。你可以查看AVR端口,因为它比较简单。

© www.soinside.com 2019 - 2024. All rights reserved.