设为首页 加入收藏

TOP

13.4.2 固化程序的XIP运行
2013-10-12 06:50:42 来源: 作者: 【 】 浏览:87
Tags:13.4.2 固化 程序 XIP 运行

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中复制读写数据段,并另辟未初始化数据段。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇13.4 C语言程序的运行 下一篇13.4.3 固化程序的加载运行

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: