LCF文件資料使用說明書_第1頁
LCF文件資料使用說明書_第2頁
LCF文件資料使用說明書_第3頁
LCF文件資料使用說明書_第4頁
LCF文件資料使用說明書_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、實用文檔序言:Codewarrior 2.10是飛思卡爾32位汽車級單片機 Qorriva系列的集成開發(fā)環(huán)境,與之前版本2.8、2.9完全兼容。Codewarrior 10.3是飛思卡爾最新的集成開發(fā)環(huán)境,是一個開放源代碼的、基于 Java的可擴展開發(fā)平臺。許多新用戶對codewarrior鏈接文件不是十分了解,本文將針對鏈接文件的常見問題以及段的定義進(jìn)行介紹幫助用 戶快速了解和使用 CodeWarrior。目錄第一節(jié)LCF文件定義及使用說明LCF文件介紹LCF文件中各個預(yù)定義段的說明3:常用關(guān)鍵字和宏定義說明第二節(jié)EPPC鏈接器介紹及使用說明第三節(jié) 代碼重定向第一節(jié)LCF文件定義及使用說明1

2、: LCF文件介紹鏈接文件用來控制不同類型數(shù)據(jù)代碼、數(shù)據(jù)以某種排列方式在最終在生成的可執(zhí)行文件或者二進(jìn)制文件,調(diào)試文件 中的放置位置。它可以通過在 EPPC linker的面板中進(jìn)行配置,也可以直接在 lcf文件中直接進(jìn)行修改。Memory map 查看所有變 量,函數(shù)、段地址信息EPPC Panel 配置 一雨生一 一 生成.s19,.bin或者elf.lcf配置Lcf文件中首先是對整個 memory map(MEMORYfc址空間內(nèi)的所有 RAM,ROM!行分割,將其分為幾個區(qū)域,便于放置不同類型的存儲內(nèi)容,而這些區(qū)域內(nèi)包含的內(nèi)容可以是用戶自定義的段或者系統(tǒng)預(yù)定義的段(SECTION。關(guān)于

3、段的定義和使用將在lcf文件介紹結(jié)束后進(jìn)行介紹。一個工程通常在建立的時候默認(rèn)的調(diào)試方式都是在RAW進(jìn)行調(diào)試,由于RAW執(zhí)行的效率高于 FLASH并且下載速度快。在生成的 ROMmage中常量,初始化過的數(shù)據(jù)或者代碼如果沒有被定義在ROME域則假設(shè)為這部分代碼要在程序開始執(zhí)行的時候從ROM?拷貝到RAMK。文件的名字及對應(yīng)單片機(RAM本) ROW去,而在 RAM43執(zhí)行程序單片機的FLASH口 SRAMk小*/下面是一個完整的lcf文件,其中包括每行的解釋及用法。/* lcf file for MPC5604B M27V (debug RAM version)/RAM版本和RO般本的區(qū)別在于

4、RAM本不將程序下載到/*512KB Flash, 32KB SRAM */ /MEMORYf面是對單片機存儲空間的定義,不同的段的起始地址,不能疊加地址空間 實用文檔len = 0 x00003000(長度)初始化段所在位置中斷向量所在地址內(nèi)部RAM勺起始地址堆的起始地址棧的起始地址pseudo_rom:(仿真 ROME)org = 0 x40000000,(開始地址) TOC o 1-5 h z init:org = 0 x40004000, len = 0 x00001000/exception_handlers: org = 0 x40005000, len = 0 x00001000

5、/internal_ram:org = 0 x40006000, len = 0 x00001800/heap :org = 0 x40007800, len = 0 x00000400/stack :org = 0 x40007c00, len = 0 x00000400/SECTION皺的定義 GROUP : /它的定義需要遵從本例程方式GROUP:” . “”中是內(nèi)容部分.init : /.init段中所有內(nèi)容。.init_vle (VLECODE) : /.init_vle(使用 VLE代碼)*(.init) *(.init_vle) init/可以參看前面的init段在存儲空間的定義

6、.本GROU珅的所有內(nèi)容/放在init段中,” ”代表放在哪個段GROUP: .ivor_branch_table (VLECODE) ALIGN (4096) : /ALIGN(4096)按照 4096 字節(jié)對齊._exception_handlers (VLECODE) LOAD (_e_ivor_branch_table) : / LOAD ()將本段加載到指定地址 exception_handlersGROUP: .text (TEXT) ALIGN(0 x10) : .text_vle (VLECODE) ALIGN(0 x10): *(.text)*(.text_vle).roda

7、ta (CONST) : *(.rdata)*(.rodata).ctors : .dtors : extab : extabindex : pseudo_romGROUP: ._uninitialized_intc_handlertable ALIGN(0 x10) : .data : 實用文檔.sdata : .sbss : .sdata2 : .sbss2 : .bss : internal_ram /ADDR()是取括號內(nèi)段的首地址/SIZEOF ()是求某段的長度/詳見第3小節(jié)/* Freescale CodeWarrior compiler address designations

8、 */_stack_addr = ADDR(stack)+SIZEOF(stack);_stack_end = ADDR(stack);_heap_addr = ADDR(heap);_heap_end = ADDR(heap)+SIZEOF(heap);/* Exceptions Handlers Location (used in Exceptions.c for IVPR initialization) */EXCEPTION_HANDLERS = ADDR(exception_handlers);. LCFC件中預(yù)定義的各個段的名稱及解釋SectionDescription.init包

9、含初始化代碼.text包含程序代碼.rodata包含程序的常量.sdata包含初始化的全局小數(shù)據(jù).sdata2包含初始化過的全局常量(const定義內(nèi)容)小數(shù)據(jù).data包含初始化過的全局?jǐn)?shù)據(jù).sbss包含未初始化過的全局小數(shù)據(jù).sbss2包含未初始化過白全局常量(const定義內(nèi)容)小數(shù)據(jù).bss包含未初始化過的全局?jǐn)?shù)據(jù).ctors包含構(gòu)造函數(shù).dtors包含析構(gòu)函數(shù).常用關(guān)鍵字及使用說明實用文檔關(guān)鍵字列表:SECTIONALIGNADDRSIZEOFLOADBINDDeclspecpop, pushFORCEACTIVESECTIONSection使用pragma來將編譯的目標(biāo)代碼放到預(yù)定

