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

          新聞中心

          ARM標(biāo)準(zhǔn)庫(kù)

          作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏

          下面給出了具體實(shí)現(xiàn)的模板,能夠根據(jù)實(shí)際需要修改。
          #include
          struct__FILE
          {
          int handle;

          };
          FlLE_stdout;
          int fputc(int ch,F(xiàn)ILE*f){

          return ch; !

          }
          int ferror(FILE*f){

          return EOF;
          } .


          結(jié)語(yǔ)
          本文分析了庫(kù)的工作機(jī)理,給出了裁減C庫(kù)進(jìn)行程式研發(fā)的關(guān)鍵步驟。實(shí)際應(yīng)用時(shí)需要根據(jù)具體的硬件環(huán)境和應(yīng)用需要裁減C庫(kù),提高代碼執(zhí)行效率。 .

          !

          Semihosted

          Semihosted 環(huán)境 (semihosting 是針對(duì) ARM 目標(biāo)機(jī)的一種機(jī)制,它能夠根據(jù)應(yīng)用程序代碼的輸入 / 輸出請(qǐng)求,與運(yùn)行有調(diào)試功能的主機(jī)通訊。這種技術(shù)允許主機(jī)為通常沒(méi)有輸入和輸出功能的目標(biāo)硬件提供主機(jī)資源 )
          在 semlhosted 環(huán)境下用來(lái)實(shí)現(xiàn) C 庫(kù)函數(shù)與目標(biāo)相關(guān)的函數(shù)。

          可以在你的 Application Code 中使用 printf 等 stand IO Function in C Library! 方便調(diào)試!更多的你可以參考 ARM DUI 0058D ( Debug Target Guide ?。?p>http://infocenter.arm.com/help/topic/com.arm.doc.dui0058d/DUI0058.pdf

          1 、 ARM 公司對(duì) Semihosting 的中文解釋是半主機(jī)機(jī)制。為什么叫半主機(jī)呢?主要是指應(yīng)用程序的代碼運(yùn)行在目標(biāo)系統(tǒng)上,當(dāng)需要類似 PC 平臺(tái)下的控制臺(tái)輸入輸出時(shí),會(huì)調(diào)用 Semihosting 去利用 PC 上的控制臺(tái)輸入輸出設(shè)備:如打開關(guān)閉文件, PC 顯示器輸出,鍵盤輸入等等。

          2 、 Semihosting 在 ADS1.2 的開發(fā)環(huán)境下,只能在以下調(diào)試代理上運(yùn)行, ARMulator, RealMonitor, Multi-ICE 以及 Angle 。這就是為什么周工的 EasyJTAG 不支持 Semihosting 的原理,因?yàn)樗粚儆谏鲜鏊姆N調(diào)試代理中的任何一種。

          3 、 Semihosting 是一段功能代碼,這段功能代碼主要運(yùn)行在 PC 上,并由調(diào)試工具上的固件來(lái)激活調(diào)用。而周工的 EasyJTAG 沒(méi)有實(shí)現(xiàn)這個(gè)激活調(diào)用功能。

          4 、對(duì)于開發(fā)用戶來(lái)說(shuō), Semihosting 是目標(biāo)系統(tǒng)通過(guò)調(diào)用 SWI 0x123456 或 SWI 0xAB 來(lái)調(diào)用的。前者 ARM 狀態(tài)下的專用操作號(hào),后者是 THUMB 狀態(tài)的專用操作號(hào)。當(dāng)開發(fā)者的軟硬件調(diào)試工具配置正確時(shí),可以正確執(zhí)行 Semihosting 功能。打個(gè)比方說(shuō),你在 ARMulator 下仿真指令
          MOV R1 , 0x18
          SWI 0x123456
          ARMulator 會(huì)正確終止你的程序執(zhí)行。
          而在 EasyJTAG 下仿真時(shí),卻會(huì)跳入 0x08 的異常向量入口處。

          在 AXD 中運(yùn)行程序時(shí),報(bào)告 out of heap memory ?

          不是程序的問(wèn)題。因?yàn)?ADS 調(diào)用了 semihosting ,所以需要修改變量 $top_of_memory 。

          使用 SEMIHOSTING 時(shí), SEMIHOSTING 的設(shè)置一般不需要修改。主要的是設(shè)置 TOP_OF_MEMORY, 這個(gè)值指定的部分內(nèi)存空間在 SEMIHOSTING 的時(shí)候需要用到。你要保證 TOP_OF_MEMORY 值知道的空間是可用的。而且,要使用 SEMIHOSTING 的話,你需要做些初始化的工作的,如果你沒(méi)有用 MAIN 的話,需要自己添加,如果你有 MAIN 函數(shù)的話,編譯器自己會(huì)添加。


          SEMIHOSTING 相關(guān)配置
          AXD 中:
          1.OPTIONS -> CONFIGURE TARGET -> ARMULATE;
          2.OPTIONS -> CONFIGRUE PROCESSOR -> SEMIHOSTING -> 選中


          quote from:
          http://forum.eepw.com.cn/forum/main?url=http://bbs.edw.com.cn/thread/61698/1

          SEMIHOSTING 主要是針對(duì) I/O 操作的,在嵌入式開發(fā)過(guò)程當(dāng)中,通過(guò) SEMIHOSTING ,可以把輸入輸出定向到 HOST 上,利用 HOST 的輸入和輸出。

          從用戶的角度來(lái)看, printf 好像和普通的一樣,關(guān)鍵的區(qū)別在于 printf 的實(shí)現(xiàn)。一般的調(diào)試器都提供兩個(gè)版本的 IO 庫(kù),一個(gè)式標(biāo)準(zhǔn)的庫(kù),另外一個(gè)是支持 semihosting 的庫(kù)。其實(shí)現(xiàn)有區(qū)別。下面以 printf 舉例說(shuō)明其原理:支持 semihosting 的 printf 的實(shí)現(xiàn)和標(biāo)準(zhǔn)的 printf 不同,支持 semihosting 的 printf 用 SWI 指令來(lái)通知仿真器。仿真器在地址 0x8 處設(shè)置斷點(diǎn),但 SWI 指令執(zhí)行后,仿真器可以捕獲到該 SWI 指令。根據(jù) SWI 的 number 來(lái)判斷這個(gè) SWI 是不是 SEMIHOSTING 請(qǐng)求,如果是,再根據(jù)具體的 semihosting number 響應(yīng)用戶的 semihosting 請(qǐng)求,完成用戶的 semihosting 請(qǐng)求后,返回到 SWI 的后面一條指令,繼續(xù)執(zhí)行。所以,對(duì)用戶來(lái)說(shuō),這是透明的。

          在 ADS 下面,默認(rèn)的好像是支持 SEMIHOSTING 的,你自己寫一個(gè)簡(jiǎn)單的程序,用 printf 輸出,應(yīng)該能在 console 看到輸出。注意幾點(diǎn): 1. 在 AXD 里面 semihosting 必須要打開; 2. 仿真器必須支持 semihosting 。

          在 ARM 的集成開發(fā)環(huán)境中,只讀的代碼段和常量被稱作 RO 段 (ReadOnly) ;可讀寫的全局變量 和靜態(tài)變量被稱作 RW 段 (ReadWrite) ; RW 段中要被初始化為零的變量被稱為 ZI 段 (ZeroInit) 。對(duì)于嵌入式系統(tǒng)而言,程序映象都是存儲(chǔ) 在 Flash 存儲(chǔ)器等一些非易失性器件中的,而在運(yùn)行時(shí),程序中的 RW 段必須重新裝載到可讀寫的 RAM 中。這就涉及到程序的加載時(shí)域和運(yùn)行時(shí)域。簡(jiǎn)單來(lái) 說(shuō),程序的加載時(shí)域 就是指程序燒入 Flash 中的狀態(tài),運(yùn)行時(shí)域 是指程序執(zhí)行時(shí)的狀態(tài)。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: ARM標(biāo)準(zhǔn)

          評(píng)論


          技術(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); })();