当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]用IAR EWARM开发嵌入式系统时目标代码的链接与定位

摘要 采用IAR EWARM集成开发工具进行ARM嵌入式系统开发,具有高效和灵活的特点,可以生成多种格式的目标文件。源程序经编译后生成包含数据或代码存储器逻辑映像的数据段和代码段,必须经过合理的链接定位,才能保证最终目标代码能够下栽到系统的Flash内并正确运行。
关键词 ARM嵌入式系统开发 IAR EWARM 编译器


1 数据段和代码段的作用
    IAR C/C-+编译器是一种具有世界先进水平的标准C/C-+编译器,支持符合ANSI C标准的C或C++编程语言。源程序经编译后生成包含数据或代码存储器逻辑映像的数据段和代码段。每个段都有一个段名和一个表示其存储器空间的段类型。段类型CODE表示ROM中的执行代码,段类型CONST表示ROM中的数据,段类型DATA表示RAM中的数据。段名可与段类型相同,但其意义不一样,实际使用时不能混淆。表l所列为IAR C/C++编译器所使用的各种段、段类型及其读/写属性说明。
1.1 数据段
   
数据位于DATA段中,包括静态(static)存储器、堆栈(stack)、堆(heap)以及已定位的数据。DATA段可以带有后缀。例如,DATA_C用于常数数据,包括文字字符串;DATA_Z用于无初值或用0初值声明的静态和全局变量。
    全局变量或已声明的静态变量保存在静态存储器空间。已声明的静态变量有:初值为O或非0的变量、采用“@”或“#pragma”操作符定位了的变量、被声明为“const”因而可在ROM中保存的变量,以及采用关键字“__no_init”定义不允许被初始化的变量等。
    堆栈用于为函数保存局部变量及其他临时数据,是由堆栈指针寄存器SP指向的一段连续存储器。作为堆栈的数据段称为“CSTACK”。初始化模块cstartup将堆栈指针初始化为指向CSTACK段的尾部。堆栈容量在很大程度上取决于具体程序操作细节。如果给定的堆栈容量太小,则会使堆栈中的数据发生覆盖而导致程序出错;如果给定的堆栈容量太大,则会浪费RAM空间。ARM核处理器支持5种异常工作模式,每种模式都有自己的堆栈,用户应在启动代码中分别初始化各个堆栈指针,并在链接器命令文件中进行段定位。

    堆用于保存动态分配数据。作为堆的数据段称为“HEAP”,它仪在使用动态存储器分配时才被包含到应用系统中。与CSTACK段类似,HEAP段容量的大小需要视具体应用而定。使用标准输入/输出库时,应将HEAP容量设置为满足对标准输入/输出进行缓冲的要求,通常为512字节。
    明确指定了地址的变量将被定位在DATA_AC段或DATA_AN段。DATA_AC段用于初始化为常数的数据,DATA_AN段用于声明为“__no_init”的变量。
1.2 代码段
   
代码段包括启动代码、普通代码和异常向最。
    启动代码位于ICODE段,包括系统启动(cstartup)、运行初始化(cmain)和系统终止(cexit)等代码。ICODE段必须被定位在一段连续的存储器空间,链接器命令文件中不能采用-P命令选项来定位ICODE段。启动代码通过复位向量调用。
    普通代码位于CODE段,其中保存普通函数的执行代码。CODE段可以带有后缀,如CODE_I段保存由CODE_ID段初始化并在RAM中执行的代码。与编译器对已初始化变量的处理类似,代码运行时将ROM存储器中初始化时段的内容复制到RAM存储器中再执行。普通代码段还与符号及调试信息有关。
    异常向量位于INTVEC段。如果在异常向量处使用跳转到异常句柄的指令(如B指令),则异常句柄必须位于跳转指令能够到达的范围之内,使用PC加载指令(如LDR PC指令)则不存在这个问题。

2 段在存储器中的定位
    IAR C编译器所生成的段需要通过XLINK链接器根据链接命令文件中一系列命令选项的规定在存储器中进行定位,才能保证目标代码的正常运行。链接命令文件是一种文本文件,以“.xcl”为扩展名,其中包含各种XLINK命令选项。
    最常用的命令选项有:CPU命令选项-C、常数定义命令选项D、段定位命令选项-Z或-P。
    “-c”命令选项用于规定用户系统所采用的CPU,如:-carm。
    “-D”命令选项用于规定存储器的起始和终止地址,如:
    -DROMSTART=40000040
    -DROMEND=40006FFF
    “-D”命令选项也可用于定义堆栈长度或其他常数,如:
    -D_CSTACK——STZE=2048
    -D_IRQ_STACK_SIZE=5l2
    “-Z”命令选项按段出现的顺序进行定位,对每个存储器范围要指定其终点,如:
    -Z(CONST)MYSEGMENTA,MYSEGMENTB=008000-OFFFFF
    两个不同类型的段如果不指定第2个段的范围,则可以定位在同一个存储器区域之内,如:
    -Z(CONST)MYSEGMENTA=008000-0FFFFF
    -Z(CODE)MYCODE
    两段存储器范围可以覆盖,从而允许具有不同定位要求的段共享部分存储器空间,如:
    -Z(CONST)MYSMALLSEGMENT=008000-000FFF
    -Z(CONST)MYLARGESEGMENT=008000-OFFFFF
    “-P”命令选项以非连续方式进行段定位,可充分利用存储器空间,如:
    -P(DATA)MYDATA=100000-101FFF,110000-11lFFF
    如果用户应用系统还有一段RAM位于存储器
    0x10F000~Oxl0F7FF,只要将这段范围加到上述命令中即可:
    -P(DATA)MYDATA=100000-10lFFF,10F00010F7FF,110000-11lFFF