10、義的段中,然后可以在LCF文件中將對應(yīng)的段放到指定的地址區(qū)域。Section和_declspec(section)都可以用來指定一個段,但是不能同時使用語法#pragma section objecttype | permission inameuname data_mode=datamodecode_mode=codemodeobjecttype可以是以下三種選項,用來指定將目標(biāo)數(shù)據(jù)放在哪里code_type - 可執(zhí)行目標(biāo)類型data_type-非常量數(shù)據(jù),包含比 small data 大的數(shù)據(jù)sdata_type-非常量數(shù)據(jù),包含比 small data 小或者等同的數(shù)據(jù)。const_t

11、ype-常量數(shù)據(jù),包含比 small const 大的數(shù)據(jù)sconst_type -常量數(shù)據(jù),包含小或者等同small data 的數(shù)據(jù)all_types所有數(shù)據(jù)和代碼permission定義訪問權(quán)限,包含下列三個選項R -只讀W -可寫X -可執(zhí)行iname定義段的名字,編譯器存儲初始化過的目標(biāo)。變量在定義的時候被初始化過的,函數(shù)和字符串也屬于初始化過的目 標(biāo)。實用文檔The iname parameter may be of the form .abs.xxxxxxxx where xxxxxxxx is an 8-digit hexadecimal number specifying t

