下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、使用arm標(biāo)準(zhǔn)c庫(kù)進(jìn)行嵌入式應(yīng)用程序開(kāi)發(fā)隨著對(duì)高處理能力、實(shí)時(shí)多任務(wù)、超低功耗等方面需求的增長(zhǎng),高端處理器已經(jīng)進(jìn)入了國(guó)內(nèi)開(kāi)發(fā)人員的視野,并在國(guó)內(nèi)得到了普遍的重視和應(yīng)用。是目前嵌入式領(lǐng)域應(yīng)用最廣泛的risc微處理器結(jié)構(gòu),憑借低成本、低功耗、高性能等優(yōu)點(diǎn)占領(lǐng)了嵌入式系統(tǒng)應(yīng)用領(lǐng)域的率先地位。ads是arm公司推出的arm集成開(kāi)發(fā)環(huán)境,提供了對(duì)c和c+的支持,是目前開(kāi)發(fā)arm的主要工具。本文針對(duì)日益縮短的嵌入式開(kāi)發(fā)周期,結(jié)合arm系統(tǒng)開(kāi)發(fā)調(diào)試閱歷,對(duì)用法arm標(biāo)準(zhǔn)庫(kù)舉行應(yīng)用程序開(kāi)發(fā)作了比較系統(tǒng)的分析。1 arm標(biāo)準(zhǔn)庫(kù)介紹ads提供了ansi c和c+標(biāo)準(zhǔn)庫(kù),本文僅研究ansi c庫(kù),該庫(kù)包含下面幾個(gè)部
2、分:is0 c庫(kù)標(biāo)準(zhǔn)所定義的函數(shù);在semlhosted環(huán)境下用來(lái)實(shí)現(xiàn)c庫(kù)函數(shù)與目標(biāo)相關(guān)的函數(shù);c和c+編譯器要用法的heiper函數(shù)。該庫(kù)提供的諸如文件輸入輸出之類的設(shè)備,用法了標(biāo)準(zhǔn)的arm semihosted執(zhí)行環(huán)境(semihosting是針對(duì)arm目標(biāo)機(jī)的一種機(jī)制,它能夠按照應(yīng)用程序代碼的輸入/輸出哀求,與運(yùn)行有調(diào)度功能的主機(jī)通信,這種技術(shù)允許主機(jī)為通常沒(méi)有輸入和輸出功能的目標(biāo)硬件提供主機(jī)資源)。armulator、angel和multi-lce都支持這個(gè)環(huán)境,可以用法ads中提供的開(kāi)發(fā)工具開(kāi)發(fā)應(yīng)用程序,然后在armulator或者是開(kāi)發(fā)板上運(yùn)行和調(diào)試該程序。假如要使應(yīng)用系統(tǒng)自立于這
3、個(gè)環(huán)境,則必需重新實(shí)現(xiàn)c庫(kù)中依靠于這個(gè)環(huán)境的相關(guān)函數(shù),按照用戶系統(tǒng)的運(yùn)行環(huán)境對(duì)c庫(kù)舉行適當(dāng)?shù)牟脺p。用法ansi標(biāo)準(zhǔn)c庫(kù)舉行程序開(kāi)發(fā),不僅可以提高開(kāi)發(fā)效率而且可以增加程序的可移植性。在程序中用法庫(kù)函數(shù),必需先建立一個(gè)庫(kù)函數(shù)可以執(zhí)行的環(huán)境,這些工作都由庫(kù)中的函數(shù)完成。當(dāng)應(yīng)用程序鏈接了c庫(kù)中的函數(shù)時(shí),c庫(kù)中的函數(shù)將完成:創(chuàng)建c程序所需的執(zhí)行環(huán)境(建立棧,假如需要?jiǎng)?chuàng)建一個(gè)堆,初始化程序用法的部分庫(kù));調(diào)用main()函數(shù)開(kāi)頭執(zhí)行c程序;支持程序用法的is0定義的函數(shù);捕捉運(yùn)行時(shí)的錯(cuò)誤和信號(hào),假如需要,按照錯(cuò)誤終止執(zhí)行或程序退出。2 裁減arm標(biāo)準(zhǔn)c函數(shù)庫(kù)標(biāo)準(zhǔn)庫(kù)中包含了部分依靠于arm semihost
4、ed執(zhí)行環(huán)境的函數(shù),這部分函數(shù)的函數(shù)名中包含有單個(gè)或兩個(gè)下劃線“-”,需要重新實(shí)現(xiàn)這部分函數(shù)。假如在程序中定義這些函數(shù),則編譯器就會(huì)用法新定義的函數(shù),這個(gè)過(guò)程稱為庫(kù)函數(shù)的裁減。普通狀況下,只需要重新定義很少的幾個(gè)函數(shù)就可以用法c庫(kù)。arm應(yīng)用系統(tǒng)開(kāi)頭執(zhí)行用戶應(yīng)用程序,必需先將應(yīng)用程序加載到執(zhí)行域,建立應(yīng)用程序的執(zhí)行環(huán)境。用法c庫(kù)時(shí),這些繁瑣的工作就大部分由c函數(shù)來(lái)完成了。匯編程序完成系統(tǒng)初始化后,跳轉(zhuǎn)到c程序的人口_main()(注重:不是main(),當(dāng)c程序中定義了main()主函數(shù)時(shí),編譯器就會(huì)生成_main代碼)。由_main()引導(dǎo)庫(kù)函數(shù)完成c執(zhí)行環(huán)境的初始化,詳細(xì)過(guò)程如下:將非啟動(dòng)
5、代碼的ro和rw執(zhí)行域代碼從加載域地址復(fù)制到執(zhí)行域地址;將zi域清零;跳轉(zhuǎn)到_rt_entry。調(diào)用_main()將大大簡(jiǎn)化匯編啟動(dòng)代碼的編寫,匯編代碼僅需完成系統(tǒng)硬件的初始化,而沒(méi)有須要將代碼從加載域地址復(fù)制到執(zhí)行域地址,以及zi域清零等工作。特殊是當(dāng)用法分布式加載時(shí)_main()的作用就越發(fā)顯然了。但是_main()并沒(méi)有建立c庫(kù)運(yùn)行必需的環(huán)境,這項(xiàng)工作由_rt_entry()完成,主要調(diào)用過(guò)程為:調(diào)用_rt_stackheap_init()建立堆和棧;調(diào)用_rt_lib_init()初始化引用的庫(kù)函數(shù);假如需要,建立main()函數(shù)的參數(shù)argc和argv等;調(diào)用main()函數(shù),執(zhí)行應(yīng)
6、用程序,可以應(yīng)用庫(kù)函數(shù);用main()函數(shù)的返回值作參數(shù)調(diào)用exit()。_rt_entry并不是c函數(shù),它是用arm c庫(kù)編程的起始點(diǎn)。_rt_entry不能用宴現(xiàn),由于這時(shí)候堆棧還沒(méi)有建立,堆棧由 rt_stackheap_init()來(lái)建立。上面容易介紹了c程序用法庫(kù)函數(shù)時(shí)的調(diào)用過(guò)程,由_rtstackheap_init()建立c庫(kù)用法的內(nèi)存模型堆和棧。由于arm庫(kù)是建立在semihosted執(zhí)行環(huán)境的,它實(shí)現(xiàn)的內(nèi)存模型是基于這個(gè)環(huán)境的,所以必需修改這個(gè)內(nèi)存模型建立機(jī)制。表1列出了需要重新實(shí)現(xiàn)的函數(shù),實(shí)現(xiàn)了這些函數(shù),應(yīng)用程序就可以脫離宿主機(jī)環(huán)境自立運(yùn)行了。其中,必需重新實(shí)現(xiàn)的是user
7、initialstackheap(),由于默認(rèn)的實(shí)現(xiàn)是基于semihosted執(zhí)行環(huán)境的,該函數(shù)被nstackheapinit()調(diào)用創(chuàng)建內(nèi)存模型,其他兩個(gè)函數(shù)沒(méi)有默認(rèn)的實(shí)現(xiàn)。實(shí)現(xiàn)該函數(shù),必需滿足下面的條件:用法不超過(guò)96字節(jié)的??臻g;除了r12(ip)外不要污染其他寄存器;將堆基址、?;贰⒍堰吔绾蜅_吔绶蛛x存在ror3作為返回參數(shù);堆必需保持8個(gè)字節(jié)對(duì)齊。實(shí)現(xiàn)例程如下:為了提高應(yīng)用程序開(kāi)發(fā)效率和可移植性,希翼在目標(biāo)系統(tǒng)上用法arm庫(kù)提供的標(biāo)準(zhǔn)輸人輸出庫(kù)函數(shù)。高層輸入輸出函數(shù)是不依靠于目標(biāo)系統(tǒng)環(huán)境的,但是高層輸入輸出函數(shù)必需調(diào)用依靠于目標(biāo)系統(tǒng)的底層函數(shù),才干實(shí)現(xiàn)應(yīng)用系統(tǒng)的輸入輸出。依據(jù)目標(biāo)系
8、統(tǒng)硬件環(huán)境重新定義這些底層函數(shù),就可以用法庫(kù)提供的標(biāo)準(zhǔn)inputoutput庫(kù)函數(shù)了。下面以裁減arm標(biāo)準(zhǔn)庫(kù)提供的printf系列輸出函數(shù)為例來(lái)作解釋。標(biāo)準(zhǔn)i/o庫(kù)中最常用的是printf系列函數(shù),包括_printf()、printf()、_fprintf()、fprintf()、vprintf()和vfprintf()。全部這些函數(shù)非透亮地用法_file,并且僅依靠于fputc()和ferror()兩個(gè)函數(shù)。函數(shù)_printf()和_fprintf()與printf()和fprintf()的區(qū)分僅在于前兩個(gè)函數(shù)不能格式化浮點(diǎn)值。只要定義了自己的_file版本和fputc()、ferror()
9、函數(shù),外加定義一個(gè)具有file類型的_stdout變量,就可以不作任何修改地用法printf系列、fwrite()、fputs()和puts()函數(shù)了。下面給出了詳細(xì)實(shí)現(xiàn)的模板,可以按照實(shí)際需要修改。includestruct_fileint handle;/*用戶需要的任何代碼(假如用法文件僅是為了調(diào)試用法prinft在標(biāo)準(zhǔn)輸出端輸出信息,則不需要任何文件處理代碼)*/;flle_stdout;/*file在stdio.h中定義為:typedef struct_file file;*/int fputc(int ch,file*f)/*用戶實(shí)現(xiàn)的fpute代碼。輸出一個(gè)字符,可以按照需要實(shí)現(xiàn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024裝修合同樣填寫簡(jiǎn)單裝修合同樣本
- 2024年婁桂與前配偶共同撫養(yǎng)子女合同
- 2024年度鮮花花藝設(shè)計(jì)合同
- 2024年度文化創(chuàng)意產(chǎn)品設(shè)計(jì)合同
- 2024年廢紙回收合同范本下載
- 2024年建筑工程木工長(zhǎng)期勞務(wù)合同
- 2024年雙方協(xié)商一致停薪留職具體條款協(xié)議
- 課件彩虹2教學(xué)課件
- 2024年度貨物銷售合同標(biāo)的:電子產(chǎn)品銷售
- 2024年度項(xiàng)目托管合同
- 鈉與水的反應(yīng)
- 議論文寫作技巧
- 教科版五年級(jí)科學(xué)上冊(cè)(風(fēng)的作用) 教學(xué)課件
- 二年級(jí)下冊(cè)語(yǔ)文試題 -“詩(shī)詞大會(huì)”題庫(kù)二 (word版有答案) 人教部編版
- GB/T 7702.20-2008煤質(zhì)顆?;钚蕴吭囼?yàn)方法孔容積和比表面積的測(cè)定
- 新歷史主義文藝思潮
- GB/T 40120-2021農(nóng)業(yè)灌溉設(shè)備灌溉用熱塑性可折疊軟管技術(shù)規(guī)范和試驗(yàn)方法
- GB/T 3903.2-1994鞋類通用檢驗(yàn)方法耐磨試驗(yàn)方法
- GB/T 10801.2-2018絕熱用擠塑聚苯乙烯泡沫塑料(XPS)
- 12J5-1 平屋面建筑標(biāo)準(zhǔn)設(shè)計(jì)圖
- 中印邊境爭(zhēng)端
評(píng)論
0/150
提交評(píng)論