引用 ADS1.2下ARM映像文件
and execution aof the region containing the RO
section. If you do not enter a value, the value defaults to 0x8000.
意思是,这个文本框设置加载时地址和运行时地址。如果没有设置值,默认时0x8000。这个值将会对应ADS的预定义变量Image$$RO$$Base,指定了RO的base。这个变量可以被初始化程序IMP
根据上面的1,2可知,如果要烧写FLASH 那么RO Base 应该设置成ARM片选的FLASH 的首地址;如果要调试那么RO Base要设置成RAM地址。
RW Base 这个文本框设定包含RW和ZI输出段的运行时域地址。如果你在这里输入一个值,连接器创建一个包含两个运行时域的映象,这两个域是:
包含RO输出段的运行时域
包含RW和ZI输出段的运行时域
如果你输入了RW Base值并且选择了Split image选项,连接器创建的映象文件分别包含RW输出段和ZI输出段的装载时地址和运行时地址,并都由你输入的RW Base值指定。
对于简单连接方式,当没有输入RW Base值时,映象文件包含一个加载时域和一个运行时域。这时,RO输出段、RW输出段、ZI输出段都包含在一个域中。当输入RW Base值时,映象文件包含两个运行时域,一个包含RO输出段,一个包含RW输出段和ZI输出段。当指定了-split选项时,映象文件又多包含两个加载时域,一个包含RO输出段,一个包含RW输出段和ZI输出段。
简单的初始化用户程序的执行环境
ARM映像文件一开始总是存储在ROM/Flash里面的,其RO部分既可以在ROM/Flash里面执行,也可以转移到速度更快的RAM中执行;而RW和ZI这两部分是必须转移到可写的RAM里去,其实RW包括ZI区域,ZI区域放的是未赋值的全局变量,RW 区域放的是已赋值(赋0除外)的全局变量。所谓应用程序执行环境的初始化,就是完成必要的从ROM到RAM的数据传输和内容清零。
先介绍几个必要的符号,编译器使用下列符号来记录各段的起始和结束地址:
|Image$$RO$$Base| :RO段起始地址
|Image$$RO$$Limit| :RO段结束地址加1 (在加载域中,是RW的起始地址)
|Image$$RW$$Base| :RW段起始地址 (在运行域中即运行的时候,是RW的起始地址)
|Image$$RW$$Limit| :ZI段结束地址加1
|Image$$ZI$$Base| :ZI段起始地址
|Image$$ZI$$Limit| :ZI段结束地址加1
这些符号的值是根据链接器中设置的中ro-base和rw-base的设置来计算的。 由于rw和zi相连,|Image$$ZI$$Base|就等于|Image$$RW$$Limit| .其它的值都是编译器自动计算出来的。我们还可以通过scatter文件更详细得指定各个输出段的工作地址。
初始化用户执行环境主要是把ro、rw、zi三段拷贝到指定的位置。
下面的程序是rw、zi段在运行域中的搬运过程:
;Copy and paste RW da
ldr r0, =|Image$$RO$$Limit| /*取RO区末地址后面的地址,即RW数据源的起始地址*/
ldr r1, =|Image$$RW$$Base|/*取RW区在RAM里的执行区起始地址,即编译器选项RW_Base指定的地址*/
ldr r3, =|Image$$ZI$$Base|/*取ZI区在RAM里面的起始地址*/
;Zero init base => top of initialised da
cmp r0, r1 /* 比较ROM区中数据段首地址和RAM区中RW段目标首地址*/
beq %F2 /*相等代表当前已经是在RAM中运行*/(F表示after,B表示before,r0与r1相等则转跳)
/*B %F2表向前跳到标号为2的Lable处*/
1
cmp r1, r3 /*不相等则和RAM区中ZI段的目标地址比较*/
ldrcc r2, [r0], #4/*如果r1
ldr r1, =|Image$$ZI$$Limit| /* 取ZI段的结束地址 */
mov r2, #0 /*将r2赋值为0*/
3
cmp r3, r1 ; Zero init
strcc r2, [r3], #4 /*如果r3
- AVR单片机驱动高精度AD芯片ADS1256的C程序(11-30)
- STM32驱动16位精度A/D转换芯片ADS1120(11-27)
- S3C2440+ADS1.2+H_JTAG 实现单步调试(11-25)
- PIC16F877A例程---DS18B20(11-24)
- PIC16F877A例程---DS1302程序(11-24)
- 基于ADS1256的地震数据采集电路设计(10-08)