12、he address of the section.uname定義段的名字,編譯器存儲未被初始化過的目標(biāo)。下面是例子保存當(dāng)前狀態(tài)恢復(fù)之前的狀態(tài)#pragma push/#pragma section .data COMM int red;int sky;#pragma pop/ data_mode=datamode為編譯器指定使用哪種數(shù)據(jù)模式下面是可選的數(shù)據(jù)模式near_abs -目標(biāo)必須在16位地址空間far_abs -目標(biāo)必須在32位RAM1址空間sda_rel -目標(biāo)必須在鏈接器為 small data 定義的32K地址空間.code_mode=codemode向編譯器指定地址模式下面是

13、可選的三種地址模式:pc_rel -被調(diào)用子函數(shù)地址必須在調(diào)用函數(shù)24位地址空間范圍內(nèi)near_abs -函數(shù)地址必須在24位地址范圍far_abs -函數(shù)地址必須在 32位地址范圍內(nèi)預(yù)定義的段和默認(rèn)模式TypeNameData modeCode modecode_type .textdata_mode=far_abscode_mode=pc_reldata_type .datadata_mode=far_abscode_mode=pc_relconst_type .rodatadata_mode=far_abscode_mode=pc_relsdata_type .sdatadata_mod

14、e=sda_relcode_mode=pc_relsconst_type .sdata2.sbss2data_mode=sda_relcode_mode=pc_rel.PPC.EMB.sdata0 .PPC.EMB.sbss0 data_mode=sda_relcode_mode=pc_rel實用文檔ALIGN按照指定的邊界進(jìn)行排列,必須是 2的整倍數(shù)。SECTIONS(GROUP:(.init ALIGN(0 x1000) : .text ALIGN(0 x1000) : text例子中定義了兩個段:.init和.text。在運行的時候每個段都會被放在下一個可以使用的地址(可以被0 x100

15、0整除)ADDR返回指定名稱的段或者內(nèi)存區(qū)域的開始地址.ADDRSectionName | segmentNam)esectionName文件中段的標(biāo)志符segmentName存儲區(qū)域中段的標(biāo)志符范例下面代碼中使用的 ADD電能來將ROOT勺地址賦值給_rootbasecode .列舉ADDR()功能MEMORYROOT : origin = 0 x80000400, length = 0SECTIONS.code :_rootbasecode= ADDR (ROOT);*.(text); ROOT實用文檔SIZEOF返回指定Section或者segment的大小(以字節(jié)為單位)SIZEOF(

16、segmentName sectionName)參數(shù)segmentNamesegment的名字;必須以.”作為起始。sectionNamesection的名字;必須以.”作為起始。LOAD在指定地址加載一個或者多個段。語法LOAD(address)參數(shù)address一個內(nèi)存地址例如:0 x80000400.注思使用load指令來指定一個外部的ROM addr_mode。Load指令可以被用于所有的在ROW的段。如果編譯器選項面板中的Generate ROM image沒有被選擇的話,指令會被在鏈接中忽略。.text從RO儺貝到RAM中的不連續(xù)的未初始化的數(shù)據(jù)段可能需要參考ROM勺地址。舉例來說

17、:保存緊跟在段后面的.data和.sdata段到ROM可以嘗試下面的例子:.text LOAD(ADDR(.text) : rom.data LOAD(ROMADDR(.text) + SIZEOF(.text): code.sdata LOAD(ROMADDR(.data) + SIZEOF(.data): codeBIND指定一個段修飾語來設(shè)定一個地址。BIND(address)實用文檔address一個存儲空間地址例如:0 x80000400.pop, push保存和恢復(fù)pragma設(shè)置語法#pragma push#pragma poppragma push 保存所有當(dāng)前的 pragma

18、設(shè)置。 Pragma pop 恢復(fù)所有 pragma 設(shè)置范例#pragma ANSI_strict on#pragma push /* Saves all compiler settings. */#pragma ANSI_strict off#pragma pop /* Restores ANSI_strict to on. */例程中的pragma不受任何面板設(shè)置影響,和之前其它的 pragma的設(shè)定_declspec(section name)指定在已經(jīng)定義的section中放置變量或者函數(shù)語法_declspec(section ) declaration_declspec(secti

19、on ) definition sectionname指定一個初始化過的數(shù)據(jù)段的名字注意段的名字必須用雙引號().如果使用用戶自定義的段,必須是事先用#pragma定義過的 9)FORCEACTIVE實用文檔指定不能被優(yōu)化掉的目標(biāo)FORCEACTIVEsymbol , symbol* 第二節(jié) EPPC鏈接器使用EPPC Linker設(shè)置面板來控制設(shè)定鏈接相關(guān)選項,規(guī)定目標(biāo)代碼鏈接成的可執(zhí)行文件,庫或者 其它的最終文件格式。如下圖所示 2.10版本(圖2-1)和10.3版本(圖2-2)9 EPPC LinkerLink OptiynsLink Mode: Morrnal q Generate D

20、WARF Infoq Use Full Path Narn&sp Generate Link MapList Cb$ure/ List Unused ObjectsF List DWARF ObjectsSuppress Warning Messages Hep Address:Stack Address:* Generate ROM IrndgeS egment Addie&ssE * Use Linker Cammand FileP Code AddressOhOOOOOWOP Data Address:pxOOODOOOOF SmailoSEooaooI- Small Dafe2:10

21、x00000000Biin5ry Filec None-z Generate S-Fecord FileMan Lenglh:同EOL Character:DOS_ .RAM Buffer Address: 0 x00003000Fl M I m mge Addr&ss: I(0 x00003000E niry Pointstart圖 2-1 : Codewarrior 2.10 版本實用文檔圖 2-2 : codewarrior 10.3 版本實用文檔EPPC鏈接器設(shè)定面板各條目的含義及用法元素Link Mode list box注釋鏈接需要足夠的 RAMS間來保存輸入文件。Normal是最

22、好的選擇,More RAM更適合小工程目的指定鏈接器使用多少內(nèi)存做緩沖來寫輸出文件,然后寫到硬盤上選項:Use Less RAM -直接將輸出文件寫到硬盤,不使用緩沖Normal - 512字節(jié)緩沖Use More RAM -將每個部分寫到自己的緩沖,然后寫回硬盤Generate DWARF Info checkboxClear -不生成調(diào)試信息 Checked -生成調(diào)試信息Use Full Path Names checkboxClear -鏈接器只使用文件名Checked -鏈接器包含路徑名字在elf文件中Generate Link MapcheckboxClear -不生成map文件C

23、hecked - 生成map文件List Closure checkboxClearmap小列舉程序開始點調(diào)用的曲數(shù)Checked - Map文件列舉所有程序開始點調(diào)用的函數(shù)List Unused Objects checkboxClear - Map不包含沒用到的目標(biāo)Checked - Map列舉所有沒有用到的目標(biāo)List DWARF Objects checkboxClear - Map 不列出 DWARF調(diào)試目標(biāo)Checked - Map 在Section 里列出所有 DWARF調(diào)試目標(biāo)Suppress Warning Messages checkboxClear -鏈接器在消息窗口顯示

24、警告Checked鏈接器不顯不警告Heap Address checkboxClear - Heap頂和堆棧底相同Checked -指te heap內(nèi)存位置Stack Address checkboxClear -鏈接器使用默認(rèn)的堆棧地址0 x003DFFF0.Checked -為堆棧指定棧頂內(nèi)存地址實用文檔Generate ROM ImageClear - 不生成 ROM image. Checked - 生成 ROM imagecheckboxRAM Buffer AddressClear -不指定RAM buffer地址checkboxChecked 給flash 編程器指定 RAM b

25、uffer地址。許多其他的flash編程器使用指定的,對于 Codewarrior Flash 編RAM buffer和獨立的緩沖區(qū)來加載所有的二進(jìn)制段到連續(xù)的flash ROM地址空間。盡管如此,在運行的ROM image的地址是一樣的。(參考備注)時候系統(tǒng)會將這些段加載到lcf文件或者數(shù)據(jù)地址框指7E的地址。ROMmage Address checkboxClear -不指定目標(biāo)地址參考備注Checked -為二進(jìn)制文件指定 ROM!標(biāo)地址Use Linker Command FileClear -用戶指定段地址,忽略lcf文件的配置。力n里,先引而 Irf 十件中并沿蔚科升卜編幺口不匹I

26、IIJ lcf 乂1 1 ” JI 儀 7H 丁|=| TE 取見內(nèi)T ) 加checkboxCharkarl AA Ipf。寺上i 1不.崇及良書b十【卜譯器將報錯Checked)火 lci X I I I 、J 隊4!又用iULBinary File list box生成二進(jìn)制文件默認(rèn)不生成二進(jìn)制代碼* None - 不生成bin文件* One - 一個二進(jìn)制文件* Multiple -多個二進(jìn)制文件Generate S-Record FileClear - 不生成srecord 文件.S-record 文件以.mot擴展名存在,是早期的checkboxChecked -生成 S3 S-r

27、ecord 文件srecord文件擴展名。現(xiàn)在后綴名都是.s19 ,但格式內(nèi)容相同Sort S-Record checkboxClear -不排序s-recored 文件.Max Length text boxChecked -地址上升排序 s-recored 文件指te S-recored的最大長度(256字節(jié)或者少于)EOL Character list box針對不同系統(tǒng)指定srecord 文件行尾的字符DOS - Unix - 實用文檔 Mac - Entry Point text box指定程序性的入口地址 -加載程序時使用的第一個函數(shù)默認(rèn)函數(shù)是_start.c中的bootstrap

28、/glue 代碼。配置EABI的環(huán)境,然后執(zhí)行 main()實用文檔Heap如果你的程序使用malloc或者new將會使用到堆。如果使用MSC,你的程序可能會使用隱含的堆 盡管如此,MS6配程序不需要在棧下面申請堆。如果不選擇檢驗框,堆的高地址等于棧的底部。_stack_end = _stack_addr - (stack_size * 1024);_heap_end = _stack_end;_heap_addr = _heap_end - (heap_size * 1024);如果你的代碼不需要堆你可以清除堆地址檢驗框注意如果沒有足夠的空間,malloc函數(shù)會返回0.如果你不用malloc

29、 ,可以把堆的大小設(shè)定為零來給其它需要內(nèi)存空間的數(shù)據(jù)代碼,棧。Stack在指定棧的開始地址后,棧使用將向下增長。所以盡可能將棧頂設(shè)高如果你沒有指定棧的地址,鏈接器將使用 0X003DFFF0但是默認(rèn)值并不適合所有板子,有些芯片 RAM 很小。ROM Image應(yīng)用程序的ROM Imag通常是整個應(yīng)用程序鏡像。一個 ROM!像通過ROM Image Address和RAM Bufferr Address來定義。ROM Image AddressROMB被分配在什么位置。通常是在.lcf文件中定義的某一個存儲塊的開始。RAM Buffer Address :在RAW指定一個位置,用來作為 Flas

30、h image編程器的緩沖區(qū)。RAM Buffer配置地址和ROM Image勺配置地址必須保持相同,即 RAM Buffer地址不需要考慮。第三節(jié)代碼重定向如果我們想把一個函數(shù)存在flash,但是在RA附被執(zhí)行,我們需要在 LC或件,程序中參考如下幾條進(jìn)行定義LCF文件:重定向的函數(shù)存儲在 Flash中重定向的函數(shù)在 raMp被調(diào)用MEMORY reloc_flash: org = 0X0007F000, len = 0 x00001000 / reloc_ram: org = 0 x40005000, len = 0 x00001000 /實用文檔) SECTIONS ( .RelocCode (VLECODE)LOAD(ADDR(reloc_flash): reloc_ram / define a section f

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論