嵌入式学习小组
直播中

武文嘉

7年用户 180经验值
私信 关注

UCOSIII任务堆栈和STM32堆栈增长方向是否一致?

1.原子哥说:堆栈是在RAM中按照“先进先出(FIFO)”的原则组织的一块连续的存储空间   
个人理解堆栈难道不是栈的一种,既然如此,栈的顺序应该是先进后出吧?[理解来自数据结构]
2.最近看UCOSIII的原子哥视频,发现视频里这块儿没讲,UCOS里的堆栈方向是向上增长,而32里是向下[摘自原子哥],这样会不会冲突呢?
我所尝试的理解:这两个堆栈占用的是互不相关的两个存储空间////

@发烧友 @mygod @Admin @伟好好学习

回帖(8)

张桂芝

2020-4-23 08:31:00
这里我把最新的理解更新到这里啊!!!!  
函数OSTaskCreate()中的参数p_stk_base是任务堆栈基地址,那么如果CPU堆栈是向上增长的话,那么CPU堆栈基地址就是&START_TASK_STK[0],如果CPU堆栈是向下增长的话,那么CPU堆栈基地址就是&START_TASK_STK[START_STK_SIZE-1]
而我们的CPU___STM32的堆栈是向下增长的!
举报

张丽华

2020-4-23 08:39:16
UCOSIII堆栈按照STM32设置的向下增长的!仔细看《UCOSIII的开发手册》哪里写了堆栈是FIFO的?
举报

李木木

2020-4-23 08:46:38
ucosiii 里面可以配置栈的生长方向
举报

刘俊

2020-4-23 08:58:27
堆栈时先进后出的,栈都是先进后出的,只有队列是先进先出的,各个堆栈的空间地址相互之间没有关系,是由编译器决定的,移植在STM32上的UCOSIII一定是向下生长的,他必须与处理器的生长方向一样,堆栈的生长方向由处理器本身决定,UCOSII与UCOSII中均有选择开关,向上生长还是向下,例如51堆栈就是向上生长的,但他们的堆栈分配与进出原理是一样的,理解他可以在纸上画图理解一下,如果想深入理解UCOS最好买一本书《嵌入式实时操作系统UCOSIII》是UCOS作者写的,有中文版的,并且阅读源码,有问题可以联系我,与我共同探讨QQ: 3030895463
举报

更多回帖

发帖
×
20
完善资料,
赚取积分