新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 《Cortex-M0權(quán)威指南》之體系結(jié)構(gòu)---棧空間操作

        《Cortex-M0權(quán)威指南》之體系結(jié)構(gòu)---棧空間操作

        作者: 時間:2016-12-26 來源:網(wǎng)絡(luò) 收藏

          棧空間作為一種存儲器使用機(jī)制,是“先入先出”的結(jié)構(gòu),在系統(tǒng)空間中用作臨時數(shù)據(jù)的存儲。棧空間操作的關(guān)鍵之一為棧指針,每次執(zhí)行棧操作時,棧指針的內(nèi)容會自動移動。在M0處理器中,棧指針為R13(SP),而且物理上存在兩個棧指針,MSP,PSP,但每次只會使用一個,由CONTROL以及處理器的運(yùn)行狀態(tài)決定。

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

          向棧中存入數(shù)據(jù)叫“壓棧”(使用PUSH指令),回復(fù)數(shù)據(jù)叫“出棧”(使用POP指令)。根據(jù)架構(gòu)不同,有些處理器壓棧后地址增加,有些地址減小。操作基于“滿遞減”的棧模型,意味著棧指針始終指向棧空間最后一個數(shù)據(jù),在執(zhí)行存儲數(shù)據(jù)PUSH前,棧指針先減小。

          PUSH和POP通常用在函數(shù)或子程序的開始和結(jié)尾處。在函數(shù)開始執(zhí)行時,PUSH操作將的當(dāng)前內(nèi)容存入棧,執(zhí)行結(jié)束前,POP又將棧空間的數(shù)據(jù)恢復(fù)。一般來說執(zhí)行PUSH操作也要執(zhí)行POP操作,否則恢復(fù)的數(shù)據(jù)可能無法對應(yīng)之前的寄存器,這樣導(dǎo)致無法預(yù)測的結(jié)果,比如棧溢出。

          棧操作的最小單位是4字節(jié)(32位),的棧空間被設(shè)計位字對齊,地址必須是4的整數(shù)倍。由于這個原因,棧指針的最低兩位BITS[1:0]在硬件上被置為0,因此讀書也為0.

          MSP用于普通程序,在由操作系統(tǒng)時,內(nèi)核使用主棧指針MSP,用戶使用進(jìn)程棧指針PSP。

          MSP的初始化位于程序空間的開頭部分,PSP沒有進(jìn)行初始化定義,它需要通過軟件初始化。



        關(guān)鍵詞: Cortex-M0 寄存器

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 白山市| 澜沧| 晴隆县| 银川市| 阿尔山市| 文化| 丰顺县| 定南县| 白玉县| 合作市| 安福县| 郸城县| 禹城市| 涪陵区| 白玉县| 汉源县| 田东县| 荆州市| 嘉鱼县| 安阳县| 芦溪县| 曲周县| 隆德县| 蒙山县| 来凤县| 鸡西市| 伊宁市| 马山县| 延寿县| 湘西| 龙南县| 南木林县| 滨海县| 南部县| 绍兴市| 来宾市| 绵阳市| 隆林| 大埔区| 呼和浩特市| 西安市|