新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式軟件開發(fā)之:編譯器的缺省行為

嵌入式軟件開發(fā)之:編譯器的缺省行為

作者: 時間:2013-09-30 來源:網(wǎng)絡(luò) 收藏

本文引用地址:http://butianyuan.cn/article/257029.htm

13.2

多數(shù)嵌入式應(yīng)用程序最初都是在原型環(huán)境下開發(fā)的。無論什么樣的原型仿真環(huán)境與最終產(chǎn)品環(huán)境都是有差異的。因此,考慮如何將嵌入式應(yīng)用程序從其所依賴的開發(fā)工具或調(diào)試環(huán)境中移植到在目標硬件上獨立運行是非常重要的。

開始編寫嵌入式應(yīng)用程序時,開發(fā)者可能并不清楚目標硬件的具體規(guī)格。如,目標系統(tǒng)使用了什么樣的外圍設(shè)備、存儲器映射情況甚至不能確定處理器的型號。

為在了解這些詳細信息前能夠繼續(xù)軟件的開發(fā),RVCT工具提供了很多默認的操作,使用戶能編譯和調(diào)試與目標系統(tǒng)無關(guān)的應(yīng)用程序代碼。下面詳細介紹這些編譯選項,只有深入了解這些編譯選項設(shè)置,才能使開發(fā)更順利的進行。

13.2.1

1.簡介

在RVCT C庫中,對某些ISO C功能的支持由主機調(diào)試環(huán)境提供。提供該功能的機制被稱為Semihostin[1]。大多數(shù)的調(diào)試系統(tǒng)都支持機制,如ReslView Debugger AXD等。

調(diào)試系統(tǒng)提供這種機制是非常有用的,因為用于開發(fā)使用的硬件系統(tǒng)經(jīng)常沒有最終系統(tǒng)的所有輸入和輸出設(shè)備。在這種情況下,Semihosting可讓主機代替目標系統(tǒng)提供這些設(shè)備的功能。舉例來說,此機制可以用于啟用C庫中的函數(shù)(例如,printf()和scanf())使用主機的屏幕和鍵盤,而不使用目標系統(tǒng)的屏幕和鍵盤。

半主機由一組已定義的SWI操作來實現(xiàn)。應(yīng)用程序調(diào)用相應(yīng)的SWI,然后由調(diào)試代理程序(Debug Agent)處理SWI異常。調(diào)試代理程序完成系統(tǒng)與主機之間的通信。

圖13.1顯示了Semihosting機制的處理過程。

圖13.1 Semihosting機制的處理過程

在很多情況下,Semihosting SWI由庫函數(shù)內(nèi)的代碼調(diào)用。應(yīng)用程序也可以直接調(diào)用。支持 C庫中Semihosting的詳細信息,請參閱相關(guān)文檔。

2.Semihosting軟件接口

ARM和Thumb SWI指令包含一個軟中斷號,該中斷號可以被應(yīng)用程序使用。此編號可以由系統(tǒng)中的SWI處理程序進行解碼。有關(guān)SWI處理程序的詳細信息,請參閱本書中ARM異常處理一節(jié)。

Semihosting使用固定的中斷號調(diào)用相應(yīng)的處理程序。用于Semihosting的SWI是:

· 0x123456(在ARM狀態(tài)下);

· 0xAB(在Thumb狀態(tài)下)。

注意

用戶在編寫自己的中斷處理程序時,避免使用Semihosting已經(jīng)使用的中斷向量號。

調(diào)試代理通過SWI的中斷向量號識別該軟中斷是目標系統(tǒng)提出的Semihosting請求。具體是何種Semihosting請求(鍵盤輸入請求或屏幕顯示請求),通過向寄存器r0傳遞不同的參數(shù)進行區(qū)分。所有其他參數(shù)通過一個數(shù)據(jù)塊進行傳遞。該數(shù)據(jù)塊的地址通過寄存器r1傳遞給中斷處理程序。軟中斷的處理結(jié)果放在r0中返回,也可以通過顯式的返回值或傳遞數(shù)據(jù)塊的指針帶回程序的處理結(jié)果。即使未返回結(jié)果,也假定r0是被使用的。

用r0傳遞的可用Semihosting操作編號分配如下:

· 0x00-0x31 這些編號由ARM公司使用;

· 0x32-0xFF 這些編號由ARM公司保留,以備將來使用;

· 0x100-0x1FF 這些編號保留給用戶應(yīng)用程序。

注意

雖然這些編號ARM公司不使用,用戶可以使用這些編號編寫自己的SWI操作,但建議使用其他 SWI 編號,而不要使用Semihosting SWI 編號和這些Semihosting的預(yù)留操作類型編號。

· 0x200-0xFFFFFFFF這些編號未定義。當前未使用并且不推薦使用這些編號。

在以下部分中,操作名稱之后的括號中的編號是調(diào)用Semihosting操作時放入r0的值。例如,SYS_OPEN(0x01)。

如果從匯編語言代碼中調(diào)用SWI,最好使用semihost.h中定義的操作名稱??梢杂?EQU 偽操作定義操作名稱。例如:

SYS_OPEN EQU 0x01

SYS_CLOSE EQU 0x02


上一頁 1 2 3 下一頁

評論


相關(guān)推薦

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

關(guān)閉