欢迎来到站长资源网!

站长资源网

当前位置: 主页 > php >

嵌入式编程修练——C语言程序的运行q简单的c语

时间:2011-06-09 09:12来源:网友供稿 作者:站长 点击:
概说:在嵌入式系统中,步伐最终是要放置在内存中运行的,步伐的几个段,最终会转化为内存中的几个区域。深入相识这些个底层的工具有助于编著高效的代码,加快调试研发。com&kwtype=0&q
概说:在嵌入式系统中,步伐最终是要放置在内存中运行的,步伐的几个段,最终会转化为内存中的几个区域。深入相识这些个底层的工具有助于编著高效的代码,加快调试研发。com&kwtype=0&q=cms" target="_blank">cms.com&kwtype=0&q=dedecom&kwtype=0&q=cms" target="_blank">cms" target="_blank">dedecms.com&kwtype=0&q=c%25e8%25af%25ad%25e8%25a8%2580" target="_blank">c语言可执行步伐的内存布局如次图所示:组图:简单的<a href=dedecms.com&kwtype=0&q=c%25e8%25af%25ad%25e8%25a8%2580" target="_blank">c语言步伐"在内存中,从盆地址到高地址,依次是只读段,读写段,未初始化数据段,堆段,栈段。映像文件中将包罗代码段,只读数据段以及读写数据段,未初始化数据段将在步伐初始化阶段开辟,仓库将在步伐运行时动态开辟。只读区包孕了代码和只读数据,在内存区域中,代码段和只读数据段的存放形式基本没区分。对步伐运行时的内存使用,堆和栈通常为相向扩展的。堆的分配由步伐决定,栈由编译器管理。在现实的系统中,步伐有载入和运行两个概念。嵌入式系统由两种内存,一种是可以固化只读的内存(如ROM,NOR FLASH),另一种是易失的可读写的内存(如,SRAM,SDRAM)。步伐中的各个段也有需要固化和需要读写的。步伐中的各个段必须载入到内存的得当位置,步伐才可以运行。在嵌入系统中,经过编绎的dedecms.com&kwtype=0&q=c%25e8%25af%25ad%25e8%25a8%2580" target="_blank">c语言步伐可以通过操作系统运行,也能够在没有操作系统情况下运行。步伐存放的位置和运行的位置通常是纷歧样的。一般情况下经过编绎的步伐存储在FLASH或者硬盘中,在运行时需要将步伐加载到RAM中,嵌入式系统的NOR FLASH和硬盘还有一定的差别,在硬盘的步伐和须加载到RAM中才可以运行,但是在NOR FLASH中的步伐可以通过XIP(eXcutive In Place) 的方式运行。在嵌入式系统中,C语言的运行包孕3种类型:熬头种是调试阶段的步伐行,这个阶段步伐步伐的存放位置和运行位置是相同的;第二种是步伐直接在FLASH中运行(XIP);第三种是将FLASH或硬盘中的步伐完全加载到RAM中运行。在C语言的步伐运行中,存在着两种基本的内存空间,一个是步伐的存储空间,另一个是步伐的运行空间。步伐的存储空间包孕代码段,只读数据段和读写数据段,步伐的加载区域必须包孕读写数据段和未初始化的数据段。如次表所示: 段 代码 只读数据 读写数据 未初始化的数据 步伐的存储空间(ROM) 需要 不需要 步伐的只读空间(RAM) 不需要 需要由于步伐放入系统后,必须包孕所有需要的信息,代码表示要运行的机器代码,只读数据和读写数据包罗步伐中预先配置好的数据值,这些个都是需要固化存储的,但是未初始化数据没有初值,因此只消标示它们的大小,而不需要存储区域。在步伐运行的初始化阶段,将进行加载动作,此中读写数据段和未初始化数据段都是要在步伐中进行“写”操作,因此不可能放在只读的区域必须放在RAM中,当然,步伐也能够将代码和只读数据放在RAM中。在步伐运行后,堆和栈将在步伐运行历程中动态的分配和释放。1.RAM调试运行先介绍一种特殊的运行方式,即在步伐的调试阶段将主机的映像文件直接放置到目标系统的RAM中。在这类应用中,RAM既是步伐的存储空间,也是步伐的运行空间。在嵌入式系统中,这是一种常用的调试方式,而不是通常的运行方式。在通常的运行方式下,步伐运行的起始地址一般不可能是RAM。RAM在掉电之后内容会丢失,因此系统上电的时候,RAM中一般不会有有用的步伐。但是在步伐的调试阶段,可以将步伐直接载入RAM,然后在RAM的步伐载入地址入运行步伐。这是一种相对简单的形式,因为代码段的存储地址和运行地址是相同的,都是RAM中的地址,在这类情况下,步伐没有运行初始化阶段加载的问题。从主机向目标机载入步伐的时候,步伐映像文件中代码段(code或text),只读数据段,读写数据段依次载入目标系统RAM的空间中。步伐载入到目标机之后,将从代码区的地址开始敌对运行,在运行的初始化阶段,将开辟未初始化的数据区,并将其初始化为0,在运行机制时将动态开辟堆区和栈区。在没有操作系统的情况下,开辟内存的工作都是由编绎器生成的目标代码完成的,使成为事实的原理是在映像文件中加入这些个代码。主要工作包孕:在步伐运行时根据现实大小开辟未初始化的数据段;初始化栈区的指针,这个指针和物理内存的现实大小关于;在调用相关函数(malloc ,free)时使用堆区,这些个函数一般由调用库函数关现。(注:步伐直接载入RAM运行时,步伐的加载位置和运行位置是一致的,因此不存在段复制的问题,需要在初始化阶段开辟未初始化区域,在运行时使用仓库。)2.固化步伐的XIP运行固化应用是一种嵌入式系统常用的运行方式,其前提是目标代码位于目标系统ROM(FLASH)中。ROM中的区域包孕映像文件的代码段(code 或者text),只读数据段,读写数据段。以XIP(eXcutive In Place)方式运行步伐时内存布局如图所示。组图:简单的c语言步伐
  • 【转】 windows 下Apache和tomcat安装整合全过程 负载均衡session共享(原创)xapache官网
  • 试用Artisteer制作wordpress theme 模板0wordpress模板制作
  • 网站打不开是什么原因?1电脑主机打不开
  • 《冰点柠檬茶》作者:黒涩兲箜(http://blog.sina.com.cn/u/1891795170)usina.com
  • DynDNS免费动态域名解析b动态域名解析
  • (责任编辑:站长资源网)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线----------------------------
    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    评价:
    表情:
    验证码:点击我更换图片
    栏目列表
    推荐内容