2 ARM 程序的工作过程
首先由各种 source file 经过编译产生 object 文件,然后 object 文件经过链接生成 Image 文件,然后通过 ICE 的方法,根据描述文件的指定下载到目标板上的固态存储器指定地址当中,比如 flash , EEPROM, ROM 等等。在程序执行之前,根据某些描述文件,将需要读写数据的部分读出放入动态存储器比如 RAM 当中,然后程序从 ROM 开始执行。或者有时为了提高程序的运行速度,也可以将所有的程序 ( 有一些 root 的部分除外,以后会提及 ) 通过一个描述文件放入指定的 RAM 当中,然后程序从 RAM 开始执行,但是这样会耗费大量的动态存储器,所以大部分程序会取折中的方法,将需要快速运行的部分和要读写的部分放入 RAM 中 ( 一般读固态存储器的过程和动态存储器的过程是一样的,但是写就不同了,所以读写的部分一定要放到 RAM 中 ) ,而只读的部分和对速度要求不是那么高的部分放入固态存储器。同时 ARM 结构的异常向量表规定放在地址为 0x00000000 开始的地址空间上,而一般的 CPU 为了提高异常相应速度,会将这个向量段 remap 到其他的 RAM 当中,所以在描述文件当中必须精确指定异常向量跳转程序的地址到 remap 的地方。
在 application 程序执行前,还需要由一些文件描述 application 程序执行的环境。比如系统工作时钟,总线频率。现在一般嵌入式编程语言为 C,C++ 等。如果在使用它们的时候使用的 runtime-library ,那么在程序执行前还需要为这些库函数初始化 heap 。然后 ARM 可能工作在不同的模式,还需要为不同的工作模式设置 stack 。这样,描述链接地址的文件,以及在 application 运行前所有的初始化程序就是 startup 程序组。
3 STARTUP 分类
这样,将 startup 程序所完成的功能分类。一类是链接地址描述,一类是各种初始化的程序。根据不同的应用,描述文件和初始化程序的内容以及结构和复杂程度都会不同。但是基本上,它们都必须实现以下功能。
3.1 描述文件实现功能
描述文件可以是链接命令行上简单的几个字符,也可以是一个非常复杂的文件,但是它必须完成如下功能:指定程序下载的地址;指定程序执行的地址。
3.2 初始化程序实现的功能
初始化程序根据不同的应用,其结构和复杂度也不同,但是它必须完成如下基本功能:异常向量初始化;内存环境初始化;其他硬件环境初始化。
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |