以下发动代码是从《ARM嵌入式体系试验教程(一)》中提取出来的。
1;发动文件,初始化C程序的运转环境,然后进入C程序代码。
2
3IMPORT|Image$$RO$$Limit|
4IMPORT|Image$$RW$$Base|
5IMPORT|Image$$ZI$$Base|
6IMPORT|Image$$ZI$$Limit|
7
8IMPORTMain;声明C程序中的Main()函数
9
10AREA Start,CODE,READONLY;声明代码段Start
11ENTRY;标识程序进口
12 CODE32;声明32位ARM指令
13
14Reset LDRSP,=0x40003F00;设置仓库
15
16;初始化C程序的运转环境
17 LDRR0,=|Image$$RO$$Limit|
18LDRR1,=|Image$$RW$$Base|
19LDRR3,=|Image$$ZI$$Base|
20
21CMPR0,R1
22BEQ LOOP1
23LOOP0 CMPR1,R3
24LDRCC R2,[R0],#4
25STRCC R2,[R1],#4
26BCCLOOP0
27
28LOOP1 LDRR1,=|Image$$ZI$$Limit|
29MOVR2,#0
30LOOP2 CMPR3,R1
31STRCC R2,[R3],#4
32BCCLOOP2
33
34B Main;跳转到C程序代码Main()函数
35
36END
从ADS1.2的协助文档能够看出以下几个symbol的界说应该是:
|Image$$RO$$Base|
表明RO输出段运转时开始地址,也能够说是程序代码寄存的开始地址,由-ro-base这个参数指定;
|Image$$RO$$Limit|
表明RO输出 段运转时存储区域边界,其值可通过|Image$$RO$$Base|+Codesizes+RO Data sizes+4核算得出;
|Image$$RW$$Base|
表明RW输出段运转时开始地址,记住是运转时的地址,而纷歧定是加载时的寄存地址,由于RW输出段在加载时可能是在ROM中并紧跟着RO输出段寄存的,当程序运转时才移动(在有些书中说是移动,个人觉得应该仅仅仿制,期望大家能帮我解释一下,谢谢!) 到RAM开始地址为|Image$$RW$$Base|的区域,由-rw-base这个参数指定;未指定的话,默许紧跟RO输 出段,那么|Image$$RW$$Base|=|Image$$RO$$Limit|;
|Image$$RW$$Limit|
表明RW输出 段运转时存储区域边界,其值可通过|Image$$RW$$Base|+RW Data sizes+4核算得出;
|Image$$ZI$$Base|
表明ZI输出段运转时开始地址,它是运转时在RAM中生成的,紧跟着RW输出段寄存,其 值和|Image$$RW$$Limit| 相同;
|Image$$ZI$$Limit|
表明ZI输出 段运转时存储区域边界,其值可通过|Image$$ZI$$Base|+ZI Data sizes+4核算得出。