您的位置 首页 汽车

简略的发动代码(Startup.s)剖析

以下启动代码是从《ARM嵌入式系统实验教程(一)》中提取出来的。1;启动文件,初始化C程序的运行环境,然后进入C程序代码。23IMPORT

以下发动代码是从《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核算得出。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/258829.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部