版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、嵌入式軟件開發(fā)、嵌入式開發(fā)流程、“PC軟件”、獨(dú)立的嵌入式應(yīng)用程序、程序員開始開發(fā)基于ARM的應(yīng)用程序時(shí),可以使用ARM的ADS編寫像“HELLOWORLD”這樣的程序可以在評(píng)估板上調(diào)試,但可以在將他移植到獨(dú)立的嵌入式應(yīng)用程序設(shè)備上時(shí),初始化硬件環(huán)境中使用的c庫函數(shù)目標(biāo)板上的內(nèi)存資源應(yīng)用程序,通過議程, PC軟件的構(gòu)建自定義標(biāo)準(zhǔn)c庫函數(shù)目標(biāo)板到自定義IMAGE的內(nèi)存映射目標(biāo)板的復(fù)位和初始化深度級(jí)別的內(nèi)存映射圖像是考慮到IMAGE的編譯和調(diào)試的ADS默認(rèn)標(biāo)準(zhǔn)c庫輸出錯(cuò)誤處理,堆棧文件* f (/* e.g.writeacharactertoanlcd */chartemp ch=ch; 可以看到
2、sendchar(adsembeddedexample目錄中的retarget.c。 你可以看到更多的重定向示例。 您能確認(rèn)連接時(shí)沒有使用semihostingSWI嗎?您可以刪除c庫函數(shù)中的semihosting,并向程序中添加以下語句,以確保連接時(shí)沒有使用semihostingswis:# pragma import (_ _ use _ no _ semi hosting _ swi ) 如果程序中使用semihosting,則在編譯時(shí)顯示錯(cuò)誤:使用error : symbol _ _ semi hosting _ swi _ guardmultiplydined更改: (check-b
3、eversou encesofiuse_semihosting_swi ),連接器列出使用smeihosting的程序,并提供可以自己執(zhí)行的功能函數(shù)。 在ADS1.2編譯器和庫函數(shù)文檔中,使用semihosting的所有c庫函數(shù)如表4-2所示。 注意:連接器在用戶自己的應(yīng)用程序代碼中沒有關(guān)于使用semihostingSWI的報(bào)告。 Agenda,構(gòu)建一個(gè)PC軟件自定義標(biāo)準(zhǔn)c庫函數(shù)將自定義IMAGE內(nèi)存映射復(fù)位到目標(biāo)板上,初始化深層次內(nèi)存映射,是IMAGE編譯和調(diào)試、分布式加載(sc 大多數(shù)嵌入式系統(tǒng)具有存儲(chǔ)器設(shè)備,其地址空間與整個(gè)存儲(chǔ)器映射交叉出現(xiàn)。 分布式負(fù)載提供了一種將你的代碼和數(shù)據(jù)放置在
4、不同內(nèi)存位置的方法,分布式負(fù)載定義了兩種內(nèi)存區(qū)域。 加載區(qū)域: reset/load時(shí)保存應(yīng)用程序的代碼和數(shù)據(jù)(通常的應(yīng)用程序?yàn)镽OM).Execution區(qū)域-在執(zhí)行程序時(shí)保存程序的代碼和數(shù)據(jù)。 在啟動(dòng)應(yīng)用程序時(shí),可以在每個(gè)load區(qū)域中創(chuàng)建一個(gè)或多個(gè)可執(zhí)行區(qū)域。 分布式加載的應(yīng)用程序?qū)⒃敿?xì)的內(nèi)存映射保存在描述文件中,并在armlink上使用eg : armlink program.o-scatter scatter.SCF-o program.axf作為參數(shù),以實(shí)現(xiàn)分布式加載(簡單只讀代碼和數(shù)據(jù)保存在ROM中的c庫函數(shù)初始化代碼(_main )初始化ZI數(shù)據(jù),將ROM中的RW數(shù)據(jù)復(fù)制到RA
5、M中,Scatter描述文件、通配符(* )語法可簡化CODE和DATA 在EXEC_ROM0 x00000 x4000*(RO)、鏈接器配置規(guī)則各可執(zhí)行區(qū)域中,鏈接器通過幾個(gè)基本規(guī)則配置代碼和數(shù)據(jù)的基本排序方法是,根據(jù)屬性配置的:RO領(lǐng)先RW,RW具有與ZI相同的屬性更多排序方法是通過按字母順序?qū)斎氲慕M名進(jìn)行排序,并按ARMLINK命令行中指定的順序進(jìn)行排序來決定的。 為了對(duì)eg:armlinkfile1.ofile2.o、SCATTOR文件中的對(duì)象進(jìn)行排序,并在不考慮標(biāo)準(zhǔn)部署規(guī)則的情況下使用FIRST和LAST將特定代碼和數(shù)據(jù)放置到指定地址上圖例:將VECTOR表放置在節(jié)的開頭。在loa
6、d _ rom0x 00000 x 4000 exec _ rom0x 00000 x 4000 可執(zhí)行區(qū)域內(nèi),執(zhí)行程序startaddressandlength exec _ rom0x 00000 x 4000; root (加載=exec地址) _ _ _ _ main.o (ro ); 復(fù)印代碼* (region $ $ table ) ro/rwaddressestocopy * (zi section $ $ table ) ziaddressestozero ram0x 100000 x 8000 * (ro ) allotherroareas ZI) programvariab
7、les,Mustbeinarootregion,outsiderootregion,root區(qū)域是可執(zhí)行區(qū)域,加載地址與執(zhí)行地址相等。 根區(qū)域的點(diǎn),根區(qū)域是可執(zhí)行區(qū)域,負(fù)載地址與執(zhí)行地址相同。 每個(gè)scatter描述文件必須至少包含根區(qū)域,并且至少包含以下內(nèi)容: _ _ main.o -復(fù)制代碼/數(shù)據(jù)的代碼Region$Table和zisection$table-包含要復(fù)制的代碼/數(shù)據(jù)的地址。 由鏈接器而不是對(duì)象文件生成的地址。 (所以*必須) error : l 6202 e : section region $ $ tablecannotbeassignertoanon-root regi
8、on.error : l 6202 e : sectionzisection $ $ tablecanno 如果ion .注意:*(ro )位于根區(qū)域中,則之前的主應(yīng)用程序自動(dòng)位于的入口點(diǎn)必須位于根區(qū)域中。 error : l 6203 e :進(jìn)入點(diǎn)(0x 0800000 ) lieswithinnon-rootregionexe _ flash .運(yùn)行時(shí)內(nèi)存管理,SemihostingSupport,ANSIC,sta PS; r 2不使用(HL ) R3不使用(sl ) mov PC,lr,Heap,堆棧,Heap的限制地址在單模式下不被使用。 堆棧限制地址僅在軟件堆棧檢查許可證的情況下有
9、效。的。 HB=0 x80000,SB=0 x88000,警告! 如果使用分布式加載,則必須執(zhí)行_user_initial_stackHEAP ()。 c庫初始化代碼中_user_initial_stackheap ()的默認(rèn)運(yùn)行是將heap放置在圖像文件的RW/ZI數(shù)據(jù)段之后。 使用image $ $ rw $ $ base/image $ $ zi $ $ base連接符號(hào)的符號(hào)對(duì)scatterloading無效。 在ADS1.1之前的軟件版本中,符號(hào)設(shè)置為0X0,heap放在此處。heap的并用可能會(huì)破壞向量和其他代碼,無論是直接(e.g.withmalloc () ),還是間接(byu
10、seofargc/argv )。在ADS1.2:中沒有定義符號(hào),不合并應(yīng)用程序: error : l 6218 e : undefinedsymbolimage $ $ zi $ $ limit (referredromsys _ stack heap.o ) 一個(gè)PC軟件結(jié)構(gòu)削減標(biāo)準(zhǔn)c庫函數(shù)將目標(biāo)板的定制IMAGE內(nèi)存映射到目標(biāo)板復(fù)位和初始化的深層次內(nèi)存映射IMAGE、TheVectorTable、AREAVectors、co 考慮READONLYIMPORTReset_Handler的編譯和調(diào)試的importotherexceptionhandlers; entrybreset _ han
11、dlerbundefined _ handlerbswi _ handlerbprefetch _ handler bdata _ handler nop; ReservedvectorBIRQ_Handler; 使用scatterloading FIRST時(shí),fiq _ handlerwillfollowdirectlyend直接位于0X0(或0 xffff 0 中斷向量表,初始化步驟,CLibrary、user code _ _ maincopycodeanddatazerouninstallitializeddata,ImageEntryPoint,$ sub $ $ main () e
12、nab addressofcmcontrolregisterremap _ bite hqu0x 04; Bit2isremapbitofCM_ctlENTRY; Onreset,analiasofROMisat0 x0,somjumpingrealrom.ldrpc,=Instruct_2Instruct_2; remapystetingremapbitfthecm _ ctlsregisterldrr 1,=CM_ctl_regLDRr0,r1ORRr0,r0,#Remap_bitSTRr0,r1; RAMisnowat0 x0 . theexpertpotecovittrosmsmstb
13、ecopiedforomtoram (in _ _ main ) reset _ handlerfollowsonfromhere此功能在有mmu的情況下也可以使用。 ROM/RAM重定向,初始化堆棧指針-amountofmemory(inbytes ) allocatedforstackslen _ fiq _堆棧equ 256 len _ IRQ _堆棧equ 256offset _ fiq _堆棧equ0offset _ IRQ _堆棧quoffset _ fiq _堆棧len _ locatedbyscatterfile; entereachmodeinturnsetuppthesta
14、ckpointermsrcpsr _ c,# mode _ fiq : or : I _ bit : or : f _ bit; nointerrupssup,r0,#Offset_FIQ_StackMSRCPSR_c,# mode _ IRQ : or : I _ bit : or : f _ bit; NointerruptsSUBsp,r0,#Offset_IRQ_Stack; systemmodestackissetplasticsrcpsr _ c,# mode _ sys : or : I _ bit : or : f _ bit; NointerruptsSUBsp,r0,#Of
15、fset_SYS_Stack; setustpstacklimitifneededldrr10、stack_limit; 如果在初始化c庫之前使用了ARM7芯片和MMU/MPU,則locatedbyscatterfile、本地存儲(chǔ)設(shè)置和運(yùn)行時(shí)存儲(chǔ)必須完成ROM/RAM的重新映射。 TCMs (tightlycoupledmemory )通常必須能夠?qū)崿F(xiàn)TCM。 請(qǐng)注意,在啟用TCM之前,掩碼ROM會(huì)在高速緩存打開之前返回。 執(zhí)行c庫初始化代碼后,如果啟用了cache,則可以避免與cache相關(guān)的問題。擴(kuò)展、系統(tǒng)初始化代碼通常在進(jìn)入主應(yīng)用程序之前執(zhí)行。 resethandler不是啟用中斷和緩存
16、的合適位置。 必須在resethandler的末尾加上c運(yùn)行時(shí)庫初始化代碼EG。 您可以使用import_mainb_main$sub和$Super功能包裝名為externvoid$Super$main(void )的符號(hào),void $ sub $ $ main (void ) cache _ enable (); /enablescachesint_enable (); /enableesinterrupssys _ to _ usr _ mode (); /change mode-seeextslide $ super $ $ main (); /callsoriginalmain ()的
17、說明可在ads 1.2 linkerandutilitiesguide-4.4章中參考。 考慮到執(zhí)行模式,主應(yīng)用正在哪個(gè)模式下運(yùn)行是重要的問題。 用戶模式不是特權(quán)模式-保護(hù)系統(tǒng)初始化代碼只能在特權(quán)模式下運(yùn)行。 需要執(zhí)行像:這樣的特權(quán)操作。 當(dāng)應(yīng)用程序正在管理模式下運(yùn)行時(shí),只需要以管理模式結(jié)束resethandler即可。 要在用戶模式下運(yùn)行應(yīng)用程序,必須在$Sub$main ()中更改為用戶模式。 _user_initial_stackheap ()必須具有使用應(yīng)用程序模式寄存器的權(quán)限。 解決方法是在系統(tǒng)模式下結(jié)束resethandler的所有c庫初始化代碼,有權(quán)使用用戶寄存器,但可以執(zhí)行特權(quán)操作。、Agenda、PC軟件的結(jié)構(gòu)削減標(biāo)準(zhǔn)c庫函數(shù)考慮目標(biāo)板的定制IMAGE的內(nèi)存映射到目標(biāo)板的復(fù)位和初始化深度級(jí)別的內(nèi)存映射的IMAGE的編譯和調(diào)試, 長跳veneers rom _ load0x 0000 rom _ exec0x 0000 * (ro ) ram0x 800
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 翻罐工安全理論能力考核試卷含答案
- 金屬玩具制作工安全宣教考核試卷含答案
- 拍賣運(yùn)營師班組管理考核試卷含答案
- 重冶濕法冶煉工崗前流程考核試卷含答案
- 重冶浸出工安全綜合競賽考核試卷含答案
- 海乘禮儀培訓(xùn)課件
- 酒店員工績效考核與薪酬調(diào)整制度
- 酒店客房鑰匙卡使用指導(dǎo)制度
- 超市員工績效考核及獎(jiǎng)懲標(biāo)準(zhǔn)制度
- 濟(jì)南市中區(qū)培訓(xùn)
- 安全目標(biāo)管理制度煤廠(3篇)
- 云南省玉溪市2025-2026學(xué)年八年級(jí)上學(xué)期1月期末物理試題(原卷版+解析版)
- 車輛駕駛員崗前培訓(xùn)制度
- 2026年哈爾濱通河縣第一批公益性崗位招聘62人考試參考試題及答案解析
- 就業(yè)協(xié)議書解約函模板
- 頭部護(hù)理與頭皮健康維護(hù)
- 2026屆天一大聯(lián)考高一上數(shù)學(xué)期末教學(xué)質(zhì)量檢測模擬試題含解析
- 2026年山東城市服務(wù)職業(yè)學(xué)院單招職業(yè)技能考試題庫附答案詳解
- 創(chuàng)面換藥清潔課件
- 研發(fā)部門員工加班管理細(xì)則
- 鋼結(jié)構(gòu)橋梁施工監(jiān)測方案
評(píng)論
0/150
提交評(píng)論