### IAR用法点滴 #### 一、程序固化后的运行方式 当程序被固化到Flash中后,其运行过程涉及到RW段(可读写数据段)和ZI段(初始值为零的数据段)的处理。这两段在程序运行前需要被搬移到RAM中。在IAR环境下,程序下载到Flash后,上电启动时如何实现这一过程是通过特定的机制完成的。 1. **RW和ZI段的移动**: - 在IAR中,程序在完成.s文件的初始化后并不会直接跳转到`main`函数执行,而是跳转到一个特殊的函数(通常称为`?main`)。在这个特殊函数中,根据ICF(Include Configuration File)文件的配置,RW和ZI段会被搬移到ICF文件指定的RAM区域中。 2. **外部RAM控制器初始化**: - 如果程序需要在外部RAM中运行,则必须在代码下载到RAM之前初始化外部RAM控制器。这一过程通常在.s文件中完成,因为.s文件的开始部分属于CODE RO(只读代码),不需要RAM空间,因此可以在其中进行外部RAM的配置工作。 3. **外部Flash的选择**: - 如果计划将程序固化在外部Flash中,需要确保外部Flash在芯片上电后能够被默认支持。这意味着在硬件设计阶段就需要考虑选择与芯片兼容的外部Flash型号。 #### 二、程序在RAM中的调试运行方式 为了方便调试,有时候程序不需要固化到Flash中,而是直接在RAM中运行。此时需要对ICF文件进行相应的配置: 1. **RAM地址设置**: - 将ICF文件中的ROM和RAM地址都设为硬件RAM的地址,并禁用Flashloader功能。这样程序就能直接在RAM中运行。 2. **外部RAM控制器初始化**: - 对于希望在外置RAM中调试的情况,需要在程序下载到RAM之前初始化外部RAM控制器。IAR提供了.mac文件来实现这一目的。在程序下载之前,会先执行.mac文件中的程序来配置外部RAM控制器。 3. **示例代码**: - 下面是一段LPC芯片初始化外部RAM的示例代码: ```c execUserFlashInit() { __writeMemory32(0x1000ffef, 0xffe00000, "Memory"); __writeMemory32(0x0f000114, 0xE002C014, "Memory"); } ``` - 这段代码通过调用`__writeMemory32`函数向特定地址写入特定值来完成外部RAM的初始化配置。 #### 三、程序的IAR下载方法 IAR提供了多种程序下载方式,适用于不同的应用场景: 1. **文件在片内Flash中的下载运行**: - 这是最常见的下载方式,适用于大多数ARM芯片。IAR通过Flashloader将二进制可执行文件下载到片内Flash中。具体流程包括首先下载一个临时程序到RAM中,再通过这个程序与Flashloader交互完成最终程序的下载。 2. **文件在片外Flash中的下载**: - 对于需要下载到片外Flash的情况,IAR下载到RAM中的程序需要支持对外部Flash的操作。这个程序通常需要用户自行编写,并能够完成外部Flash的擦除等操作。需要注意的是,该程序下载的RAM地址必须是可以使用的RAM区域,如需使用外部SDRAM,则必须先初始化SDRAM控制器。 3. **文件在片内/外RAM中的下载**: - 当程序直接在RAM(内部或外部)中下载运行时,不再需要Flashloader的参与。此时只需要在ICF文件中正确配置运行时域的RAM地址即可。对于外部RAM,还需要通过.mac文件初始化外部RAM控制器。 #### 四、链接器和链接器配置 链接器的作用是将IAR汇编器或编译器产生的可重定位的UBROF目标文件转换为目标处理器的机器码。XLINK链接器是IAR提供的链接工具之一,可以通过外部链接器命令文件(*.xcl)进行配置。 1. **XCL文件配置选项**: - `.xcl`文件中常见的配置选项包括: - `-D-Dsymbol=value`:用于定义外部符号,通常用来声明常数。例如,可以定义ROM起始和结束地址的符号,提高配置文件的可读性。 - `-Z-Z[@][(SPLIT-)type]segments[=|#]range[,range]…`:用于控制不同类型的内存段如何被分配到内存空间中。 通过以上内容的详细介绍,我们可以更好地理解IAR在程序固化、RAM调试、程序下载以及链接器配置等方面的关键技术和实践细节。这对于实际开发过程中优化程序结构、提高调试效率和确保程序可靠运行具有重要意义。
剩余16页未读,继续阅读
- 粉丝: 3
- 资源: 8
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助