设为首页 加入收藏

TOP

13.4.1 RAM调试运行
2013-10-12 06:50:36 】 浏览:202
Tags:13.4.1 RAM 试运行

13.4.1  RAM调试运行

本节介绍程序的一种特殊的运行方式,即在程序的调试阶段将主机的映像文件直接放置到目标系统的RAM中。在这种应用中,RAM既是程序的存储空间,也是程序的运行空间。

在嵌入式系统中,这是一种常用的调试方式,而不是通常的运行方式。在通常的运行方式下,程序运行的起始地址一般不可能是RAM。RAM在掉电之后内容会丢失,因此系统上电的时候,RAM中一般不会有有效的程序。但是在程序的调试阶段,可以将程序直接载入RAM,然后在RAM的程序载入地址处运行程序。

嵌入式系统RAM中的调试程序的内存布局如图13-6所示。

 
(点击查看大图)图13-6  RAM中的调试程序的内存布局

这是一种相对简单的形式,因为代码段的存储地址和运行地址是相同的,都是RAM(SDRAM或者SRAM)中的地址。在这种情况下,程序没有运行初始化阶段加载的问题。

从主机向目标机载入程序的时候,程序映像文件中代码段(code或text)、只读数据段、读写数据段依次载入目标系统RAM(SDRAM或者SRAM)的空间中。

程序载入到目标机之后,将从代码区的地址开始运行,在运行的初始化阶段,将开辟未初始化数据区,并将其初始化为0,在运行时将动态开辟堆区和栈区。

在没有操作系统的情况下,开辟内存的工作都是由编译器生成的代码完成的,实现的原理是在映像文件中加入这些代码。主要工作包括:在程序运行时根据实际大小开辟未初始化的数据段;初始化栈区的指针,这个指针和物理内存的实际大小有关;在调用相关函数(malloc、free)时使用堆区,这些函数一般由调用库函数实现。表13-4列出了C语言程序在RAM中的调试过程。

表13-4  C语言程序在RAM中的调试过程

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

涉及的部分

主要工作

程序的映像

代码段(Code

只读数据段(RO Data

读写数据段(RW Data

将程序放置在RAM

初始化阶段

未初始化数据段(BSS

开辟BSS段并且清零

运行阶段

代码段(Code

只读数据段(RO Data

读写数据段(RW Data

未初始化数据段(BSS

堆(heap

栈(stack

运行RAM代码段中的程序

,动态地在RAM中开辟堆和栈

知识点:程序直接载入RAM运行时,程序的加载位置和运行位置是一致的,因此不存在段复制的问题,需要在初始化阶段开辟未初始化区域,在运行时使用堆栈。


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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目