關於堆疊生長方向的疑問?

2021-06-20 06:52:52 字數 396 閱讀 2001

os_stk_growth巨集的目的就是用來標示當前堆疊是向上還是向下生長的,這個巨集理解沒問題

但是當對應上ptos、pbos時,我就疑惑了,倆個引數分別對應的是棧頂和棧底指標,當棧初始化為空的時候,這倆個位址應該相等,

而在ucos裡面初始化idle任務時,當os_stk_growth = = 1時(堆疊從高往低生長),ptos == &ostaskidlestk[os_task_idle_stk_size - 1];

pbos == &ostaskidlestk[0]; 我的理解應該是ptos == pbos == ostaskidlestk[os_task_idle_stk_size - 1]; 因為棧的概念,棧底應該不變,棧頂指標不停的增減

看**註解pbos 指的就是bottom of stack,看下圖

堆疊的生長方向

堆疊的生長方向從最本質的理解是堆疊入棧方向是從高位址向位址還是低位址向高位址。從高位址向低位址生長一般叫做向下生長,也叫作逆向生長。從低位址向高位址生長一般叫做向上生長,也叫作正向生長。一般來說堆疊是逆向生長的。51微控制器的堆疊生長方向為正向生長,因為執行push指令時先將sp的值加1再將指定的8...

棧生長方向的定義與CPU的棧生長方向

51的棧是向高位址增長,intel 的8031 8032 8048 8051系列使用向高位址增長的堆疊 但同樣是intel 在x86系列中全部使用向低位址增長的堆疊。其他公司的cpu中除arm的結構提供向高位址增長的堆疊選項外,多數都是使用向低位址增長的堆疊。在沒有mmu的時代,為了最大的利用記憶體...

把大端 小端與堆 棧的生長方向聯絡起來記憶

對於大端 小端的區別,可能看資料的時候確實理解了,但過段時間就搞混了 高位低位址 低位高位址 高位高位址 低位低位址.是不是看起來就好頭大,哪個對應哪個啊。其實可以把大小端與堆疊聯絡起來記憶,雖然兩者講的不是乙個粒度的,但大小端模式裡高低位的存放與堆和棧的生長方向有乙個共同點,它們都存在乙個資料存放...