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

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

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

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


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

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

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

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

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

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

扫描二维码关注公众号,回复: 54558 查看本文章

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


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

猜你喜欢

转载自blog.csdn.net/qq_34577833/article/details/80049828
今日推荐