3 链接命令文件应用举例
   
链接器命令文件的作用足通知XLLINK链接器,根据文件中给定的命令选项在存储器中进行各种段定位;由于ARM核处理器的种类繁多,各处理器的存储器配置也不尽相同,因此链接器命令文件通常需要根据具体应用系统硬件设计进行定制,以保证代码和数据在给定的存储器范围之内不发生越界而导致错误。
    下面以Philips公司的LPC2148 ARM核处理器芯片为例,说明如何定制XLINK链接命令文件。LPC2148具有32 KB片内SRAM和512 KB片内Flash,其存储器地址如下。
    片内Flash:0x00000000~Ox0007FFFF。
    片内SRAM:0x40000000~0x413007FFF。
    针对LPC2148所具有的存储器地址范围,可分别定制,在片内SRAM中或在片内Flash中,调试应用程序的XLINK链接命令文件。
(1)在片内SRAM中调试应用程序的链接命令文件


(2)在片内Flash中调试应用程序的链接命令文件

    对上述链接命令文件进行适当修改后可以用于在LPC2148片内Flash中调试应用程序,主要是重新规定代码段和数据段的存储器地址,有时还要重新定义堆栈(stack)和堆(heap)的长度。下面仅列出修改后的部分,其他相同部分略去:


4 结论
   
采用IAR EWARM集成环境开发ARM嵌入式系统,需要通过链接命令文件通知XLINK链接器如何对C编译器生成的代码和数据段进行链接和定位。用户需要熟悉所使用ARM核处理器的SRAM和Flash存储器配置,并根据实际可用地址空间来确定采用哪些XLINK命令选项。只有采用合适命令选项对代码和数据段进行正确定位,生成可靠的执行代码,最后将执行代码写入到Flash中,才能成功完成ARM嵌入式系统设计;否则,即使编写的C源程序再优化,也起不到其应有的作用。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Arm CPU正在从根本上推动AI变革,并造福地球。Arm架构是未来AI计算的基石。​

关键字: ARM AI

台湾新竹 – 2024年4月23日 – 著名的微控制器供货商新唐科技公司,与全软件开发生命周期提供跨平台解决方案的全球软件公司Qt Group宣布深化合作,扩展新唐科技人机界面(HMI)平台支持「Qt for MCUs」...

关键字: 微控制器 嵌入式系统 MCU

随着物联网、嵌入式系统以及微控制器技术的飞速发展,微控制器已成为众多智能设备和系统不可或缺的核心组件。而微控制器的正常工作,离不开烧录器的精准操作。C8051F021烧录器,作为一款高效、稳定、易用的微控制器烧录工具,在...

关键字: c8051f021烧录器 联网 嵌入式系统

为增进大家对嵌入式系统的认识,本文将对嵌入式系统、嵌入式系统的特点予以介绍。

关键字: 嵌入式 指数 嵌入式系统

近日,Arm推出了Arm® Ethos™-U85神经网络处理器(NPU)和Arm Corstone™-320物联网参考设计平台,旨在满足海量的数据处理和大规模计算,加速推进边缘AI的发展进程。

关键字: ARM

2024年4月18日,国民技术第四代可信计算芯片NS350 v32/v33系列产品正式发布并开始量产供货。NS350 v32/v33是一款高安全、高性能、超值可信密码模块2.0 (TCM 2.0)安全芯片,适用于PC、服...

关键字: PC 服务器平台 嵌入式系统

2024年,嵌入式系统将走向何方?如何才能走在趋势的前沿?从工厂到家电,从医院里昂贵的医疗设备,到随处可见的可穿戴设备,我们身边的联网设备越来越多,生活更加绿色低碳,嵌入式系统功不可没。ST于3月19日成功举办STM32...

关键字: 嵌入式系统 可穿戴设备

为了赶超云计算市场上的竞争对手,谷歌正试图通过定制的Arm服务器芯片降低云计算服务成本。

关键字: 谷歌 ARM 定制芯片

在嵌入式系统开发、调试和测试过程中,J-Link作为一种高效的调试工具,为开发者提供了极大的便利。然而,要想充分发挥J-Link的功能,首先需要正确安装其驱动程序。本文将详细介绍J-Link驱动的安装过程,并深入解析其中...

关键字: jlink 嵌入式系统 嵌入式开发

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM
关闭
关闭