<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          本文引用地址:http://www.ex-cimer.com/article/257029.htm

          13.2

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

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

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

          13.2.1

          1.簡介

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

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

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

          圖13.1顯示了Semihosting機(jī)制的處理過程。

          圖13.1 Semihosting機(jī)制的處理過程

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

          2.Semihosting軟件接口

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

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

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

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

          注意

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

          調(diào)試代理通過SWI的中斷向量號識別該軟中斷是目標(biāo)系統(tǒng)提出的Semihosting請求。具體是何種Semihosting請求(鍵盤輸入請求或屏幕顯示請求),通過向寄存器r0傳遞不同的參數(shù)進(jìn)行區(qū)分。所有其他參數(shù)通過一個數(shù)據(jù)塊進(jìn)行傳遞。該數(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這些編號未定義。當(dāng)前未使用并且不推薦使用這些編號。

          在以下部分中,操作名稱之后的括號中的編號是調(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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();