關於ARM堆棧的一些問題

來源:互聯網
上載者:User

學習ARM定址方式的時候,裡面有種定址為堆棧定址。

ARM7中的寄存器R13就是作為堆棧指標SP的。堆棧內容的增減,就會影響堆棧指標的移動。這個移動方向與堆棧的生長方向有關。

ARM7的有兩種堆棧生長方向。

1.向上生長
在像堆棧寫入資料後,堆棧指標的值變大,也就是向高地址方向生長,這種是遞增堆棧。

2.向下生長 在像堆棧寫入資料後,堆棧指標的值變小,也就是向低地址方向生長,這種是遞減堆棧。

要注意的問題不僅僅是堆棧增長方向。還要考慮到堆棧指標指向的儲存單元是否已經儲存有堆棧資料,或者說入棧時是否可以直接向堆棧指標指向的儲存單元寫入資料。這就是“滿堆棧”與“空堆棧”。

1.滿堆棧
堆棧指標指向最後壓入棧的有效資料項目,稱為滿堆棧。此時堆棧入棧操作要先調整指標再寫入資料;

2.空堆棧
堆棧指標指向下一個待壓入資料的空位置,稱為空白堆棧。此時堆棧的入棧操作的入棧操作要先先寫入資料再調整指標。

綜合以上敘述,就可以得到四種堆棧類型,分別為滿遞增,空遞增,滿遞減,空遞減。

  然後我想到了uc/OS-II中就有與堆棧類型密切相關的東西,移植ucOS-II到相應平台上,就要考慮到堆棧類型。我看書上說到ADS1.2堆棧類型只支援滿遞減。此時我的問題就出來了,堆棧類型具體應該是跟MCU有關,而不同的編譯器又支援不同的類型,是不是這樣呢,最後我在ADS1.2檔案的一個講ATPCS的PDF中找到了答案,原來就是這樣,ADS1.2隻能滿遞減。一下就是PDF中的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.