打印

#pragma DATA_SECTION的解释 .

[复制链接]
3228|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangmangui|  楼主 | 2016-8-11 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ti的帮助文档里是这么讲的:
The DATA_SECTION pragma allocates space for the symbol in a section called section name.
The syntax for the pragma in C is:
#pragma DATA_SECTION (symbol, "sectionname");
The syntax for the pragma in C++ is:
#pragma DATA_SECTION ( "sectionname");
The DATA_SECTION pragma is useful if you have data objects that you want to link into an area separate from the .bss section.
This directive is illustrated in the following example.
Using the DATA_SECTION Pragma
a)  C source file
#pragma DATA_SECTION(bufferB,"my_sect")
char bufferA[512];
char bufferB[512]:

b) C++ source file
char bufferA[512];
#pragma DATA_SECTION("my_sect")
char bufferB[512];

c) Assembly source file
   .global _bufferA
         .bss    _bufferA,512,4
         .global _bufferB
_bufferB: .usect  "my_sect",512,4
我理解的意思是:
  定义一个数据段:  
         段名为:    "section name"
         段的内容在:  symbol  里
在CCS编程中,如果我们不指定变量的存放位置,编译器会自动的给变量分配一个位置,但是如果有的时候需要把变量放在一个特定的空间内,我们应该如何操作呢,CCS提供了如下的两个指令
#pragma CODE_SECTION
#pragma DATA_SECTION
其中data_section是针对数据空间的,code_section是针对程序空间的,具体的使用办法是
#pragma DATA_SECTION(bufferB, ”my_sect”)
char bufferB[512];
在.cmd文件中建立对应的section就可以使用了.

MEMORY
{
PAGE 1: spacename : origin = 0x...., length0x..
}
SECTIONS
{
   .my_sect  : {} >spacename PAGE1
}

相关帖子

沙发
zhangmangui|  楼主 | 2016-8-11 22:14 | 只看该作者
对于汇编器,它会自动创建.text, .bss和.data三个段。我们可以使用#pragma CODE_SECTION和#pragma DATA_SECTION来创建更多的段。  默认情况下,各个段所分配的存储空间配置如下(可根据需要进行更改):
  最后,以一个ADC寄存器对应的内存地址分配的例子,来看看完成的cmd文件是如何完成的(事实上所有寄存器的内存地址分配在TI的外设和头文件包中已经帮我们做好了,这里是个演示)。
  首先,在使用寄存器(或者自定义的变量)的头文件或者源程序里,为寄存器(或者自定义的变量)指定一个自定义的段:
  #ifdef __cplusplus
  #pragma DATA_SECTION("AdcRegsFile")
  #else
  #pragma DATA_SECTION(AdcRegs,"AdcRegsFile");
  #endif
  volatile struct ADC_REGS AdcRegs; //使得结构体被分配在指定的段中
  然后,在cmd文件中,在SECTIONS下把AdcRegsFile这个段分配到ADC这块内存区域中,并在MEMORY中定义ADC这块内存区域的起始位置和长度。
  MEMORY
  {
  PAGE 0: /* Program Memory */
  /* 省略不相关内容的显示 */
  PAGE 1: /* Data Memory */
  /* 省略不相关内容的显示 */
  ADC : origin = 0x007100, length = 0x000020 /* ADC registers */
  /* 省略不相关内容的显示 */
  }
  SECTIONS
  {
  /* 省略不相关内容的显示 */
  AdcRegsFile : > ADC, PAGE = 1
  /* 省略不相关内容的显示 */
  }
  以上是一个自定义段并制定内存区域的完整例子。如果不需要这样的自定义,则可以不去管它,使用现有的,比如某个例子中可以使用的cmd文件就可以了。

使用特权

评论回复
板凳
tomyoct| | 2016-8-12 22:37 | 只看该作者
DSP太复杂了,还是arm简单,学会应用就好了,不用考虑这些boot的问题。

使用特权

评论回复
地板
zhangmangui|  楼主 | 2016-8-13 22:20 | 只看该作者
tomyoct 发表于 2016-8-12 22:37
DSP太复杂了,还是arm简单,学会应用就好了,不用考虑这些boot的问题。

其实针对控制器来说    不算那么复杂  
麻烦的是算法级确实需要深度

使用特权

评论回复
5
chybeyond| | 2016-8-14 18:56 | 只看该作者
学习了

使用特权

评论回复
6
FCCdsp| | 2016-8-18 21:39 | 只看该作者
学习了,不过感觉好复杂的样子

使用特权

评论回复
7
wangdezhi| | 2016-8-18 22:05 | 只看该作者
zhangmangui 发表于 2016-8-11 22:14
对于汇编器,它会自动创建.text, .bss和.data三个段。我们可以使用#pragma CODE_SECTION和#pragma DATA_SEC ...

cmd的分配

使用特权

评论回复
8
wangdezhi| | 2016-8-18 22:06 | 只看该作者
在进行大量计算的时候,还得重新写。

使用特权

评论回复
9
Soraka| | 2016-8-31 21:48 | 只看该作者
把变量放在一个特定的空间内,实用

使用特权

评论回复
10
长的帅怪我落| | 2016-9-1 11:25 | 只看该作者
反正我在用ccs6编译的时候,他是不支持#pragma pack的,这个困扰了我好几天,最后没办法,我修改了程序结构才没用这句

使用特权

评论回复
11
minzisc| | 2016-9-2 23:19 | 只看该作者
cmd的编写

使用特权

评论回复
12
minzisc| | 2016-9-2 23:20 | 只看该作者
里面的空间调节不知道怎么弄

使用特权

评论回复
13
biechedan| | 2016-9-3 11:06 | 只看该作者
有没有相关教程?

使用特权

评论回复
14
biechedan| | 2016-9-3 11:10 | 只看该作者
c5000 c6000与2000的有不一样的吗?

使用特权

评论回复
15
mituzu| | 2016-9-4 22:50 | 只看该作者
版主弄个cmd的教程吧。

使用特权

评论回复
16
mituzu| | 2016-9-4 22:51 | 只看该作者
现在还是不会修改cmd的相关参数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:欢迎进入【TI DSP 论坛】 & 【DSP 技术】           TI忠诚粉丝!

934

主题

26373

帖子

585

粉丝