上年,曾经在“eCos内存布局文件详细介绍”一文中介绍过eCos的内存布局文件即ldi文件。经过一年多时间的积累和沉淀,发现对eCos的内存布局文件有了新的更加深刻地理解和认识。

下面对eCos的内存布局文件进行具体的阐述。阅读前,建议大家先阅读“eCos内存布局文件详细介绍”一文,两文对比,形成自己的认识。

移植eCos前,了解内存布局文件十分重要。它关乎移植后的eCos程序能否正常启动。

内存布局文件概述

eCos使用后缀为.ldi的文件来描述一个目标板的内存布局,包括存储器RAM、flash等的配置、section和堆栈的定义,这个ldi文件称为内存布局文件,位于HAL的平台模块内,因此它属于平台特征的一部分。与ldi文件一起的还有一个同名但后缀为.h文件,称之为内存布局头文件。

ldi文件实际上是一个链接器脚本文件,在eCos配置工具中是这样描述这个文件的:Memory layout linker Script fragment(内存布局链接器脚本片段)。

我们知道,链接器脚本采用链接器命令语言编写,用于控制程序文件的链接,主要目的是描述了如何把输入文件中的段(section)映射到输出文件中,并控制输出文件的存储布局。

链接器脚本内容依赖于处理器体系架构,因此每一种处理器体系都应有相应的链接器脚本。在eCos中,它把链接器脚本中关于各section的具体定义封装在体系架构模块中,并以宏的形式提供给ldi文件使用。这些被封装的链接器脚本名称格式为:处理器名称.ld,如ARM处理器的链接脚本文件:arm.ld、cortex-m处理器的链接脚本文件:cortexm.ld等。对于目标程序各section的定义和组织形式则由ldi文件进行定义和描述。

一般而言,程序链接时都是使用链接器默认的链接脚本。但链接eCos时,必须使用eCos的链接脚本。值得提及的是,ldi文件不是链接eCos时最终可用的链接脚本。当eCos被编译后,ldi文件被转换成一个名为target.ld的链接脚本文件,这个才是链接eCos时最终可用的链接脚本。下图展示了ldi文件与各链接脚本文件的关系。

ldi文件与各链接脚本文件的关系

下面以stm3210e eval评估板的内存布局文件进行详细说明。

内存布局文件位置

内存布局文件一般位于“平台模块目标板\ecos版本号\include\pkgconf”目录下。所以stm3210e eval评估板的内存布局文件位置为:

hal\cortexm\stm32\stm3210e_eval\current\include\pkgconf

所有的内存布局文件如下图所示。

stm3210e eval评估板的内存布局文件

内存布局文件名称

内存布局文件名称遵循一定的格式:“mlt_处理器体系架构名称_目标板名称_启动方式”,其中:

l mlt:代表eCos memory layout。

l 启动方式:一般有ROM、RAM、SRAM、JTAG等几种,表示eCos程序是从哪里开始启动运行。对于stm3210e eval目标板,ROM代表从微控制器内部flash启动;RAM代表从微控制器片外SRAM启动;SRAM代表从微控制器内部SRAM启动。

从上面可看出,每种启动方式都对应一个内存布局文件。

由于内容比较多,分几篇文章进行阐述。下篇文章着重对内存布局文件的内容进行详细分析。

注:本文节选自我正在编写的《嵌入式eCos开发详解》教程。

» 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
» 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
分享到:

 Leave a Reply

(必须)

(我会替您保密的)(必须)

*

   
© 2012 velep.com | reille blog | 管理| 粤ICP备12094833号-2| 谷歌地图| 百度地图| Suffusion theme|Sayontan Sinha

无觅相关文章插件,快速提升流量