paradoxfx

【原创】TI C2833x编程环境介绍---(8)创建一个链接文件(cmd)

0
阅读(2912)

一个基于CCS的工程,即使源程序和汇编程序写的再完美无瑕,编译全部通过,但是如果.cmd文件不正确、甚至是一小段变量的地址分配不合理,都无法把编译出来的对象文件.obj链接成.out输出文件。那么为何.cmd文件如此关键?下面就详细讲来。

首先通过一小段代码,看看为何要使用.cmd文件:

图1 代码与段的示例

在我们前面提到的TI COFF格式下,如图1所示的程序的不同部分被划分为不同的段(.section),比如图中画出的全局变量(.ebss)、初始值(.cinit)、局部变量(.stack)、代码(.text)等等。这样划分的好处在于,对不同的段在存储空间中(不管是存在RAM还是FLASH中)的放置十分方便、易于管理。总结一下所有的段的名字、类型、描述如下:

初始化的段

名字

描述

链接位置

.text

代码

FLASH

.cinit

全局与静态变量的初始值

FLASH

.econst

常数

FLASH

.switch

Switch表达式的表格

FLASH

.pinit

全局构造函数表(C++里面的constructor)

FLASH

未初始化的段

名字

描述

链接位置

.ebss

全局与静态变量

RAM

.stack

堆栈空间

低64K字的RAM

.esysmem

Far malloc函数的存储空间

RAM

在使用仿真器的情况下,初始化的部分可以链接到RAM中,因为仿真器可以加载RAM(所以我们在用仿真器调试的情况下,.cinit这样的段可以读取到CCS上位机环境中)。

通过上面的方法,C程序的不同段在目标系统中被放置在不同的存储区域中,这样很容易区分代码、常量、变量,因为不同的端都可以被放置在恰当的内存位置,方便我们的观察与调试。就像在整理实验室时,把同类的物品归类在同一个抽屉里面,这就是某种程度上的“条理”吧。

Baidu
map