×
单片机 > 单片机程序设计 > 详情

ARM启动代码原理和分析

发布时间:2020-06-17 发布时间:
|

内容大纲


内容关键字:


映像文件


RO代码段

ZI未初始化数据段

RW数据段

Load Address加载地址

Execu o n A ddress 执行地址

Stack Pointer栈空间指针


Boot相关硬件


• Flash Rom(可作为bootrom的存储器)

Boot相关硬件

Boot相关硬件


Boot的主要功能


• 建立异常向量表

• 初始化中断

• 初始化硬件设备

• 初始化应用程序执行环境


• 跳转到主应用程序

初始化硬件

• 软件的运行离不开硬件,boot必须对硬件进

行初始化。硬件的初始化主要通过配置特

殊控制寄存器来完成,包括下面几部分:

关闭开门狗

屏蔽所有的中断

初始化PLL和时钟。

初始化储存系统


初始化应用程序的执行环境


• Elf文件的类型:可执行文件、可重定位文

件、共享库object(又叫做共享库)文件。

• Elf文件的功能:

1、用作链接器的输入生成可执行的映像文件

2、可装载到内存里运行,完成特定功能的文件。


elf文件的物理结构


• Elf文件头

• Sec o n: .text .d ata .b ss. sym t ab

• Program header

• 可重定位文件与可执行文件的区别:

区与段的概念

program header

可执行映像文件的逻辑结构


由几个可重定位的目标文件的相同属性区组

成了可执行映像的段,那么段有组成什么?

在逻辑结构里,段组成了更大的组织:域


装载域和运行域

• 域又组成什么呢?当然就是组成可执行文件了,一个映像文件可以包含一到多个域。与看起来有些多余,实际上更为重要的是用域来描述输出区运行前和运行时在存储系统上的位置。所以,域分为装载域和运行域。装载域描述运行前输出段在rom/ram中的分布状态,运行域描述运行时输出段在rom/ram中的分布状态

• 大多数情况下,映像文件在执行前把它装载到rom中,而当运行时域里 的有些输出段必须复制到ram中,程序才能正常运行,所以,在装载和运行时,有些段处在不同的位置(地址空间)。

• 由图可以看出,映像文件zi段在装载域里是不存在的,在运行域里才建立的;映像文件在运行时,第一件工作就是把rw输出段复制到ram里的正确位置,第二件工作就是建立zi输出段并初始化为0。这就是应用程序执行环境的初始化。然而,在运行时,代码和数据分布到了不同的地址空间,形成了三个运行域:ro运行域、rw运行域、zi运行域。那么这个过程是如何来实现的?


RO

RO

Base|; Base of ROM code


RO

RO

Limit| ; End of ROM code

(=start of ROM data)


RW

RW

Base| ; Base of RAM to

ini a l ise


ZI

ZI

Base| ; Base and limit of area


ZI

ZI

Limit| ;


分散装载技术


• 分散装载技术可以把用户的应用程序分割成多个RO运行域和RW运行域,并且给他们指定不同的地址,这在嵌入式系统的实际应用中有很多的好处。在一个嵌入式系统中,fl a sh 、16位ram、32位ram都可能存在于系统中,所以将不同功能的代码定位于特定的位置上会大大提高系统的运行效率。



关键字:ARM  启动代码  存储器 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计