#pragma DATA_SECTION 和CMD文件

本文深入探讨了在CCS编程环境中,如何通过`#pragmaCODE_SECTION`和`#pragmaDATA_SECTION`指令灵活地为变量分配存储空间。详细介绍了数据空间和程序空间的管理方式,包括如何在.cmd文件中建立对应section,以及CMD文件在链接器配置中的作用,特别是如何通过MEMORY和SECTIONS部分精确指定存储模型。
摘要由CSDN通过智能技术生成

一、

CCS编程中,如果我们不指定变量的存放位置,编译器会自动的给变量分配一个位置,但是如果有的时候需要把变量放在一个特定的空间内,我们应该如何操作呢,CCS提供了如下的两个指令
#pragma CODE_SECTION
#pragma DATA_SECTION
其中data_section是针对数据空间的,code_section是针对程序空间的,具体的使用办法是
#pragma DATA_SECTION(bufferB, ”my_sect”)
char bufferB[512];
.cmd文件中建立对应的section就可以使用了。

注意:(1)不能在函数体内声明。(2)必须在定义和使用前声明

二、关于CMD文件

CMD的专业名称叫链接器配置文件,是存放链接器的配置信息的,我们简称为命令文件。存储模型:c程序的代码和数据如何定位
系统定义
.cinit 
存放程序中的变量初值和常量
.const 
存放程序中的字符常量、浮点常量和用const声明的常量
.switch 
存放程序中switch语句的跳转地址表
.text 
存放程序代码
.bss 
为程序中的全局和静态变量保留存储空间
.far 
为程序中用far声明的全局和静态变量保留空间
.stack 
为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果CMD 它是用来分配romram空间用的,告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的romram.放用户程序的地方也不尽相同.所以要根据芯片进行修改.分两部分.MEMORYSECTIONS.

1MEMORY是用来指定芯片的romram的大小和划分出几个区间.

例如:

MEMORY
{
    VECS:       o =0x10800000  l = 0x00000200
    BOOT:       o =0x10800200  l = 0x00000200
    IRAM:       o =0x10800400  l = 0x0001FA00
    DDR2:       o =0x80000000  l = 0x10000000
}

其中ol参数反映了该区间的起始地址和长度。

2SECTIONS

在程序里添加下面的段名如.vectors.用来指定该段名以下,另一个段名以上的程序放到“>”符号后的空间名字所在的地方。

例如

SECTIONS
{
    .bss       >   IRAM
    .cinit      >   IRAM
    .cio       >   IRAM
    .const      >   DDR2
    .data       >  IRAM
    .far       >   IRAM
    .stack      >   IRAM
    .switch     >   IRAM
    .sysmem     >   IRAM
    .text       >  IRAM
    .ddr2       >  DDR2
}

3

存储模型:c程序的代码和数据如何定位
系统定义
.cinit 
存放程序中的变量初值和常量
.const 
存放程序中的字符常量、浮点常量和用const声明的常量
.text 
存放程序代码(程序存储段)
.bss 
未初始化变量存储段
.far 
为程序中用far声明的全局和静态变量保留空间
.stack 
为程序系统堆栈保留存储空间,用于保存返回地址、函数间的参数传递、存储局部变量和保存中间结果
.sysmem 
用于程序中的malloc calloc 、和realoc 函数动态分配存储空间

.sysinit 启动代码存储段

注意:对于不同平台,存储段定义不同,上述对C6000

 

4、可以直接在CMD文件中写编译命令

如:

-l rts2800_ml.lib 连接系统文件rts2800_ml.lib
-o filename.out 
最终生成的二进制文件命名为filename.out
-m filename.map 
生成映射文件filename.map

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值