1. gzyueqian
      18529173453

      嵌入式培訓課程 ARM/Thumb之間的函數(shù)調(diào)用

      更新時間: 2019-04-01 15:01:40來源: 嵌入式培訓瀏覽量:5604

        作為嵌入式開發(fā)工程師,需要具有良好的學習能力,才能及時獲得新知識,隨時補充和豐富自己非常重要。在嵌入式培訓課程中,如何掌握ARM/Thumb之間的函數(shù)調(diào)用也是需要大家注意的。

        ARM的狀態(tài)寄存器CPSR中的狀態(tài)控制位T決定了當前處理器的運行狀態(tài),因此,可通過MSR和MRS指令來直接修改CPSR的狀態(tài)位,也能夠改變處理器運行狀態(tài)。但由于ARM采用多級流水線的結(jié)構(gòu),這樣做會造成流水線上預(yù)取指令的執(zhí)行錯誤,而如果用BX指令,則不會出現(xiàn)這樣的問題。



        在同一狀態(tài)下的子程序調(diào)用,由于它不需要狀態(tài)的切換,所以其過程相對比較簡單,通常只需一條指令實現(xiàn)調(diào)用:

        BL          function

        實現(xiàn)返回也只需從LR恢復(fù)PC即可:

        MOV      PC,LR

        在不同狀態(tài)下的子程序調(diào)用中,就需要進行狀態(tài)之間的切換,所以其過程相對復(fù)雜一些,需要考慮到以下幾點:

        需要由BX來切換狀態(tài),因為BL不能完全成狀態(tài)切換。

        需要在BX之前先保存好LR,BX不能自動保存返回地址到LR。

        需要用“BX  LR”來返回,不能使用“MOV         PC,LR”,返回時要仔細考慮保存在LR中位的內(nèi)容是否正確。

        嵌入式培訓在這里要注意的是:

        函數(shù)func1()和func2()位于2個不同的源文件中。

        在圖中,func1()使用BL指令調(diào)用func2(),而返回時直接使用“BX          LR”。這是因為當執(zhí)行BL指令對LR進行保存時,其位會被自動設(shè)置,以滿足返回時狀態(tài)切換的需要。

        編譯時必須告訴編譯器和鏈接器足夠的信息,一方面讓編譯器能夠使用正確的指令碼進行編譯;另一方面,當在不同的狀態(tài)之間發(fā)生函數(shù)調(diào)用時,鏈接器插入一段鏈接代碼來實現(xiàn)狀態(tài)轉(zhuǎn)換。

        學習嵌入式開發(fā)的方法多種多樣,但的辦法是去進行嵌入式培訓,而且一定要勤奮,編程是一種體力+腦力的活。在這里,小編推薦粵嵌教育。


      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲国产AV日韩AV二区 | 亚洲福利一区福利片三区 | 中文亚洲一区二区三区 | 亚洲国产欧美一区 | 中文字幕日韩综合网 | 最新国产资源网在线 |