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
最后,欢迎留言讨论,谢谢!