




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、序言:Codewarrior 2.10是飛思卡爾32位汽車級單片機Qorriva系列的集成開發(fā)環(huán)境,與之前版本2.8、2.9完全兼容。Codewarrior 10.3是飛思卡爾最新的集成開發(fā)環(huán)境,是一個開放源代碼的、基于Java的可擴展開發(fā)平臺。許多新用戶對codewarrior鏈接文件不是十分了解,本文將針對鏈接文件的常見問題以及段的定義進行介紹幫助用戶快速了解和使用CodeWarrior。目錄第一節(jié) LCF文件定義及使用說明 1: LCF文件介紹2:LCF文件中各個預定義段的說明3:常用關鍵字和宏定義說明第二節(jié) EPPC 鏈接器介紹及使用說明第三節(jié) 代碼重定向第一節(jié) LCF 文件定義及使用
2、說明1:LCF文件介紹鏈接文件用來控制不同類型數(shù)據(jù)代碼、數(shù)據(jù)以某種排列方式在最終在生成的可執(zhí)行文件或者二進制文件,調試文件中的放置位置。它可以通過在EPPC linker的面板中進行配置,也可以直接在lcf文件中直接進行修改。Memory map 查看所有變量,函數(shù)、段地址信息EPPC Panel配置生成.s19,.bin 或者elf.lcf配置Lcf文件中首先是對整個memory map(MEMORY)地址空間內(nèi)的所有RAM,ROM進行分割,將其分為幾個區(qū)域,便于放置不同類型的存儲內(nèi)容,而這些區(qū)域內(nèi)包含的內(nèi)容可以是用戶自定義的段或者系統(tǒng)預定義的段(SECTION)。關于段的定義和使用將在lc
3、f文件介紹結束后進行介紹。 一個工程通常在建立的時候默認的調試方式都是在RAM中進行調試,由于RAM中執(zhí)行的效率高于FLASH,并且下載速度快。在生成的ROM Image中常量,初始化過的數(shù)據(jù)或者代碼如果沒有被定義在ROM區(qū)域則假設為這部分代碼要在程序開始執(zhí)行的時候從ROM去拷貝到RAM區(qū)。下面是一個完整的lcf文件,其中包括每行的解釋及用法。 /* lcf file for MPC5604B M27V (debug RAM version) 文件的名字及對應單片機(RAM版本) */RAM版本和ROM版本的區(qū)別在于RAM版本不將程序下載到ROM中去,而在RAM中執(zhí)行程序/* 512KB Fl
4、ash, 32KB SRAM */ /單片機的FLASH和SRAM大小 MEMORY 下面是對單片機存儲空間的定義,不同的段的起始地址,不能疊加地址空間 pseudo_rom:(仿真ROM區(qū)) org = 0x40000000, (開始地址) len = 0x00003000(長度) init: org = 0x40004000, len = 0x00001000 /初始化段所在位置 exception_handlers: org = 0x40005000, len = 0x00001000 /中斷向量所在地址 internal_ram: org = 0x40006000, len = 0x0
5、0001800 /內(nèi)部RAM的起始地址 heap : org = 0x40007800, len = 0x00000400 /堆的起始地址 stack : org = 0x40007C00, len = 0x00000400 /棧的起始地址SECTIONS段的定義 GROUP : / 它的定義需要遵從本例程方式”GROUP:” .“”中是內(nèi)容部分 .init : /.init段中所有內(nèi)容。 .init_vle (VLECODE) : /.init_vle(使用VLE代碼) *(.init) *(.init_vle) init /可以參看前面的init段在存儲空間的定義.本GROUP中的所有內(nèi)容
6、/放在init段中,”代表放在哪個段 GROUP : .ivor_branch_table (VLECODE) ALIGN (4096) : /ALIGN(4096)按照4096字節(jié)對齊 ._exception_handlers (VLECODE) LOAD (_e_ivor_branch_table) : / LOAD()將本段加載到指定地址 exception_handlers GROUP : .text (TEXT) ALIGN(0x10) : .text_vle (VLECODE) ALIGN(0x10): *(.text) *(.text_vle) .rodata (CONST) :
7、 *(.rdata) *(.rodata) .ctors : .dtors : extab : extabindex : pseudo_rom GROUP : ._uninitialized_intc_handlertable ALIGN(0x10) : .data : .sdata : .sbss : .sdata2 : .sbss2 : .bss : internal_ram/* Freescale CodeWarrior compiler address designations */_stack_addr = ADDR(stack)+SIZEOF(stack); /ADDR()是取括號
8、內(nèi)段的首地址/SIZEOF()是求某段的長度_stack_end = ADDR(stack); /詳見第3小節(jié)_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);2LCF文件中預定義的各個段的名稱及解釋Section Description .init 包含初始化代碼 .tex
9、t 包含程序代碼 .rodata 包含程序的常量 .sdata 包含初始化的全局小數(shù)據(jù) .sdata2 包含初始化過的全局常量(const定義內(nèi)容)小數(shù)據(jù) .data 包含初始化過的全局數(shù)據(jù) .sbss 包含未初始化過的全局小數(shù)據(jù) .sbss2 包含未初始化過的全局常量(const 定義內(nèi)容)小數(shù)據(jù) .bss 包含未初始化過的全局數(shù)據(jù) .ctors 包含構造函數(shù) .dtors 包含析構函數(shù) 3.常用關鍵字及使用說明關鍵字列表:1) SECTION2) ALIGN3) ADDR4) SIZEOF5) LOAD6) BIND7)Declspec8)pop, push9)FORCEACTIVE1)S
10、ECTION Section使用pragma來將編譯的目標代碼放到預定義的段中,然后可以在LCF文件中將對應的段放到指定的地址區(qū)域。Section和_declspec(section)都可以用來指定一個段,但是不能同時使用語法#pragma section objecttype | permission inameuname data_mode=datamodecode_mode=codemode參數(shù)objecttype 可以是以下三種選項,用來指定將目標數(shù)據(jù)放在哪里 code_type 可執(zhí)行目標類型 data_type 非常量數(shù)據(jù),包含比small data大的數(shù)據(jù) sdata_type
11、非常量數(shù)據(jù),包含比small data小或者等同的數(shù)據(jù)。 const_type 常量數(shù)據(jù),包含比small const大的數(shù)據(jù) sconst_type 常量數(shù)據(jù),包含小或者等同small data的數(shù)據(jù) all_types 所有數(shù)據(jù)和代碼 permission 定義訪問權限,包含下列三個選項 R 只讀 W 可寫 X 可執(zhí)行 iname 定義段的名字,編譯器存儲初始化過的目標。變量在定義的時候被初始化過的,函數(shù)和字符串也屬于初始化過的目標。 The iname parameter may be of the form .abs.xxxxxxxx where xxxxxxxx is an 8-di
12、git hexadecimal number specifying the address of the section. uname 定義段的名字,編譯器存儲未被初始化過的目標。下面是例子#pragma push / 保存當前狀態(tài)#pragma section .data COMM int red;int sky;#pragma pop / 恢復之前的狀態(tài)data_mode=datamode 為編譯器指定使用哪種數(shù)據(jù)模式 下面是可選的數(shù)據(jù)模式 near_abs 目標必須在16位地址空間 far_abs 目標必須在32位RAM地址空間 sda_rel 目標必須在鏈接器為small data定義
13、的32K 地址空間. code_mode=codemode 向編譯器指定地址模式下面是可選的三種地址模式: pc_rel 被調用子函數(shù)地址必須在調用函數(shù)24位地址空間范圍內(nèi) near_abs 函數(shù)地址必須在24位地址范圍 far_abs -函數(shù)地址必須在32位地址范圍內(nèi)預定義的段和默認模式 Type Name Data mode Code mode code_type .text data_mode=far_abs code_mode=pc_rel data_type .data data_mode=far_abs code_mode=pc_rel const_type .rodata dat
14、a_mode=far_abs code_mode=pc_rel sdata_type .sdata data_mode=sda_rel code_mode=pc_rel sconst_type .sdata2 .sbss2 data_mode=sda_rel code_mode=pc_rel .PPC.EMB.sdata0 .PPC.EMB.sbss0 data_mode=sda_rel code_mode=pc_rel 2)ALIGN 按照指定的邊界進行排列,必須是2的整倍數(shù)。SECTIONSGROUP:.init ALIGN(0x1000) : .text ALIGN(0x1000) :
15、text例子中定義了兩個段:.init和.text。在運行的時候每個段都會被放在下一個可以使用的地址(可以被0x1000整除)3)ADDR返回指定名稱的段或者內(nèi)存區(qū)域的開始地址. ADDR(sectionName | segmentName)參數(shù)sectionName 文件中段的標志符 segmentName 存儲區(qū)域中段的標志符 范例下面代碼中使用的ADDR功能來將ROOT的地址賦值給_rootbasecode . 列舉ADDR() 功能 MEMORY ROOT : origin = 0x80000400, length = 0 SECTIONS .code: _rootbasecode=A
16、DDR (ROOT); *.(text); ROOT 4)SIZEOF 返回指定Section或者segment的大小(以字節(jié)為單位) SIZEOF(segmentName | sectionName)參數(shù)segmentName segment的名字;必須以“.”作為起始。 sectionName section的名字;必須以“.”作為起始。5)LOAD 在指定地址加載一個或者多個段。 語法LOAD(address)參數(shù)address 一個內(nèi)存地址例如: 0x80000400. 注意 使用load指令來指定一個外部的ROM addr_mode。 Load指令可以被用于所有的在ROM中的段。 如
17、果編譯器選項面板中的Generate ROM image 沒有被選擇的話,指令會被在鏈接中忽略。 從ROM拷貝到RAM中的不連續(xù)的未初始化的數(shù)據(jù)段可能需要參考ROM的地址。舉例來說:保存緊跟在.text段后面的.data和.sdata段到ROM中,可以嘗試下面的例子:.text LOAD(ADDR(.text) : rom .data LOAD(ROMADDR(.text) + SIZEOF(.text): code .sdata LOAD(ROMADDR(.data) + SIZEOF(.data): code 6)BIND 指定一個段修飾語來設定一個地址。 BIND(address)參數(shù)a
18、ddress 一個存儲空間地址例如: 0x80000400. 7)pop, push 保存和恢復pragma設置 語法#pragma push#pragma pop pragma push 保存所有當前的pragma設置。Pragma pop 恢復所有pragma設置范例#pragma ANSI_strict on#pragma push /* Saves all compiler settings. */#pragma ANSI_strict off#pragma pop /* Restores ANSI_strict to on. */例程中的pragma不受任何面板設置影響,和之前其它的
19、pragma的設定8)_declspec(section name) 指定在已經(jīng)定義的section中放置變量或者函數(shù)語法 _declspec(section ) declaration_declspec(section ) definition參數(shù) section_name 指定一個初始化過的數(shù)據(jù)段的名字 注意段的名字必須用雙引號 ().如果使用用戶自定義的段,必須是事先用#pragma定義過的 9)FORCEACTIVE指定不能被優(yōu)化掉的目標. 參數(shù)FORCEACTIVE symbol , symbol* 第二節(jié) EPPC 鏈接器使用 EPPC Linker 設置面板來控制設定鏈接相關選項
20、,規(guī)定目標代碼鏈接成的可執(zhí)行文件,庫或者其它的最終文件格式。如下圖所示2.10版本(圖2-1)和10.3版本(圖2-2)圖2-1:Codewarrior 2.10 版本 圖2-2:codewarrior 10.3版本EPPC 鏈接器設定面板各條目的含義及用法 元素 目的 注釋Link Mode list box 指定鏈接器使用多少內(nèi)存做緩沖來寫輸出文件,然后寫到硬盤上選項: Use Less RAM 直接將輸出文件寫到硬盤,不使用緩沖 Normal 512字節(jié)緩沖 Use More RAM 將每個部分寫到自己的緩沖,然后寫回硬盤 鏈接需要足夠的RAM空間來保存輸入文件。Normal是最好的選擇
21、,More RAM更適合小工程 Generate DWARF Info checkbox Clear 不生成調試信息Checked 生成調試信息 Use Full Path Names checkbox Clear 鏈接器只使用文件名 Checked 鏈接器包含路徑名字在elf文件中 Generate Link Map checkbox Clear 不生成map文件 Checked 生成map文件List Closure checkbox Clear map不列舉程序開始點調用的函數(shù) Checked - Map 文件列舉所有程序開始點調用的函數(shù) List Unused Objects chec
22、kbox Clear - Map 不包含沒用到的目標 Checked Map 列舉所有沒有用到的目標 List DWARF Objects checkbox Clear - Map 不列出 DWARF 調試目標 Checked - Map 在Section里列出所有 DWARF 調試目標Suppress Warning Messages checkbox Clear 鏈接器在消息窗口顯示警告Checked 鏈接器不顯示警告Heap Address checkbox Clear Heap頂和堆棧底相同Checked 指定heap內(nèi)存位置 參考表后備注. Stack Address checkbo
23、x Clear 鏈接器使用默認的堆棧地址0x003DFFF0. Checked 為堆棧指定棧頂內(nèi)存地址 參考表后備注Generate ROM Image checkbox Clear 不生成ROM image. Checked 生成ROM image RAM Buffer Addresscheckbox Clear 不指定RAM buffer地址 Checked 給flash 編程器指定RAM buffer地址。許多其他的flash編程器使用指定的,獨立的緩沖區(qū)來加載所有的二進制段到連續(xù)的flash ROM地址空間。盡管如此,在運行的時候系統(tǒng)會將這些段加載到lcf文件或者數(shù)據(jù)地址框指定的地址。
24、 對于Codewarrior Flash編程器,RAM buffer和ROM image的地址是一樣的。(參考備注) ROM Image Address checkbox Clear 不指定目標地址 Checked 為二進制文件指定ROM目標地址參考備注Use Linker Command File checkbox Clear 用戶指定段地址,忽略lcf文件的配置。 Checked 從lcf文件中尋找段地址 如果選定,而lcf文件中并沒有指定段地址,編譯器將報錯Binary File list box 生成二進制文件 None 不生成bin文件 One 一個二進制文件 Multiple 多個
25、二進制文件 默認不生成二進制代碼 Generate S-Record File checkbox Clear 不生成srecord文件. Checked 生成S3 S-record文件 S-record 文件以 .mot擴展名存在,是早期的srecord文件擴展名。現(xiàn)在后綴名都是.s19,但格式內(nèi)容相同 Sort S-Record checkbox Clear 不排序s-recored文件Checked 地址上升排序s-recored文件 . Max Length text box 指定S-recored的最大長度(256字節(jié)或者少于) EOL Character list box 針對不同系
26、統(tǒng)指定srecord文件行尾的字符 DOS - Unix - Mac - Entry Point text box 指定程序性的入口地址-加載程序時使用的第一個函數(shù) 默認函數(shù)是_start.c中的bootstrap/glue 代碼。配置EABI的環(huán)境,然后執(zhí)行main() Heap 如果你的程序使用malloc 或者new將會使用到堆。如果使用MSL C,你的程序可能會使用隱含的堆。盡管如此,MSL分配程序不需要在棧下面申請堆。 如果不選擇檢驗框,堆的高地址等于棧的底部。 _stack_end = _stack_addr - (stack_size * 1024);_heap_end = _s
27、tack_end;_heap_addr = _heap_end - (heap_size * 1024);如果你的代碼不需要堆你可以清除堆地址檢驗框 注意如果沒有足夠的空間,malloc函數(shù)會返回0.如果你不用malloc,可以把堆的大小設定為零來給其它需要內(nèi)存空間的數(shù)據(jù)代碼,棧。 Stack 在指定棧的開始地址后,棧使用將向下增長。所以盡可能將棧頂設高 如果你沒有指定棧的地址,鏈接器將使用0x003DFFF0.但是默認值并不適合所有板子,有些芯片RAM很小。 ROM Image應用程序的ROM Image通常是整個應用程序鏡像。一個ROM鏡像通過ROM Image Address 和 RAM
28、 Bufferr Address來定義。ROM Image Address: ROM將被分配在什么位置。通常是在.lcf文件中定義的某一個存儲塊的開始。RAM Buffer Address: 在RAM中指定一個位置,用來作為Flash image編程器的緩沖區(qū)。RAM Buffer配置地址和ROM Image的配置地址必須保持相同,即RAM Buffer地址不需要考慮。第三節(jié) 代碼重定向如果我們想把一個函數(shù)存在flash,但是在RAM中被執(zhí)行,我們需要在LCF文件,程序中參考如下幾條進行定義1) LCF 文件: MEMORY reloc_flash: org = 0x0007F000, len = 0x00001000 /重定向的函數(shù)存儲在Flash中 reloc_ram: org = 0x40005000, len = 0x00001000 / 重定向的函數(shù)在RAM中被調用 SECTIONS . .RelocCode (VLECODE) LOAD(ADDR(reloc_flash): reloc_ram / define a section for relocated functions 2) 包含重定向函數(shù)的C文件,例如測試代碼: void Delay(void) #pragma push
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 【正版授權】 IEC 60512-99-002:2022+AMD1:2025 CSV EN Connectors for electrical and electronic equipment - Tests and measurements - Part 99-002: Endurance test schedules - Test 99b: Test s
- 【正版授權】 IEC 61869-20:2025 EN-FR Instrument transformers – Part 20: Safety requirements of instrument transformers for high voltage applications
- 2025年初中生物復習題及答案
- 2025年空中乘務員專業(yè)知識考試試卷及答案
- 空調安裝護欄合同協(xié)議書
- 合同友好終止協(xié)議書范本
- 2025年抗狂犬病血清項目合作計劃書
- 2025年芳綸纖維項目發(fā)展計劃
- 2025年坤泰膠囊項目發(fā)展計劃
- 智能建筑能源管理項目投資與運營合作協(xié)議
- 2024河北高考地理真題卷解析 課件
- 部隊先進個人事跡材料三篇
- 《非織造產(chǎn)品課程設計》課程教學大綱
- 2024年第一季度醫(yī)療安全(不良)事件分析報告
- 2024年國家電網(wǎng)招聘之通信類題庫及參考答案(考試直接用)
- 2024年廣東省廣州市中考語文試卷
- DB51-T 5048-2017 四川省地基與基礎施工工藝規(guī)程
- 《建筑工程設計文件編制深度規(guī)定》(2022年版)
- 23J916-1 住宅排氣道(一)
- 網(wǎng)絡傳播概論(第5版)課件 第八章 網(wǎng)絡時代的傳媒生態(tài)
- 高中政治必修四思維導圖
評論
0/150
提交評論