【原创】TI C2833x编程环境介绍---(8)创建一个链接文件(cmd)
0赞一个基于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程序的不同段在目标系统中被放置在不同的存储区域中,这样很容易区分代码、常量、变量,因为不同的端都可以被放置在恰当的内存位置,方便我们的观察与调试。就像在整理实验室时,把同类的物品归类在同一个抽屉里面,这就是某种程度上的“条理”吧。