




已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
IAR for stm8 中指定編譯的起始地址(轉(zhuǎn))已經(jīng)用STVD+cosmic完成了IAP功能,但想試著在STM8上跑上官的UCOS,不得不用IAR編譯,但編譯后代碼的生成地址怎么再?gòu)?X9000開始生成呢,找遍全網(wǎng),也沒有發(fā)現(xiàn)三言兩語直接的表白,又對(duì)IAR環(huán)境不熟,看過了IAR下的工程設(shè)置的全部選項(xiàng),都沒有發(fā)現(xiàn)怎么修改這個(gè)地址,IAR的這個(gè)地址的修改,并不象KEIL及STVD下那么直接,它必須通過IAR的根目錄下有個(gè)CONFIG的文件夾,里面有各種單片機(jī)的*.icf的文件,我看著有兩處0x8000改為0x9000,然后編譯文件,呵呵,果然有效,在STVP下,發(fā)現(xiàn)HEX文件就是從0x9000開始生成代碼了。找的好辛苦,又不太懂英文看幫助,唉,只能受此罪!ICF修改的是以下三項(xiàng):defineregionNearFuncCode=from0x9000to0xFFFF;defineregionFarFuncCode=from0x9000to0xFFFF;defineregionHugeFuncCode=from0x9000to0xFFFF;以下是摘抄的有關(guān)ICF文件部分IAR中xcl及icf文件詳解鏈接器和鏈接器的配置2.1EWARM4.xx的鏈接器XLINK及其配置文件.xclXLINK鏈接器可以把IAR匯編器或編譯器所產(chǎn)生的可重定位的UBROF目標(biāo)文件轉(zhuǎn)換成針對(duì)目標(biāo)處理器的機(jī)器碼。XLINK一般通過外部鏈接器命令文件(*.xcl)來配置,當(dāng)然也可以在命令行中直接在xlink命令之后輸入鏈接選項(xiàng),或者也可以在XLINK_ENVPAR環(huán)境變量中設(shè)置鏈接選項(xiàng)。下面介紹XCL文件中常用的鏈接選項(xiàng),以便在版本遷移之前,確切地了解XCL文件的含義。2.2XLINK選項(xiàng)下面介紹幾個(gè)XCL文件中常見的鏈接器配置選項(xiàng)。更詳細(xì)的內(nèi)容請(qǐng)查閱XLINK的參考手冊(cè):IARLinkerandLibraryToolsReferenceGuide。-D-Dsymbol=value作用:使用-D選項(xiàng)可以定義一些純粹的符號(hào),一般用于聲明常數(shù)。參數(shù):symbol是未在其它地方定義過的外部符號(hào),value是symbol所代表的值。例如:就定義了2個(gè)標(biāo)識(shí)了ROM起始和結(jié)束地址的符號(hào),這樣以后關(guān)于ROM地址的配置都可以直接使用這2個(gè)符號(hào),使得配置文件的可讀性增強(qiáng)。-Z-Z(SPLIT-)typesegments=|#range,range作用:使用-Z命令的目的是規(guī)定segments在存儲(chǔ)空間中占據(jù)的位置和區(qū)間。如果鏈接器發(fā)現(xiàn)某個(gè)segment沒有使用-Z,-b或者-P中的任何一個(gè)命令進(jìn)行定義,則會(huì)報(bào)錯(cuò)。參數(shù):使用參數(shù),表示為segments分配空間時(shí)不考慮任何已經(jīng)被使用的地址空間。這適用于當(dāng)某些segments的地址空間需要發(fā)生重疊的情形。type參數(shù)type規(guī)定了segments的存儲(chǔ)類型,默認(rèn)為UNTYPED。表1列舉了IAR的ARMC/C+編譯器所支持的segments類型。-Q-Qsegment=initializer_segment作用:自動(dòng)設(shè)置segment的拷貝初始化。鏈接器會(huì)產(chǎn)生一個(gè)新的initializer_segment(如CODE_ID),其內(nèi)容與segment(如CODE_I)完全一致。相關(guān)的符號(hào)表和調(diào)試信息都會(huì)和segment相關(guān)聯(lián)(如CODE_I)。initializer_segment的內(nèi)容(通常在ROM中)必須在初始化階段被復(fù)制到segment(通常在RAM中)。-c-cprocessor作用:規(guī)定目標(biāo)處理器的類型。如-carm。.3EWARM5.xx的鏈接器ILINK及其配置文件.icfEWARM5.xx中的鏈接器稱為ILINK。ILINK可以從ELF/DWARF格式的目標(biāo)文件中提取代碼和數(shù)據(jù),并生成可執(zhí)行映像。在EWARM4.xx中,基本的代碼和數(shù)據(jù)鏈接單元是segment,而對(duì)于ELF/DWARF格式而言,基本鏈接單元是section。ILINK根據(jù)ILINKConfigurationFile(*.icf)來分配這些sections。由于XLINK與ILINK是兩個(gè)完全不同的鏈接器,所以XCL和ICF也是兩種完全不同的配置文件。下面簡(jiǎn)要介紹ICF文件的格式和內(nèi)容,以協(xié)助用戶完成版本遷移。2.4ICF格式淺析sections在地址空間中的存放是由ILINK鏈接器來實(shí)現(xiàn)的,而ILINK鏈接器是按照用戶在ICF文件中的規(guī)定來放置sections的,所以理解ICF文件的內(nèi)容尤其重要。一個(gè)標(biāo)準(zhǔn)的ICF文件可包括下面這些內(nèi)容:1.可編址的存儲(chǔ)空間(memory)2.不同的存儲(chǔ)器地址區(qū)域(region)3.不同的地址塊(block)4.Section的初始化與否5.Section在存儲(chǔ)空間中的放置下面介紹了幾條ICF文件中常見的指令,詳細(xì)內(nèi)容請(qǐng)參考ILINK相關(guān)說明文檔(EWARM_DevelopmentGuide.pdf):defineexportedsymbolname=expr;作用:指定某個(gè)符號(hào)的值。參數(shù):exported導(dǎo)出該symbol,使其對(duì)可執(zhí)行鏡像可用name符號(hào)名expr符號(hào)值舉例:definesymbolRAM_START_ADDRESS=0x40000000;definesymbolRAM_END_ADDRESS=0x4000FFFF;definememorynamewithsize=expr,unit-size;作用:定義一個(gè)可編址的存儲(chǔ)地址空間(memory)。參數(shù):namememory的名稱expr地址空間的大小unit-sizeexpr的單位,可以是位(unitbitsize),缺省是字節(jié)(unitbytesize)舉例:definememoryMEMwithsize=4G;defineregionname=region-expr;作用:定義一個(gè)存儲(chǔ)地址區(qū)域(region)。一個(gè)區(qū)域可由一個(gè)或多個(gè)范圍組成,每個(gè)范圍內(nèi)地址必須連續(xù),但幾個(gè)范圍之間不必是連續(xù)的。參數(shù):nameregion的名稱region-exprmemory:fromexprtoexpr|sizeexpr,可以定義起止范圍,也可以定義起始地址和region的大小舉例:defineregionROM=MEM:from0x0size0x10000;defineregionROM=MEM:from0x0to0xFFFF;defineblocknamewithparam,param.extended-selectors;作用:定義一個(gè)地址塊(block);它可以是個(gè)空塊,比如棧、堆;也可以包含一系列sections。參數(shù):nameblock的名稱param可以是:size=expr(塊的大?。﹎aximumsize=expr(塊大小的上限)alignment=expr(最小對(duì)齊字節(jié)數(shù))fixedorder(按照固定順序放置sections)extended-selectorfirst|lastsection-selector|blockname|overlaynamefirst最先存放last最后存放section-selectorsection-attributesectionsectionnameobjectfilenamesection-attributereadonlycode|data|readwritecode|data|zeroinitsectionnamesection的名稱filename目標(biāo)文件的名稱即可以按照section的屬性,名稱及其所在目標(biāo)文件的名稱這三個(gè)過濾條件中,任意選取一個(gè)條件,或選取多個(gè)條件進(jìn)行組合,來圈定所要求的block或overlay的名稱舉例:defineblockHEAPwithsize=0x1000,alignment=4;defineblockMYBLOCK1=sectionmysection1,sectionmysection2,readwrite;defineblockMYBLOCK2=readonlyobjectmyfile2.o;initializebycopy|manuallywithparam,param.section-selectors;作用:初始化sections。參數(shù):bycopy在程序啟動(dòng)時(shí)自動(dòng)執(zhí)行初始化。manually在程序啟動(dòng)時(shí)不自動(dòng)執(zhí)行初始化。param可以是:packing=none|compress1|compress2|autocopyroutine=functionnamepacking表示是否壓縮數(shù)據(jù),缺省是auto。functionname表示是否使用自己的拷貝函數(shù)來取代缺省函數(shù)。section-selector同上舉例:initializebycopyrw;donotinitializesection-selectors;作用:規(guī)定在程序啟動(dòng)時(shí)不需要初始化的sections。一般用于_no_init聲明的變量段(.noinit)。參數(shù):section-selector同上舉例:donotinitialize.noinit;placeataddressmemory:expr|startofregion_expr|endofregion_exprextended-selectors;作用:把一系列sections和blocks放置在某個(gè)具體的地址,或者一個(gè)region的開始或者結(jié)束處。參數(shù):memorymemory的名稱expr地址值,該地址必須在memory所定義的范圍內(nèi)region_exprregion的名稱extended-selector同上舉例:placeatstartofROMsection.cstart;placeatendofROMsection.checksum;placeataddressMEM:0vec;placeinregion-exprextended-selectors;作用:把一系列sections和blocks放置在某個(gè)region中。sections和blocks將按任意順序放置。參數(shù):region-exprregion的名稱extended-selector同上舉例:placeinROMreadonly;placeinRAMreadwrite;placeinRAMblockHEAP,blockCSTACK,blockIRQ_STACK;placeinROMsection.textobjectmyfile.o;placeinROMreadonlyobjectmyfile.o;placeinROMreadonlydataobjectmyfile.o;IAR中ICF文件分析與應(yīng)用sections在地址空間中的存放是由ILINK鏈接器來實(shí)現(xiàn)的,而ILINK鏈接器是按照用戶在ICF文件中的規(guī)定來放置sections的,所以理解ICF文件的內(nèi)容尤其重要。一個(gè)標(biāo)準(zhǔn)的ICF文件可包括下面這些內(nèi)容:1.可編址的存儲(chǔ)空間(memory)2.不同的存儲(chǔ)器地址區(qū)域(region)3.不同的地址塊(block)4.Section的初始化與否5.Section在存儲(chǔ)空間中的放置下面介紹了幾條ICF文件中常見的指令,詳細(xì)內(nèi)容請(qǐng)參考ILINK相關(guān)說明文檔(EWARM_DevelopmentGuide.pdf):1.defineexportedsymbolname=expr;作用:指定某個(gè)符號(hào)的值。參數(shù):exported導(dǎo)出該symbol,使其對(duì)可執(zhí)行鏡像可用name-符號(hào)名expr-符號(hào)值舉例:definesymbolRAM_START_ADDRESS=0x40000000;definesymbolRAM_END_ADDRESS=0x4000FFFF;2.definememorynamewithsize=expr,unit-size;作用:定義一個(gè)可編址的存儲(chǔ)地址空間(memory)。參數(shù):name-memory的名稱expr-地址空間的大小unit-size-expr的單位,可以是位(unitbitsize),缺省是字節(jié)(unitbytesize)舉例:definememoryMEMwithsize=4G;3.defineregionname=region-expr;作用:定義一個(gè)存儲(chǔ)地址區(qū)域(region)。一個(gè)區(qū)域可由一個(gè)或多個(gè)范圍組成,每個(gè)范圍內(nèi)地址必須連續(xù),但幾個(gè)范圍之間不必是連續(xù)的。參數(shù):nameregion的名稱region-exprmemory:fromexprtoexpr|sizeexpr,可以定義起止范圍,也可以定義起始地址和region的大小舉例:defineregionROM=MEM:from0x0size0x10000;defineregionROM=MEM:from0x0to0xFFFF;4.defineblocknamewithparam,param.extended-selectors;作用:定義一個(gè)地址塊(block);它可以是個(gè)空塊,比如棧、堆;也可以包含一系列sections。參數(shù):nameblock的名稱param可以是:size=expr(塊的大小)maximumsize=expr(塊大小的上限)alignment=expr(最小對(duì)齊字節(jié)數(shù))fixedorder(按照固定順序放置sections)extended-selectorfirst|lastsection-selector|blockname|overlaynamefirst最先存放last最后存放section-selectorsection-attributesectionsectionnameobjectfilenamesection-attributereadonlycode|data|readwritecode|data|zeroinitsectionnamesection的名稱filename目標(biāo)文件的名稱即可以按照section的屬性,名稱及其所在目標(biāo)文件的名稱這三個(gè)過濾條件中,任意選取一個(gè)條件,或選取多個(gè)條件進(jìn)行組合,來圈定所要求的block或overlay的名稱舉例:defineblockHEAPwithsize=0x1000,alignment=4;defineblockMYBLOCK1=sectionmysection1,sectionmysection2,readwrite;defineblockMYBLOCK2=readonlyobjectmyfile2.o;5.initializebycopy|manuallywithparam,param.section-selectors;作用:初始化sections。參數(shù):bycopy在程序啟動(dòng)時(shí)自動(dòng)執(zhí)行初始化。manually在程序啟動(dòng)時(shí)不自動(dòng)執(zhí)行初始化。param可以是:packing=none|compress1|compress2|autocopyroutine=functionnamepacking表示是否壓縮數(shù)據(jù),缺省是auto。functionname表示是否使用自己的拷貝函數(shù)來取代缺省函數(shù)。section-selector同上舉例:initializebycopyrw;6.donotinitializesection-selectors;作用:規(guī)定在程序啟動(dòng)時(shí)不需要初始化的sections。一般用于_no_init聲明的變量段(.noinit)。參數(shù):section-selector同上舉例:donotinitialize.noinit;7.placeataddressmemory:expr|startofregion_expr|endofregion_exprextended-selectors;作用:把一系列sections和blocks放置在某個(gè)具體的地址,或者一個(gè)region的開始或者結(jié)束處。參數(shù):memorymemory的名稱expr地址值,該地址必須在memory所定義的范圍內(nèi)region_exprregion的名稱extended-selector同上舉例:placeatstartofROMsection.cstart;placeatendofROMsection.checksum;placeataddressMEM:0vec;8.placeinregion-exprextended-selectors;作用:把一系列sections和blocks放置在某個(gè)region中。sections和blocks將按任意順序放置。參數(shù):region-exprregion的名稱extended-selector同上舉例:placeinROMreadonly;placeinRAMreadwrite;placeinRAMblockHEAP,blockCSTACK,blockIRQ_STACK;placeinROMsection.textobjectmyfile.o;placeinROMreadonlyobjectmyfile.o;placeinROMreadonlydataobjectmyfile.o;FROM:url/user1/5910/archives/2009/61982.html/urlIAR的ICF文件中宏給程序使用如果想定在rom空間icf中:placeataddressmem:0x08090000readonlysection.test;C:中:#pragmalocation=.testconstu32uiData512;/const切不可省略如果想定在ram空間icf中:placeataddressmem:0x08090000readwritesection.test;C:中:#pragmalocation=.testu32uiData512;可發(fā)現(xiàn)uiData的值為0x08090000該法可方便通過ICF指定某變量的地址。程序也可以。寫法類似.vector如果用block的方。類似defineblockCSTACKwithalignment=8,size=_ICFEDIT_size_cstack_;C中:#pragmalanguage=extended#pragmasegment=CSTACKptr=_sfe(CSTACK);可得到CSTACK的高端地址+1_sfe:Returnslastaddressofsegment.從事電子技術(shù)工作這么多年一直想寫點(diǎn)東西,但以限于本人文筆與技術(shù)水平一直沒寫。今天有空寫點(diǎn)請(qǐng)多多指教。definesymbolNVNC_Start=0x08000000;/中斷起始地址definesymbolNVNC_size_cstack=0x400;/中斷堆棧尺寸definesymbolPROEG_size_heap=0x400;/程序堆棧尺寸definesymbolUSB_SRAM_start=0x40006000;/USB專用SRAM起始與結(jié)束地址definesymbolUSB_SRAM_end=0x400063FF;definesymbolSyS_SRAM_start=0x20000000;/定議RAM起始與結(jié)束地址definesymbolSyS_SRAM_end=0x2000FFFF;/64KdefinesymbolSyS_Flash_start=0x08000800;/定議FLASH起始與結(jié)束地址definesymbolSyS_Flash_end=0x0801FFFF;/512K/definesymbolSyS_Flash_P1=(SyS_Flash_start+(0x800*0);definememorymemwithsize=4G;defineregionUSB_RAM=mem:fromUSB_SRAM_starttoUSB_SRAM_end;defineregionRAM_region=mem:fromSyS_SRAM_starttoSyS_SRAM_end;defineregionROM_region=mem:fromSyS_Flash_startto
溫馨提示
- 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. 人人文庫(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專票需要合同范例
- 產(chǎn)品定制協(xié)議合同范例
- 代理管理合同范例
- 400型泵車購(gòu)買合同范例
- 停車廠轉(zhuǎn)租合同范例
- 交換空間合同范例
- 個(gè)人租單合同范例
- bot貸款合同范例
- 光伏發(fā)電臨時(shí)合同范例
- 不同情況合同范例
- 山東能源電力集團(tuán)招聘筆試題庫(kù)2025
- 醫(yī)療技術(shù)品牌的創(chuàng)新與傳播策略
- 湖北省武漢市2025屆高中畢業(yè)生四月調(diào)研考試生物試題及答案(武漢四調(diào))
- 陪護(hù)公司管理制度規(guī)范
- 2024年天津卷高考語文真題含解析
- 感染性腹瀉患者護(hù)理常規(guī)
- 筆記分享的保安證考試試題及答案
- 武漢2025屆高中畢業(yè)生二月調(diào)研考試數(shù)學(xué)試題及答案
- 物業(yè)財(cái)務(wù)知識(shí)培訓(xùn)課件
- 第四單元 社會(huì)爭(zhēng)議解決(大單元教學(xué)設(shè)計(jì))高二政治同步備課系列(統(tǒng)編版選擇性必修2)
- 2025年中國(guó)女性私密健康白皮書
評(píng)論
0/150
提交評(píng)論