连接命令文件.cmd

文章介绍了如何在TIDSP编程中使用#pragmaDATA_SECTION指令来控制变量的存储位置,尤其是在内存映射中将全局变量或寄存器文件分配到特定数据段,如RAM区域。同时引用了TI技术文档作为参考资源。
摘要由CSDN通过智能技术生成

编译器

编译器产生可以重新定位的数据和代码模块称为段。

  • 默认将全局和动态变量分配到.ebss或bss段。如SciaRegs和SicbRegs.
  • 寄存器文件变量采用# pragma DATA_SECTION命令分配到数据空间(.ebss或bss段)

#pragma DATA_SECTION

利用CCS进行DSP编程时,如果不指定变量的存储位置,那么编译器会自动给变量分配存储位置,但是,有些时候,需要将某个变量存放到某个特定的位置,这个时候就可以利用#pragma DATA_SECTION指令了

第一步,利用#pragma DATA_SECTION指令将变量xxxCmdBuf关联到SECTIONS“ramdata”;

#pragma DATA_SECTION(xxxCmdBuf,“ramdata”);
uint16_t xxxCmdBuf[4];

第二步,修改CMD文件使得“ramdata”映射到指定的地址空间。

MEMORY
{
PAGE 0 :   /* Program Memory */
......

PAGE 1 :   /* Data Memory */
......
RAML_XXXCMD     : origin = 0x00BFF0, length = 0x000004     
}
......

SECTIONS
{
......
ramdata         : > RAML_XXXCMD,   PAGE = 1
......
}

只需完成上述简单的两步就可以将某个变量指定到特定的位置。

TI 的技术文档《Programming TMS320x28xx and 28xxx Peripherals in C/C++》(SPRAA85D–November 2005–Revised January 2013)对该方法也有相应的描述

SECTIONS
{
/* Allocate program areas: */
......
ramfuncs       : LOAD = FLASHD, 
                 RUN = RAML0_1,                                    
                 LOAD_START(_RamfuncsLoadStart),
                 LOAD_END(_RamfuncsLoadEnd),
                 RUN_START(_RamfuncsRunStart),
                 PAGE = 0

上面代码中, 
LOAD = FLASHD, //指定了要加载程序在Flash里的地址段 
RUN = RAML0_1, //指定了在RAM里运行程序的RAM地址段 
LOAD_START(_RamfuncsLoadStart), // 所要加载程序在Flash里的初始地址 
LOAD_END(_RamfuncsLoadEnd), // 所要加载程序在Flash里的结束地址 
RUN_START(_RamfuncsRunStart), // 程序运行的起始地址

例# pragma

#pragma 可将变量分配到数据段
如将变量SicaRegs分配到命为SIciaRegsFile的数据段。

  • 然后这两个数据段直接映射到SCI寄存器所占的存储空间。
# ifdef  _cplusplus
# pragma DATA_SECTION("SciaRegsFile")
#else
# pragma DATA_SECTION(SciaRegs,"SciaRegsFile")
#endif
volatile struct SIC_REGS SciaRegs;

将外设寄存器变量分配到数据daunt。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万码无虫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值