TI CCS CMD连接器命令文件说明

一般概念介绍

1.程序段

观察 C 程序,您将会注意到其中包含代码和不同类型的数据(全局,局部等)。所有代码由不同部
分组成,这些部分称为程序段。所有默认程序段名称均以点开头,并且通常为小写。编译器为初始
化和未初始化的程序段设定默认程序段名称。例如,x 和 y 为全局变量,它们位于程序段 .ebss。
其中 2 和 7 为初始值,它们位于程序段 .cinit。局部变量位于程序段 .stack,而代码则位于程序
段 .txt。
在这里插入图片描述
在 TI 代码生成工具(与基于 COFF(通用对象文件格式)的工具集一样)中,这些不同的程序部分
被称为程序段。程序代码和数据分成多个程序段可以更加灵活,这样方便用户将代码部分放入 ROM,
将变量放入 RAM。上图说明了四种程序段:
• 全局变量
• 全局变量的初始值
• 局部变量(即,堆栈)
• 代码(实际指令)

下面是由编译器创建的程序段列表。表中列出了它们的相关说明,并提供了编译器定义的程序段名
称。这是编译器默认程序段名称的一小部分。最上面一组是初始化程序段,它们连接至闪存。在我
们之前的代码示例中,可以看到 .txt 用于代码,而 .cinit 用于初始值。最下面一组是未初始化程序
段,它们连接至 RAM。而在我们之前的示例中,可以看到 .ebss 用于全局变量,.stack 用于局部
变量。

C 程序的程序段必须位于目标系统的不同存储器中。这对创建单独的代码、常量和变量程序段非常
有利。使用这种方法可以将程序段连接(放置)至目标嵌入式系统中相应的存储器位置。通常,它
们按如下方法放置:
程序代码 (.text)
程序代码包括用于操作数据、初始化系统设置等功能的指令序列。程序代码必须在系统复位(上电)
之前定义。由于这一基本系统限制,通常需要将程序代码放入非易失性存储器,例如 FLASH 或
EPROM。
常量(.cinit – 初始化数据)
初始化数据是复位时定义的数据存储器位置。其中包括常量或变量初始值。与程序代码相似,常量
数据需要在系统复位之前有效。通常可在 FLASH 或 EPROM(非易失性存储器)中找到。
变量(.ebss – 未初始化数据)
未初始化数据的存储位置可以在运行系统执行期间通过程序代码操作更改。与程序代码或常量不同,
未初始化数据或变量必须位于易失性存储器中,例如 RAM。这些存储器可以修改或更新,用于支持
各个变量在数学公式、高级语言等方面的使用。各个变量必须通过指令声明,以便保留存储空间来
存储变量值。就其本质而言,无需分配变量值,可以在运行时直接通过程序加载变量在这里插入图片描述
C 程序的程序段必须位于目标系统的不同存储器中。这对创建单独的代码、常量和变量程序段非常
有利。使用这种方法可以将程序段连接(放置)至目标嵌入式系统中相应的存储器位置。通常,它
们按如下方法放置:
程序代码 (.text)
程序代码包括用于操作数据、初始化系统设置等功能的指令序列。程序代码必须在系统复位(上电)
之前定义。由于这一基本系统限制,通常需要将程序代码放入非易失性存储器,例如 FLASH 或
EPROM。
常量(.cinit – 初始化数据)
初始化数据是复位时定义的数据存储器位置。其中包括常量或变量初始值。与程序代码相似,常量
数据需要在系统复位之前有效。通常可在 FLASH 或 EPROM(非易失性存储器)中找到。
变量(.ebss – 未初始化数据)
未初始化数据的存储位置可以在运行系统执行期间通过程序代码操作更改。与程序代码或常量不同,
未初始化数据或变量必须位于易失性存储器中,例如 RAM。这些存储器可以修改或更新,用于支持
各个变量在数学公式、高级语言等方面的使用。各个变量必须通过指令声明,以便保留存储空间来
存储变量值。就其本质而言,无需分配变量值,可以在运行时直接通过程序加载变量。

接下来,我们需要将编译器创建的程序段放到相应的存储器空间。未初始化程序段 .ebss 和 .stack 需
要放入 RAM,初始化程序段 .cinit 和 .txt 需要放入闪存。
在这里插入图片描述
连接代码分三步进行:

  1. 定义不同区域的存储器(片上 RAM、闪存和外部存储器)。
  2. 说明各个程序段对应的具体存储器区域
  3. 使用“建立 (build)”或“重新建立 (rebuild)”运行连接器

2.连接器命令文件 (.cmd)
连接器连接所有输入文件中的各个程序段,根据连接器命令文件中 MEMORY 和 SECTIONS 命令
指定的长度和位置为各个程序段分配存储器。连接器命令说明物理硬件存储器并指定各个程序段在
存储器中的位置。在连接过程中创建的文件为 .out 文件。该文件将加载到微控制器中。我们也可以
选择生成一个 .map 文件。此映射文件汇总连接过程,例如绝对地址和各个程序段的大小。

在这里插入图片描述
存储器映射说明
MEMORY 程序段说明了目标系统至连接器的存储器配置。
格式为: Name:origin = 0x???, length = 0x???
例如,如果从存储器位置 0x080000 开始放置一个 256Kw 闪存,它将读取:
MEMORY
{
FLASH: origin = 0x080000 , length = 0x040000
}
每个存储器段均使用上述格式定义。如果添加 RAMM0 和 RAMM1,则应为:
MEMORY
{
RAMM0: origin = 0x000000 , length = 0x0400
RAMM1: origin = 0x000400 , length = 0x0400
}

DSP(TMS320) cmd示例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

TMS570 cmd示例

在这里插入图片描述

其中使用了fill以0xFFFFFFFF填充未使用的可编程空间,用以避免TMS570的ECC错误。其中还可以有如下配置:
在这里插入图片描述

具体的cmd使用可见TI ARM/C28X Assembly Language Tools vxxxxx

总结:在基本使用CCS编程是大多情况是不需要修改文件内容,个人在使用中,只在bootloader开发,及指定库位置是使用,可以说CMD文件非常灵活。

以上资料收集整理来自TI文档。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值