新闻中心

EEPW首页>嵌入式系统>设计应用> 简单的启动代码(Startup.s)分析

简单的启动代码(Startup.s)分析

作者: 时间:2016-11-25 来源:网络 收藏
以下启动代码是从《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

本文引用地址://m.amcfsurvey.com/article/201611/321098.htm从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计算得出。


关键词:启动代码Startup

评论


技术专区

关闭