小弟有个简单的问题,关于#pragma
#ifdef __cplusplus
#pragma DATA_SECTION(\"AdcRegsFile\"
#else
#pragma DATA_SECTION(AdcRegs,\"AdcRegsFile\"
;
#endif
volatile struct ADC_REGS AdcRegs;
诸如此类。
我理解为,将那些寄存器的定义类和相关的段对应起来。
但是我自己做了一个程序,我只是把那个DSP281x_GlobalVariableDefs.c通过菜单project->add file tu project。出现问题是:
>> warning: creating output section FlashRegsFile without SECTIONS specification
诸如此类的警告信息。
我想请问,这种信息到底是什么意思,怎么样才能够解决。
还有,这些段要跟相应的地址对应,但是为什么没有这样的语句呢?
#pragma DATA_SECTION
在C和C++下的参数是不一样的,所以就要判断一下
至于DATA_SECTION()这个函数的意思就是将某个数组(反正是某些地址)
放在指定的存储空间里面
比如你定义了数组b[],然后要将这个数组放在片内就
#pragma DATA_SECTION(b,\"XXXX\"
;
其中XXXX就是片内的那个标志--这个是c下面的
那么xxxx的标号是怎么定义的呢?
我知道那个xxxx的意思。
但是,ti 给的例子中没有定义什么AdcRegsFile段,我找了很久都没有看到。
那是不是这个段定义是在lib文件中的?
我就想知道rts2800_ml.lib文件中到底有些什么东西?
如果真的像楼上大哥说得那样我就安心了。但是ti给出的cmd文件是这样的:
MEMORY
{
PAGE 0 :
RAMM0 : origin = 0x000000, length = 0x000400
BEGIN : origin = 0x3F8000, length = 0x000002
PRAMH0 : origin = 0x3F8002, length = 0x000FFE
RESET : origin = 0x3FFFC0, length = 0x000002
PAGE 1 :
/* For this example, H0 is split between PAGE 0 and PAGE 1 */
RAMM1 : origin = 0x000400, length = 0x000400
DRAMH0 : origin = 0x3f9000, length = 0x001000
}
SECTIONS
{
codestart : > BEGIN, PAGE = 0
ramfuncs : > PRAMH0 PAGE = 0
.text : > PRAMH0, PAGE = 0
.cinit : > PRAMH0, PAGE = 0
.pinit : > PRAMH0, PAGE = 0
.switch : > RAMM0, PAGE = 0
.reset : > RESET, PAGE = 0, TYPE = DSECT /* not used, */
.stack : > RAMM1, PAGE = 1
.ebss : > DRAMH0, PAGE = 1
.econst : > DRAMH0, PAGE = 1
.esysmem : > DRAMH0, PAGE = 1
}
大家可以看到根本没有我上面的离子所说的AdcRegsFile段。我就很纳闷了。怎么会让寄存器的c定义和这些地址联系起来呢。由哪位高人能够解出其中真妙。我感觉,中国总是被外国人糊弄。