




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
IAR for stm8 中指定编译的起始地址(转)已经用STVD+cosmic完成了IAP功能,但想试着在STM8上跑上官的UCOS,不得不用IAR编译,但编译后代码的生成地址怎么再从0X9000开始生成呢,找遍全网,也没有发现三言两语直接的表白,又对IAR环境不熟,看过了IAR下的工程设置的全部选项,都没有发现怎么修改这个地址,IAR的这个地址的修改,并不象KEIL及STVD下那么直接,它必须通过IAR的根目录下有个CONFIG的文件夹,里面有各种单片机的*.icf的文件,我看着有两处0x8000改为0x9000,然后编译文件,呵呵,果然有效,在STVP下,发现HEX文件就是从0x9000开始生成代码了。找的好辛苦,又不太懂英文看帮助,唉,只能受此罪!ICF修改的是以下三项:defineregionNearFuncCode=from0x9000to0xFFFF;defineregionFarFuncCode=from0x9000to0xFFFF;defineregionHugeFuncCode=from0x9000to0xFFFF;以下是摘抄的有关ICF文件部分IAR中xcl及icf文件详解链接器和链接器的配置2.1EWARM4.xx的链接器XLINK及其配置文件.xclXLINK链接器可以把IAR汇编器或编译器所产生的可重定位的UBROF目标文件转换成针对目标处理器的机器码。XLINK一般通过外部链接器命令文件(*.xcl)来配置,当然也可以在命令行中直接在xlink命令之后输入链接选项,或者也可以在XLINK_ENVPAR环境变量中设置链接选项。下面介绍XCL文件中常用的链接选项,以便在版本迁移之前,确切地了解XCL文件的含义。2.2XLINK选项下面介绍几个XCL文件中常见的链接器配置选项。更详细的内容请查阅XLINK的参考手册:IARLinkerandLibraryToolsReferenceGuide。-D-Dsymbol=value作用:使用-D选项可以定义一些纯粹的符号,一般用于声明常数。参数:symbol是未在其它地方定义过的外部符号,value是symbol所代表的值。例如:就定义了2个标识了ROM起始和结束地址的符号,这样以后关于ROM地址的配置都可以直接使用这2个符号,使得配置文件的可读性增强。-Z-Z(SPLIT-)typesegments=|#range,range作用:使用-Z命令的目的是规定segments在存储空间中占据的位置和区间。如果链接器发现某个segment没有使用-Z,-b或者-P中的任何一个命令进行定义,则会报错。参数:使用参数,表示为segments分配空间时不考虑任何已经被使用的地址空间。这适用于当某些segments的地址空间需要发生重叠的情形。type参数type规定了segments的存储类型,默认为UNTYPED。表1列举了IAR的ARMC/C+编译器所支持的segments类型。-Q-Qsegment=initializer_segment作用:自动设置segment的拷贝初始化。链接器会产生一个新的initializer_segment(如CODE_ID),其内容与segment(如CODE_I)完全一致。相关的符号表和调试信息都会和segment相关联(如CODE_I)。initializer_segment的内容(通常在ROM中)必须在初始化阶段被复制到segment(通常在RAM中)。-c-cprocessor作用:规定目标处理器的类型。如-carm。.3EWARM5.xx的链接器ILINK及其配置文件.icfEWARM5.xx中的链接器称为ILINK。ILINK可以从ELF/DWARF格式的目标文件中提取代码和数据,并生成可执行映像。在EWARM4.xx中,基本的代码和数据链接单元是segment,而对于ELF/DWARF格式而言,基本链接单元是section。ILINK根据ILINKConfigurationFile(*.icf)来分配这些sections。由于XLINK与ILINK是两个完全不同的链接器,所以XCL和ICF也是两种完全不同的配置文件。下面简要介绍ICF文件的格式和内容,以协助用户完成版本迁移。2.4ICF格式浅析sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理解ICF文件的内容尤其重要。一个标准的ICF文件可包括下面这些内容:1.可编址的存储空间(memory)2.不同的存储器地址区域(region)3.不同的地址块(block)4.Section的初始化与否5.Section在存储空间中的放置下面介绍了几条ICF文件中常见的指令,详细内容请参考ILINK相关说明文档(EWARM_DevelopmentGuide.pdf):defineexportedsymbolname=expr;作用:指定某个符号的值。参数:exported导出该symbol,使其对可执行镜像可用name符号名expr符号值举例:definesymbolRAM_START_ADDRESS=0x40000000;definesymbolRAM_END_ADDRESS=0x4000FFFF;definememorynamewithsize=expr,unit-size;作用:定义一个可编址的存储地址空间(memory)。参数:namememory的名称expr地址空间的大小unit-sizeexpr的单位,可以是位(unitbitsize),缺省是字节(unitbytesize)举例:definememoryMEMwithsize=4G;defineregionname=region-expr;作用:定义一个存储地址区域(region)。一个区域可由一个或多个范围组成,每个范围内地址必须连续,但几个范围之间不必是连续的。参数:nameregion的名称region-exprmemory:fromexprtoexpr|sizeexpr,可以定义起止范围,也可以定义起始地址和region的大小举例:defineregionROM=MEM:from0x0size0x10000;defineregionROM=MEM:from0x0to0xFFFF;defineblocknamewithparam,param.extended-selectors;作用:定义一个地址块(block);它可以是个空块,比如栈、堆;也可以包含一系列sections。参数:nameblock的名称param可以是:size=expr(块的大小)maximumsize=expr(块大小的上限)alignment=expr(最小对齐字节数)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。参数:bycopy在程序启动时自动执行初始化。manually在程序启动时不自动执行初始化。param可以是:packing=none|compress1|compress2|autocopyroutine=functionnamepacking表示是否压缩数据,缺省是auto。functionname表示是否使用自己的拷贝函数来取代缺省函数。section-selector同上举例:initializebycopyrw;donotinitializesection-selectors;作用:规定在程序启动时不需要初始化的sections。一般用于_no_init声明的变量段(.noinit)。参数:section-selector同上举例:donotinitialize.noinit;placeataddressmemory:expr|startofregion_expr|endofregion_exprextended-selectors;作用:把一系列sections和blocks放置在某个具体的地址,或者一个region的开始或者结束处。参数:memorymemory的名称expr地址值,该地址必须在memory所定义的范围内region_exprregion的名称extended-selector同上举例:placeatstartofROMsection.cstart;placeatendofROMsection.checksum;placeataddressMEM:0vec;placeinregion-exprextended-selectors;作用:把一系列sections和blocks放置在某个region中。sections和blocks将按任意顺序放置。参数:region-exprregion的名称extended-selector同上举例:placeinROMreadonly;placeinRAMreadwrite;placeinRAMblockHEAP,blockCSTACK,blockIRQ_STACK;placeinROMsection.textobjectmyfile.o;placeinROMreadonlyobjectmyfile.o;placeinROMreadonlydataobjectmyfile.o;IAR中ICF文件分析与应用sections在地址空间中的存放是由ILINK链接器来实现的,而ILINK链接器是按照用户在ICF文件中的规定来放置sections的,所以理解ICF文件的内容尤其重要。一个标准的ICF文件可包括下面这些内容:1.可编址的存储空间(memory)2.不同的存储器地址区域(region)3.不同的地址块(block)4.Section的初始化与否5.Section在存储空间中的放置下面介绍了几条ICF文件中常见的指令,详细内容请参考ILINK相关说明文档(EWARM_DevelopmentGuide.pdf):1.defineexportedsymbolname=expr;作用:指定某个符号的值。参数:exported导出该symbol,使其对可执行镜像可用name-符号名expr-符号值举例:definesymbolRAM_START_ADDRESS=0x40000000;definesymbolRAM_END_ADDRESS=0x4000FFFF;2.definememorynamewithsize=expr,unit-size;作用:定义一个可编址的存储地址空间(memory)。参数:name-memory的名称expr-地址空间的大小unit-size-expr的单位,可以是位(unitbitsize),缺省是字节(unitbytesize)举例:definememoryMEMwithsize=4G;3.defineregionname=region-expr;作用:定义一个存储地址区域(region)。一个区域可由一个或多个范围组成,每个范围内地址必须连续,但几个范围之间不必是连续的。参数:nameregion的名称region-exprmemory:fromexprtoexpr|sizeexpr,可以定义起止范围,也可以定义起始地址和region的大小举例:defineregionROM=MEM:from0x0size0x10000;defineregionROM=MEM:from0x0to0xFFFF;4.defineblocknamewithparam,param.extended-selectors;作用:定义一个地址块(block);它可以是个空块,比如栈、堆;也可以包含一系列sections。参数:nameblock的名称param可以是:size=expr(块的大小)maximumsize=expr(块大小的上限)alignment=expr(最小对齐字节数)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。参数:bycopy在程序启动时自动执行初始化。manually在程序启动时不自动执行初始化。param可以是:packing=none|compress1|compress2|autocopyroutine=functionnamepacking表示是否压缩数据,缺省是auto。functionname表示是否使用自己的拷贝函数来取代缺省函数。section-selector同上举例:initializebycopyrw;6.donotinitializesection-selectors;作用:规定在程序启动时不需要初始化的sections。一般用于_no_init声明的变量段(.noinit)。参数:section-selector同上举例:donotinitialize.noinit;7.placeataddressmemory:expr|startofregion_expr|endofregion_exprextended-selectors;作用:把一系列sections和blocks放置在某个具体的地址,或者一个region的开始或者结束处。参数:memorymemory的名称expr地址值,该地址必须在memory所定义的范围内region_exprregion的名称extended-selector同上举例:placeatstartofROMsection.cstart;placeatendofROMsection.checksum;placeataddressMEM:0vec;8.placeinregion-exprextended-selectors;作用:把一系列sections和blocks放置在某个region中。sections和blocks将按任意顺序放置。参数: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;可发现uiData的值为0x08090000该法可方便通过ICF指定某变量的地址。程序也可以。写法类似.vector如果用block的方。类似defineblockCSTACKwithalignment=8,size=_ICFEDIT_size_cstack_;C中:#pragmalanguage=extended#pragmasegment=CSTACKptr=_sfe(CSTACK);可得到CSTACK的高端地址+1_sfe:Returnslastaddressofsegment.从事电子技术工作这么多年一直想写点东西,但以限于本人文笔与技术水平一直没写。今天有空写点请多多指教。definesymbolNVNC_Start=0x08000000;/中断起始地址definesymbolNVNC_size_cstack=0x400;/中断堆栈尺寸definesymbolPROEG_size_heap=0x400;/程序堆栈尺寸definesymbolUSB_SRAM_start=0x40006000;/USB专用SRAM起始与结束地址definesymbolUSB_SRAM_end=0x400063FF;definesymbolSyS_SRAM_start=0x20000000;/定议RAM起始与结束地址definesymbolSyS_SRAM_end=0x2000FFFF;/64KdefinesymbolSyS_Flash_start=0x08000800;/定议FLASH起始与结束地址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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 老年人感染防护知识培训课件
- 大数据技术在智能运维及风险预警中的应用
- 靖边到定边多少公里
- 热点主题作文 压轴练-2025年中考语文复习
- 2025年1月国开电大法学本科《国际法》期末纸质考试试题及答案
- 老刀修面培训知识总结
- 配电网扩展知识培训课件
- 老人康复知识培训课件
- 市场调查与分析:大数据融合的视角(数字教材版)课件全套 第1-12章-大数据时代的市场调查概述-市场调查报告撰写
- 老人养老护理培训课件
- 中学生宿舍日常与管理
- 使用拐杖操作流程及评分标准
- 2025苏教版小学数学二年级上册教学计划
- 《民法概述》课件
- 景观设计客户需求洞察
- 2023年福建公务员录用考试《行测》真题卷及答案解析
- DB11 1488-2018 餐饮业大气污染物排放标准
- 2024年卷烟封装设备操作工职业鉴定考试题库(浓缩500题)
- 人教版九年级化学上册《第一、二单元》综合测试卷(附答案)
- 中职机械专业《变压器》单元测试题
- 2024年四川省大竹县级机关和事业单位考调人员75人历年(高频重点提升专题训练)共500题附带答案详解
评论
0/150
提交评论