uCOS-II创建任务OSTaskCreateExt()中栈顶指针与栈底指针解读

uCOS-II创建任务的时候,需要填写栈顶指针和栈底指针,查看了OSTaskCreateExt( )源码,里面会有个宏

OS_STK_GROWTH来区分堆栈指针的生长方向,之前一直迷迷糊糊的,今天总算弄懂了和大家分享一下。

在ARM中,堆和栈的生长方向正好相反,具体可看下图所示

uCOS-II创建任务OSTaskCreateExt()中栈顶指针与栈底指针解读_第1张图片

堆是从低地址往高地址增长,栈是从高地址往低地址递减;

1)OS_STK_GROWTH == 1;//从高地址往低地址生长

如果申请了一块TaskStk[stksize]的栈空间,则数据入栈从高地址开始,即&TaskStk[stksize - 1],因此栈顶指针

即为&TaskStk[stksize - 1],相应的栈底指针即为&TaskStk[0]。

2)OS_STK_GROWTH == 0;//从低地址往高地址生长

如果申请了一块TaskStk[stksize]的栈空间,则数据入栈从低地址开始,即&TaskStk[0],因此栈顶指针

即为&TaskStk[0],相应的栈底指针即为&TaskStk[stksize - 1]。


最后,欢迎留言讨论,谢谢!

你可能感兴趣的:(uCOS-II)