新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 關于ARM堆棧的一些問題

        關于ARM堆棧的一些問題

        作者: 時間:2016-11-21 來源:網絡 收藏
        學習ARM尋址方式的時候,里面有種尋址為堆棧尋址。

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

        本文引用地址:http://www.104case.com/article/201611/319110.htm

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

        1.向上生長 在像堆棧寫入數據后,堆棧指針的值變大,也就是向高地址方向生長,這種是遞增堆棧。

        2.向下生長 在像堆棧寫入數據后,堆棧指針的值變小,也就是向低地址方向生長,這種是遞減堆棧。

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

        1.滿堆棧 堆棧指針指向最后壓入棧的有效數據項,稱為滿堆棧。此時堆棧入棧操作要先調整指針再寫入數據;

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

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

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



        關鍵詞: ARM堆棧連續空

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 南江县| 宁陵县| 孝义市| 宣武区| 民丰县| 大余县| 红原县| 土默特右旗| 晋州市| 东丰县| 扎兰屯市| 区。| 永修县| 本溪市| 吴忠市| 德格县| 玉田县| 区。| 万盛区| 义乌市| 苗栗市| 剑河县| 武定县| 浦江县| 栾城县| 确山县| 丰县| 双峰县| 宁晋县| 太湖县| 清水河县| 惠州市| 中西区| 沂源县| 德格县| 中卫市| 汽车| 顺义区| 台北县| 新竹市| 酉阳|