13.3.3 任务堆栈

更新于 2026年10月10日 版权声明
13.3.3 任务堆栈

所谓堆栈就是在RAM中按数据后进先出的原则组织的连续存储空间。每个任务都应配有自己的堆栈,其功能有两个:一是任务切换时保护CPU内核寄存器中的数据(相当于在堆栈中虚拟了一个CPU),任务调度器在进行任务切换的时候会将当前任务的现场(CPU寄存器值等)保存在此任务的任务堆栈中,等到此任务下次运行的时候就会先用堆栈中保存的值来恢复现场,恢复现场以后任务就会接着从上次中断的地方开始运行;二是保存用户应用程序中的数据。

FreeRTOS中堆栈有静态分配和动态分配两种。如果使用函数xTaskCreateStatic()创建任务(静态分配),就需要程序员自行定义任务堆栈。如果使用函数xTaskCreate()创建任务(动态分配),那么任务堆栈就会由函数xTaskCreate()自动创建。(https://www.daowen.com)

FreeRTOS的xTaskCreate()函数规定了堆栈的生长方向(portSTACK_GROWTH)。如果栈地址向上生长,先申请TCB结构体对象所占用内存,再申请任务栈所需的内存。如果栈地址向下生长,先申请任务栈所占用内存,再申请TCB结构体对象所需的内存。xTaskCreate()函数中通过pvPortMalloc()函数申请内存,该函数位于“heep_4.c”文件中(也可以由其他内存管理),并将内存位置存储在任务的TCB结构体对象中。内存申请方式如下。

图示

↑上一章 ↓下一章
关注公众号获取验证码
复制内容需要验证码(7.99元/天)