创建任务的两个核心:栈和任务结构体
函数运行过程中的局部变量保存在哪里?他自己的栈中
任务被切换过后,在切换的瞬间,哪些寄存器的值保存在哪里?保存在任务结构体中
在任务创建函数中,会malloc动态分配一块内存usStackDepth,这块内存就是栈。
精简过后的TCB结构体
要回答两个问题?
创建任务的栈从哪里分配?freeRTOS中定义了一个很大的全局数据作为一块空闲的内存,栈就是从这里面划分出一部分空间给任务使用。上图中的1000指的是1000*4字节。
这块分出来的空间起始地址保存在TCB结构体的pxStack参数中
大小怎么分配?栈的大小取决于怎么使用局部变量和函数调用的深度,在实际的开发中栈的大小只能去估计,没有好的计算方法
vTask1()怎么执行?将pc指针指向vTask1()的地址
,Task1()地址存在哪里?存在任务的栈中,如下图所示