LCF文件使用说明
更新时间:2024-04-06 09:44:01 阅读量: 综合文库 文档下载
- lcf文件用什么打开推荐度:
- 相关推荐
CodeWarrior 2.10 链接文件定义及使用
Codewarrior 2.10是飞思卡尔32位汽车级单片机Qorriva系列的编译器,与之前版本2.8、2.9完全兼容。许多新用户对codewarrior链接文件不是十分了解,本文将针对链接文件的常见问题以及段的定义进行介绍帮助用户快速了解和使用CodeWarrior。
LCF 文件定义及用法介绍
链接文件用来控制不同类型数据代码、数据以某种排列方式在最终在生成的可执行文件或者二进制文件,调试文件中的放置位置。它可以通过在EPPC linker的面板中进行配置,也可以直接在lcf文件中直接进行修改。 Memory map 查看所有变 量,函数段地址信息 EPPC Panel配置 生成.s19,.bin 或者elf .lcf配置 Lcf文件中首先是对整个memory map(MEMORY)地址空间内的所有RAM,ROM进行分割,将其分为几个区域,便于放置不同类型的存储内容,而这些区域内包含的内容可以是用户自定义的段或者系统预定义的段(SECTION)。关于段的定义和使用将在lcf文件介绍结束后进行介绍。 一个工程通常在建立的时候默认的都是在RAM中执行,由于RAM中执行的效率高于FLASH。在生成的ROM Image中常量,初始化过的数据或者代码如果没有被定义在ROM区域则假设为这部分代码要在程序开始执行的时候从ROM去拷贝到RAM区。 下面是一个完整的lcf文件,其中包括每行的解释及用法。 /* lcf file for MPC5604B M27V (debug RAM version) 文件的名字及对应单片机(RAM版本) */ RAM版本和ROM版本的区别在于RAM版本不将程序下载到ROM中去,而在RAM中执行程序 /* 512KB Flash, 32KB SRAM 单片机的FLASH和SRAM大小 */ MEMORY 下面是对单片机存储空间的定义,不同的段的起始地址,不能叠加地址空间 { pseudo_rom:(仿真ROM区) org = 0x40000000, (开始地址) len = 0x00003000(长度) init: org = 0x40004000, len = 0x00001000 //初始化段所在位置 exception_handlers: org = 0x40005000, len = 0x00001000 //中断向量所在地址 internal_ram: org = 0x40006000, len = 0x00001800 //内部RAM的起始地址 heap : org = 0x40007800, len = 0x00000400 /* Heap start */(堆的起始地址) stack : org = 0x40007C00, len = 0x00000400 /* Stack Start */ (栈的起始地址) }
SECTIONS段的定义 {
GROUP : { // 它的定义需要遵从本例程方式”GROUP:{}” .“{}”中是内容部分 .init : {} //.init段中所有内容。
.init_vle (VLECODE) : { //.init_vle(使用VLE代码) *(.init)
Auto FAE: Alan Yang-r66151
Page 1 CodeWarrior 2.10 链接文件定义及使用
*(.init_vle) }
} > init//可以参看前面的init段在存储空间的定义.本GROUP中的所有内容放在init段中,”>”代表放在哪个段
GROUP : {
.ivor_branch_table (VLECODE) ALIGN (4096) : {} //ALIGN(4096)按照4096字节对齐 .__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) : { *(.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()是取括号内段的首地址,SIZEOF()是求某段的长度 _stack_end = ADDR(stack); _heap_addr = ADDR(heap);
_heap_end = ADDR(heap)+SIZEOF(heap);
/* Exceptions Handlers Location (used in Exceptions.c for IVPR initialization) */
Auto FAE: Alan Yang-r66151
Page 2 CodeWarrior 2.10 链接文件定义及使用
EXCEPTION_HANDLERS = ADDR(exception_handlers); 备注
ALIGN
按照指定的边界进行排列,必须是2的整倍数。
SECTIONS { GROUP: {
.init ALIGN(0x1000) : {} .text ALIGN(0x1000) : {} } > text }
例子中定义了两个段:.init和.text。在运行的时候每个段都会被放在下一个可以使用的地址(可以被0x1000整除)
预定义的各个段的名称及解释
Section .init .text .rodata .sdata .sdata2 Description 包含初始化代码 包含程序代码 包含程序的常量 包含初始化的全局小数据
包含初始化过的全局常量(const定义内容)小数据
.data .sbss .sbss2
包含初始化过的全局数据 包含未初始化过的全局小数据
包含为初始化过的全局常量(const 定义内容)小数据
.bss 包含为初始化过的全局数据
Auto FAE: Alan Yang-r66151
Page 3 CodeWarrior 2.10 链接文件定义及使用
.ctors .dtors
包含构造函数 包含析构函数
section
Section使用pragma来将编译的目标代码放到预定义的段中,然后可以在LCF文件中将对应的段放到指定的地址区域。Section和__declspec(section)都可以用来指定一个段,但是不能同时使用
语法
#pragma section [ objecttype | permission ][iname][uname] [data_mode=datamode][code_mode=codemode]
参数
objecttype
可以是以下三种选项,用来指定将目标数据放在哪里
? ? ? ? ? ?
code_type – 可执行目标类型
data_type – 非常量数据,包含比small data大的数据
sdata_type – 非常量数据,包含比small data小或者等同的数据。 const_type – 常量数据,包含比small const大的数据
sconst_type – 常量数据,包含小或者等同small data的数据 all_types – 所有数据和代码
permission 定义访问权限,包含下列三个选项
R – 只读 ? W – 可写 ? X – 可执行
?
iname
定义段的名字,编译器存储初始化过的目标。变量在定义的时候被初始化过的,函数和字符串也属于初始化过的目标。
Auto FAE: Alan Yang-r66151
Page 4 CodeWarrior 2.10 链接文件定义及使用
The iname parameter may be of the form .abs.xxxxxxxx where xxxxxxxx is an 8-digit hexadecimal number specifying the address of the section. uname
定义段的名字,编译器存储未被初始化过的目标。 下面是例子
#pragma push // save the current state #pragma section \int red; int sky;
#pragma pop // restore the previous state data_mode=datamode
为编译器指定使用哪种数据模式 下面是可选的数据模式
near_abs – 目标必须在16位地址空间 ? far_abs – 目标必须在32位RAM地址空间 ? sda_rel – 目标必须在链接器为small data定义的32K 地址空间.
?
code_mode=codemode 向编译器指定地址模式 下面是可选的三种地址模式: pc_rel – 被调用子函数地址必须在调用函数24位地址空间范围内 ? near_abs –函数地址必须在24位地址范围 ? far_abs -函数地址必须在32位地址范围内
? 默认的地址模式是pc_rel
pop, push 保存和恢复pragma设置
语法
#pragma push
Auto FAE: Alan Yang-r66151
Page 5
正在阅读:
LCF文件使用说明04-06
70个物理科学小实验10-24
安全文明施工标准化配置手册 - 图文01-05
微机原理实验报告06-06
vmware 使用 - 图文01-29
放风筝看图作文三年级06-16
2021年上半年某局党建工作总结08-30
沃尔玛运用RFID资料 - 图文01-01
苏教版六年级科学上册期末习题03-07
好生小学部分家长家庭体育锻炼感悟06-09
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 使用说明
- 文件
- LCF
- 公共政策概论网考题目大全
- 政 治 学 基 础(王浦劬)期末复习资料
- 哲学问答100问
- 原料药ICHQ7A考试试卷2
- 2018年教师自查自纠自我剖析材料(精选多篇)-推荐word版(7页)
- 珠海格力电器股份有限公司财务报表分析
- 《统计学》(练习1)答案
- 开封市人民政府关于全面落实科学发展观加强环境保护工作的意见
- 从劳动者上班逛淘宝被开除看劳动合同法第三十九条第二项规定的适
- 河南省人民政府关于公布规范性文件清理结果的决定 - 图文
- 初中英语备课教案步骤
- 火力发电厂运行岗位标准
- 2013-2014-2数学实验考试题1
- 测绘工程中坐标转换问题的几点思考
- 考试试题(汽车理论)
- 2017年最新湘教版五年级语文上册全册教案(含教学计划) - 图文
- ZK1060型卡车制动系设计说明书
- 4.4 法拉第电磁感应定律综合练习(人教高中选修3-2)
- 高二历史必修三期中考试复习题
- 2018-2023年中国口腔医院行业市场发展预测及投资咨询报告 - 图文