国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于ARM的嵌入式系統程序開發要點(五)--ARM/Thumb的交互工作

發布時間:2010-4-5 10:25    發布者:蹦蹦
關鍵詞: arm , Thumb , 嵌入式 , 系統程序 , 要點
引言

在前面的文章中提到過,很多情況下應用程序需要在ARM跟Thumb狀態之間相互切換,這部分就討論交互工作的實現方法和一些注意問題。

1  需要交互的原因

前面提到過,Thumb指令在某些特殊情況下具有比ARM指令更為出色的表現,主要是在代碼長度和窄帶寬存儲器系統性能兩方面。正是因為Thumb指令在特定環境下的優勢,它在很多方面得到了廣泛應用。但是因為下面一些原因,Thumb又不可能獨立地組成一個應用系統。
◇ Thumb指令集在功能上只是ARM指令集的一個子 集,某些功能只能在ARM狀態下執行,如CPSR和 協處理器的訪問。
◇ 進行異常響應時,處理器會自動進入ARM狀態。
◇ 從系統優化考慮,在寬帶存儲器上不應該放置 Thumb代碼,很多窄帶系統具有寬帶的內部存儲器。
◇ 即使是一個單純的Thumb應用系統,也必須加一 個匯編的交互頭程序,因為系統總是自動從ARM 開始啟動。

所以,不可避免地會產生ARM與Thumb之間交互的問題。

2  狀態切換的實現

處理器在 ARM/Thumb之間的狀態切換是通過一條專用的跳轉交換指令BX來實現的。BX指令以通用寄存器(R0~R15)為操作數,通過拷貝Rn到PC來實現 4GB空間范圍內的一個絕對跳轉。BX利用Rn寄存器中存儲的目標地址值的最后一位來判斷跳轉后的狀態。如圖1所示,是用BX指令實現狀態切換。




無論ARM還是Thumb,其指令存儲在存儲器中都是邊界對齊的(4字節或2字節對齊)。因此,在執行跳轉過程中,PC寄存器中的最低位肯定被舍棄,不起作用。在BX指令的執行過程中,最低位正好被用作狀態判斷的標識,不會造成存儲器訪問不對齊的錯誤。

圖 2 中是一段直接進行狀態切換的例程:



下面是一段直接進行狀態切換的例程。
;從ARM狀態開始
  CODE32 ;匯編關鍵字
  ADR R0, Into_Thumb+1 ;得到目標地址,末位置1, ;轉向Thumb
  BX R0 ;執行 ? ;其它代碼
  CODE16 ;匯編關鍵字
Into_Thumb ;Thumb代碼段起始地址
  … ;Thumb代碼
  ADR R5, Back_to_ARM ;得到目標地址,末位缺 ;省為0,轉向ARM
  BX R5 ;執行
  … ;其它代碼
  CODE32 ;匯編關鍵字
Back_to_ARM ;ARM代碼段起始地址

我們知道,在ARM的狀態寄存器CPSR 中,bit-5是狀態控制位T-bit,決定當前處理器的運行狀態。如果直接修改CPSR的狀態位,也能夠達到改變處理器運行狀態的目的。但是這樣會帶來一個問題,因為ARM采用多級流水線的結構,所以在程序執行過程中,指令流水線上會存在幾條預取指令(具體數目視流水線級數而不同)。當修改CPSR的 T-bit后,狀態的轉變會造成流水線上預取指令的執行錯誤。而如果用BX指令,則執行后會進行流水線的刷新動作,清除流水線上的殘余指令,在新的狀態下重新開始指令預取,從而保證狀態轉變時指令流的正確銜接。

3  ARM/Thumb之間的函數調用

在無交互的子程序調用中,其過程比較簡單。實現調用通常只需要一條指令:
BL function

實現返回也只需要從LR恢復PC即可:
MOV PC, LR

函數的調用過程如圖3所示。



如果子函數和父函數不在同一種狀態下執行,因為狀態切換,需要對函數調用作更多的考慮。
①  BL不能完成狀態切換,需要由BX來切換狀態。
②  BX不能自動保存返回地址到LR,需要在BX之前先保存好LR。
③  用“BX LR”來返回,不能使用“MOV PC, LR”,因為這條指令同樣不能實現狀態切換。返回時要仔細考慮保存在LR中最低位的內容是否正確。

假如用戶直接使用匯編語言進行狀態交互跳轉,上述的幾個問題都需要用手工編碼加以處理。如果用戶使用高級語言進行開發,不需要為ARM/Thumb之間的相互調用增加額外編碼,但是最好要對其調用過程加以了解。下面以ARM ADS中的編譯工具為例進行說明,如圖4所示。



①  兩個函數func1()和func2()被編譯成不同的指令集(ARM或Thumb)。
注意:func1()和 func2()在這里位于二個不同的源文件中。
②  編譯時必須告訴編譯器和鏈接器足夠的信息,一方面讓編譯器能夠使用正確的指令碼進行編譯,另一方面,當在不同的狀態之間發生函數調用時,鏈接器將插入一段鏈接代碼(veneers)來實現狀態轉換。

