IAR for stm8 中指定編譯的起始地址.doc_第1頁
IAR for stm8 中指定編譯的起始地址.doc_第2頁
IAR for stm8 中指定編譯的起始地址.doc_第3頁
IAR for stm8 中指定編譯的起始地址.doc_第4頁
IAR for stm8 中指定編譯的起始地址.doc_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

IAR for stm8 中指定編譯的起始地址(轉(zhuǎn))已經(jīng)用STVD+cosmic完成了IAP功能,但想試著在STM8上跑上官的UCOS,不得不用IAR編譯,但編譯后代碼的生成地址怎么再從0X9000開始生成呢,找遍全網(wǎng),也沒有發(fā)現(xiàn)三言兩語直接的表白,又對IAR環(huán)境不熟,看過了IAR下的工程設(shè)置的全部選項,都沒有發(fā)現(xiàn)怎么修改這個地址,IAR的這個地址的修改,并不象KEIL及STVD下那么直接,它必須通過IAR的根目錄下有個CONFIG的文件夾,里面有各種單片機的*.icf的文件,我看著有兩處0x8000改為0x9000,然后編譯文件,呵呵,果然有效,在STVP下,發(fā)現(xiàn)HEX文件就是從0x9000開始生成代碼了。找的好辛苦,又不太懂英文看幫助,唉,只能受此罪!ICF修改的是以下三項:defineregionNearFuncCode=from0x9000to0xFFFF;defineregionFarFuncCode=from0x9000to0xFFFF;defineregionHugeFuncCode=from0x9000to0xFFFF;以下是摘抄的有關(guān)ICF文件部分IAR中xcl及icf文件詳解鏈接器和鏈接器的配置2.1EWARM4.xx的鏈接器XLINK及其配置文件.xclXLINK鏈接器可以把IAR匯編器或編譯器所產(chǎn)生的可重定位的UBROF目標文件轉(zhuǎn)換成針對目標處理器的機器碼。XLINK一般通過外部鏈接器命令文件(*.xcl)來配置,當然也可以在命令行中直接在xlink命令之后輸入鏈接選項,或者也可以在XLINK_ENVPAR環(huán)境變量中設(shè)置鏈接選項。下面介紹XCL文件中常用的鏈接選項,以便在版本遷移之前,確切地了解XCL文件的含義。2.2XLINK選項下面介紹幾個XCL文件中常見的鏈接器配置選項。更詳細的內(nèi)容請查閱XLINK的參考手冊:IARLinkerandLibraryToolsReferenceGuide。-D-Dsymbol=value作用:使用-D選項可以定義一些純粹的符號,一般用于聲明常數(shù)。參數(shù):symbol是未在其它地方定義過的外部符號,value是symbol所代表的值。例如:就定義了2個標識了ROM起始和結(jié)束地址的符號,這樣以后關(guān)于ROM地址的配置都可以直接使用這2個符號,使得配置文件的可讀性增強。-Z-Z(SPLIT-)typesegments=|#range,range作用:使用-Z命令的目的是規(guī)定segments在存儲空間中占據(jù)的位置和區(qū)間。如果鏈接器發(fā)現(xiàn)某個segment沒有使用-Z,-b或者-P中的任何一個命令進行定義,則會報錯。參數(shù):使用參數(shù),表示為segments分配空間時不考慮任何已經(jīng)被使用的地址空間。這適用于當某些segments的地址空間需要發(fā)生重疊的情形。type參數(shù)type規(guī)定了segments的存儲類型,默認為UNTYPED。表1列舉了IAR的ARMC/C+編譯器所支持的segments類型。-Q-Qsegment=initializer_segment作用:自動設(shè)置segment的拷貝初始化。鏈接器會產(chǎn)生一個新的initializer_segment(如CODE_ID),其內(nèi)容與segment(如CODE_I)完全一致。相關(guān)的符號表和調(diào)試信息都會和segment相關(guān)聯(lián)(如CODE_I)。initializer_segment的內(nèi)容(通常在ROM中)必須在初始化階段被復制到segment(通常在RAM中)。-c-cprocessor作用:規(guī)定目標處理器的類型。如-carm。.3EWARM5.xx的鏈接器ILINK及其配置文件.icfEWARM5.xx中的鏈接器稱為ILINK。ILINK可以從ELF/DWARF格式的目標文件中提取代碼和數(shù)據(jù),并生成可執(zhí)行映像。在EWARM4.xx中,基本的代碼和數(shù)據(jù)鏈接單元是segment,而對于ELF/DWARF格式而言,基本鏈接單元是section。ILINK根據(jù)ILINKConfigurationFile(*.icf)來分配這些sections。由于XLINK與ILINK是兩個完全不同的鏈接器,所以XCL和ICF也是兩種完全不同的配置文件。下面簡要介紹ICF文件的格式和內(nèi)容,以協(xié)助用戶完成版本遷移。2.4ICF格式淺析sections在地址空間中的存放是由ILINK鏈接器來實現(xiàn)的,而ILINK鏈接器是按照用戶在ICF文件中的規(guī)定來放置sections的,所以理解ICF文件的內(nèi)容尤其重要。一個標準的ICF文件可包括下面這些內(nèi)容:1.可編址的存儲空間(memory)2.不同的存儲器地址區(qū)域(region)3.不同的地址塊(block)4.Section的初始化與否5.Section在存儲空間中的放置下面介紹了幾條ICF文件中常見的指令,詳細內(nèi)容請參考ILINK相關(guān)說明文檔(EWARM_DevelopmentGuide.pdf):defineexportedsymbolname=expr;作用:指定某個符號的值。參數(shù):exported導出該symbol,使其對可執(zhí)行鏡像可用name符號名expr符號值舉例:definesymbolRAM_START_ADDRESS=0x40000000;definesymbolRAM_END_ADDRESS=0x4000FFFF;definememorynamewithsize=expr,unit-size;作用:定義一個可編址的存儲地址空間(memory)。參數(shù):namememory的名稱expr地址空間的大小unit-sizeexpr的單位,可以是位(unitbitsize),缺省是字節(jié)(unitbytesize)舉例:definememoryMEMwithsize=4G;defineregionname=region-expr;作用:定義一個存儲地址區(qū)域(region)。一個區(qū)域可由一個或多個范圍組成,每個范圍內(nèi)地址必須連續(xù),但幾個范圍之間不必是連續(xù)的。參數(shù):nameregion的名稱region-exprmemory:fromexprtoexpr|sizeexpr,可以定義起止范圍,也可以定義起始地址和region的大小舉例:defineregionROM=MEM:from0x0size0x10000;defineregionROM=MEM:from0x0to0xFFFF;defineblocknamewithparam,param.extended-selectors;作用:定義一個地址塊(block);它可以是個空塊,比如棧、堆;也可以包含一系列sections。參數(shù):nameblock的名稱param可以是:size=expr(塊的大?。﹎aximumsize=expr(塊大小的上限)alignment=expr(最小對齊字節(jié)數(shù))fixedorder(按照固定順序放置sections)extended-selectorfirst|lastsection-selector|blockname|overlaynamefirst最先存放last最后存放section-selectorsection-attributesectionsectionnameobjectfilenamesection-attributereadonlycode|data|readwritecode|data|zeroinitsectionnamesection的名稱filename目標文件的名稱即可以按照section的屬性,名稱及其所在目標文件的名稱這三個過濾條件中,任意選取一個條件,或選取多個條件進行組合,來圈定所要求的block或overlay的名稱舉例:defineblockHEAPwithsize=0x1000,alignment=4;defineblockMYBLOCK1=sectionmysection1,sectionmysection2,readwrite;defineblockMYBLOCK2=readonlyobjectmyfile2.o;initializebycopy|manuallywithparam,param.section-selectors;作用:初始化sections。參數(shù):bycopy在程序啟動時自動執(zhí)行初始化。manually在程序啟動時不自動執(zhí)行初始化。param可以是:packing=none|compress1|compress2|autocopyroutine=functionnamepacking表示是否壓縮數(shù)據(jù),缺省是auto。functionname表示是否使用自己的拷貝函數(shù)來取代缺省函數(shù)。section-selector同上舉例:initializebycopyrw;donotinitializesection-selectors;作用:規(guī)定在程序啟動時不需要初始化的sections。一般用于_no_init聲明的變量段(.noinit)。參數(shù):section-selector同上舉例:donotinitialize.noinit;placeataddressmemory:expr|startofregion_expr|endofregion_exprextended-selectors;作用:把一系列sections和blocks放置在某個具體的地址,或者一個region的開始或者結(jié)束處。參數(shù):memorymemory的名稱expr地址值,該地址必須在memory所定義的范圍內(nèi)region_exprregion的名稱extended-selector同上舉例:placeatstartofROMsection.cstart;placeatendofROMsection.checksum;placeataddressMEM:0vec;placeinregion-exprextended-selectors;作用:把一系列sections和blocks放置在某個region中。sections和blocks將按任意順序放置。參數(shù):region-exprregion的名稱extended-selector同上舉例:placeinROMreadonly;placeinRAMreadwrite;placeinRAMblockHEAP,blockCSTACK,blockIRQ_STACK;placeinROMsection.textobjectmyfile.o;placeinROMreadonlyobjectmyfile.o;placeinROMreadonlydataobjectmyfile.o;IAR中ICF文件分析與應用sections在地址空間中的存放是由ILINK鏈接器來實現(xiàn)的,而ILINK鏈接器是按照用戶在ICF文件中的規(guī)定來放置sections的,所以理解ICF文件的內(nèi)容尤其重要。一個標準的ICF文件可包括下面這些內(nèi)容:1.可編址的存儲空間(memory)2.不同的存儲器地址區(qū)域(region)3.不同的地址塊(block)4.Section的初始化與否5.Section在存儲空間中的放置下面介紹了幾條ICF文件中常見的指令,詳細內(nèi)容請參考ILINK相關(guān)說明文檔(EWARM_DevelopmentGuide.pdf):1.defineexportedsymbolname=expr;作用:指定某個符號的值。參數(shù):exported導出該symbol,使其對可執(zhí)行鏡像可用name-符號名expr-符號值舉例:definesymbolRAM_START_ADDRESS=0x40000000;definesymbolRAM_END_ADDRESS=0x4000FFFF;2.definememorynamewithsize=expr,unit-size;作用:定義一個可編址的存儲地址空間(memory)。參數(shù):name-memory的名稱expr-地址空間的大小unit-size-expr的單位,可以是位(unitbitsize),缺省是字節(jié)(unitbytesize)舉例:definememoryMEMwithsize=4G;3.defineregionname=region-expr;作用:定義一個存儲地址區(qū)域(region)。一個區(qū)域可由一個或多個范圍組成,每個范圍內(nèi)地址必須連續(xù),但幾個范圍之間不必是連續(xù)的。參數(shù):nameregion的名稱region-exprmemory:fromexprtoexpr|sizeexpr,可以定義起止范圍,也可以定義起始地址和region的大小舉例:defineregionROM=MEM:from0x0size0x10000;defineregionROM=MEM:from0x0to0xFFFF;4.defineblocknamewithparam,param.extended-selectors;作用:定義一個地址塊(block);它可以是個空塊,比如棧、堆;也可以包含一系列sections。參數(shù):nameblock的名稱param可以是:size=expr(塊的大?。﹎aximumsize=expr(塊大小的上限)alignment=expr(最小對齊字節(jié)數(shù))fixedorder(按照固定順序放置sections)extended-selectorfirst|lastsection-selector|blockname|overlaynamefirst最先存放last最后存放section-selectorsection-attributesectionsectionnameobjectfilenamesection-attributereadonlycode|data|readwritecode|data|zeroinitsectionnamesection的名稱filename目標文件的名稱即可以按照section的屬性,名稱及其所在目標文件的名稱這三個過濾條件中,任意選取一個條件,或選取多個條件進行組合,來圈定所要求的block或overlay的名稱舉例:defineblockHEAPwithsize=0x1000,alignment=4;defineblockMYBLOCK1=sectionmysection1,sectionmysection2,readwrite;defineblockMYBLOCK2=readonlyobjectmyfile2.o;5.initializebycopy|manuallywithparam,param.section-selectors;作用:初始化sections。參數(shù):bycopy在程序啟動時自動執(zhí)行初始化。manually在程序啟動時不自動執(zhí)行初始化。param可以是:packing=none|compress1|compress2|autocopyroutine=functionnamepacking表示是否壓縮數(shù)據(jù),缺省是auto。functionname表示是否使用自己的拷貝函數(shù)來取代缺省函數(shù)。section-selector同上舉例:initializebycopyrw;6.donotinitializesection-selectors;作用:規(guī)定在程序啟動時不需要初始化的sections。一般用于_no_init聲明的變量段(.noinit)。參數(shù):section-selector同上舉例:donotinitialize.noinit;7.placeataddressmemory:expr|startofregion_expr|endofregion_exprextended-selectors;作用:把一系列sections和blocks放置在某個具體的地址,或者一個region的開始或者結(jié)束處。參數(shù):memorymemory的名稱expr地址值,該地址必須在memory所定義的范圍內(nèi)region_exprregion的名稱extended-selector同上舉例:placeatstartofROMsection.cstart;placeatendofROMsection.checksum;placeataddressMEM:0vec;8.placeinregion-exprextended-selectors;作用:把一系列sections和blocks放置在某個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ù)工作這么多年一直想寫點東西,但以限于本人文筆與技術(shù)水平一直沒寫。今天有空寫點請多多指教。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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論