13.4.2 固化程序的XIP运行

2013-10-12 06:50:42 · 作者: · 浏览: 91

13.4.2  固化程序的XIP运行

固化应用是一种嵌入式系统常用的运行方式,其前提是目标代码位于目标系统ROM(Flash)中。ROM中的区域包括映像文件的代码段(code或text)、只读数据段(RO Data)、读写数据段(RW Data)。

以XIP(在位置执行)方式运行程序时内存布局如图13-7所示。

代码的运行也是在ROM(Flash)中,因此,在编译过程中代码的存储地址和运行地址是相同的,由于上电时需要启动,因此该代码的位置一般是(0x0)。

在这种应用中,一件重要的事情就是将已初始化读写段的数据从Flash中复制到SDRAM中,由于已初始化读写段既需要固化,也需要在运行时修改,因此这一步是必须有的,在程序的初始化阶段需要完成这一步。

 
(点击查看大图)图13-7  XIP运行程序时的内存布局

一般来说,在编译过程中需要定义读写段和未初始化段的地址。在程序中可获取这些地址,然后就可以在程序的中加入复制的代码,实现读写段的转移。表13-5列出了C语言程序的XIP运行过程。

表13-5  C语言程序的XIP运行过程

    < xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

涉及的部分

主要工作

程序的映像

代码段(Code

只读数据段(RO Data

读写数据段(RW Data

程序放置在Flash

初始化阶段

读写数据段(RW Data

未初始化数据段(BSS

复制读写数据段到RAM

开辟未初始化段并且清零

运行阶段

代码段(Code

只读数据段(RO Data

读写数据段(RW Data

未初始化数据段(BSS

堆(heap

栈(stack

运行Flash代码段中的程序,

动态地在RAM中开辟堆和栈

知识点:程序在ROM或者Flash中以XIP形式运行的时候,不需要复制代码段和只读数据段,但是需要在RAM中复制读写数据段,并另辟未初始化数据段。