上述過程中的一個特點是:func1()還是使用通常的BL指令來進行子程序調用,而 func2()返回時則直接使用“BX LR”,沒有對LR進行判斷和最低位的設置。這是因為當執行BL指令對LR進行保存時,其最低位會被自動設置,以滿足返回時狀態切換的需要,可直接使用 “BX LR”。

在上面的例子中,為了讓編譯器在編譯函數func2()時使用BX而不是BL進行返回,必須告訴編譯器要按照滿足交互工作要求的方式進行編譯。在ARM的編譯器選項設置中,應選擇“-apcs /interwork”。這樣,函數的返回指令會被正確設置,并且當鏈接器進行目標代碼的鏈接時,能夠在需要的地方插入正確的鏈接代碼實現狀態切換。

當然,插入了鏈接代碼會相應地增加代碼長度,通常一段veneer包含3條指令,即12B字節長度。可以用“-info veneers”選項使鏈接器輸出所有veneers的位置和長度信息。

4  交互程序之間的兼容性

因為在指定交互選項后,編譯及鏈接后的輸出代碼跟在無交互情況下不同,所以當多個源文件如果使用了不同的設置進行編譯,相互之間的調用可能產生兼容性問題。圖5說明了這些關系。




在一個使用交互工作的項目工程管理中,對此要加以仔細考慮。

5  V5架構的擴展

ARM在V5版本的架構中,對ARM/Thumb的交互增加了新的支持。針對前面第3節中提到的函數調用和返回問題,V5版本中專門對指令做了擴展。
①  增加了新指令BLX,解決了原來BX和BL指令各自的欠缺。使交互的函數調用可以由一條指令實現,省去了跳轉代碼的開銷。
②  擴展了以PC為目標地址的數據傳輸指令功能。PC加載值的最低位將被自動送到狀態寄存器CPSR的T狀態位。也就是說,通過給PC賦值的方法也能實現狀態的切換,這樣就使習慣的函數返回方法——從堆棧中恢復寄存器,也能實現交互調用函數的正確返回了。

所以,V5架構以后的代碼,不再需要額外的鏈接代碼,縮小了代碼長度,提高了狀態切換時的執行效率。當然,在V5及以后的架構中,繼續保持了對以前代碼的良好兼容性。

6  Thumb-2

ARM和Thumb因為其各自的優勢,都得到了極為廣泛的應用。在一個應用程序中,用戶要根據系統的具體情況靈活分配,使用不同的編譯器,把不同的代碼編譯成ARM或Thumb,以希望得到最優的代碼長度和性能平衡。這樣做能夠達到系統優化的目的,但是也給設計人員帶來了額外的交互處理工作。最近,ARM公司公布了一項新的發明——Thumb-2指令集,該指令集同時包含32位和16位指令,在代碼長度和性能之間作了最佳的平衡。這樣,以后用戶就可以用一個統一的Thumb-2編譯器來解決現在面臨的很多問題了。

如圖6所示,是Thumb-2指令集跟ARM和Thumb之間的比較。




引證文獻

   1. 楊志強 嵌入式系統設計與發展 [期刊論文] -青海師范大學學報(自然科學版)2005(03)
   2. 劉志勇 基于ARM的無線視頻傳輸硬件系統的初步研究與開發 [學位論文] 碩士2005
   3. 李晶 基于 LINUX的無線局域網芯片驅動程序的設計與開發 [學位論文] 碩士2005


作 者:ARM中國 費浙平  
來 源:單片機與嵌入式系統應用 2003(12)
本文地址:http://m.qingdxww.cn/thread-10169-1-1.html     【打印本頁】

本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區
  • 使用SAM-IoT Wx v2開發板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿澤電子(Mouser)專區

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人动漫在线观看| 在线 色| 无人在线观看视频免费高清| 四虎亚洲| 一区二区欧美视频| 成人在免费观看视频国产| 久久99国产视频| 性色AV一区二区三区咪爱四虎| 五月天国产精品| 日本久久伊人| 亚洲永久视频| 在线看亚洲| 免费A级毛片无码鲁大师| 性视频网站在线| 日本久久久久久久久久| 十六一下岁女子毛片免费| 一二三四社区在线播放| 成人在线免费看片| 午夜婷婷一夜七次郎| 视频一本大道香蕉久在线播放| 欧美亚洲国产另类| 五月综合久久| 亚洲国产成人综合精品2020| 97公开超碰在线视频| 青青草原国产| 亚洲第一色区| 日韩精品欧美高清区| 王者女英雄做h污污本子| 风车动漫(p)_在线观看官网| 小SAO货水真多把你CAO烂| 性做久久久久久久久男女| 速度与激情9全集免费观看| 亚洲卡一卡2卡三卡4麻豆 | 亚洲精品资源| 极品少妇高潮啪啪无码吴梦 | 亚洲精美视频| 在线播放侵犯高傲女教师希崎| 4k岛国精品午夜高清在线观看| 久久久无码精品亚洲A片猫咪| 野花韩国高清完整版在线观看5 | 噜噜噜狠狠夜夜躁精品|