th元素质量:分散加载文件

来源:百度文库 编辑:中财网 时间:2024/04/29 23:50:54

这几天没有主要的东西做,也就是东看一点西看一点。回想下这几天做了点什么东西吧。
1.看了Scatter文件和分散加载的一些东西,原来编译器的链接过程还有这么多的东西。以前弄windows编程的时候,大概只关注的写代码编译,运行就OK了,从来没有想做代码、数据在内存的存放位置。在接触了一些硬件之后,发现嵌入式和PC机就是不一样,必须合理的考虑系统的资源分配。
下面说一下我对分散加载的理解。
(1)编译后生成的映像文件一般是ELF格式的,各个中间文件(.o格式)被链接成一个文件(或者多个文件,视scatter文件的编写确定)。
(2)ARM镜像文件包含多个域,分为加载域和运行域,其中加载域包括运行域,加载域中至少有一个运行域。
(3)代码和数据分为很多段,其中包括RO段,RW段,ZI段等RO段是代码段,包括代码和LitePool等数据。RW段是可读可写段,一般是用来存储一些初始化了的变量。ZI段是被初始化为0的段。这些段必须被放在运行域中。

(4)程序如何从RESET中断向量跳到main函数呢?注意一般在复位的中断处理程序中,并不是跳到main,而是跳到__main(),这个__main中由编译器生成了一些代码,主要是负责代码的搬运,数据的初始化等,不能直接写成main(),否则会出现不可预知的错误。

 

分散加载机制使代码并不一定非要都在flash或者rom中执行,而是可以运行于更快的RAM中,这样可以带来更快的运行速率。ARM编译器提供的由__main()中的代码使程序员不必拘束于自己编写复杂的代码来实现代码的搬运以及RW、ZI段的初始化,使程序员可以将大部分的精力用于核心C代码的编写中(当然与硬件相关的初始化代码还需要自己编写)