TI中文支持网
TI专业的中文技术问题搜集分享网站

C6455 变量地址冲突

大家好,我遇到个奇怪的问题。

我的环境是CCS5.5, 编译器是cgt v7.4,CSL包是03.00.10.02。

我的工程只有一个c文件。

文件开头定义了一个全局变量: 

CSL_GpioHandle hGpio_tx;

执行我的GPIO初始化函数里的

hGpio_tx = CSL_gpioOpen(&gpioObj, CSL_GPIO, NULL, &status);

语句时,可以看到,hGpio_tx指向了0x0080EAA0,里面成员的地址分别是0x0080EAA0,0x0080EAA4,0x0080EAA6。如下图:

当执行到另一个函数 Gpio_Tx_Set时,如下图:

可以看到,该函数传递的参数 value的地址也是0x0080EAA4,pinNum地址是0x0080EAA8,…

明显与前面的地址重复了,而且也会同时修改。

这是怎么造成的呢?

附件是我的工程,还请各位高手能指点一二!

0871.MyTimerUart.zip

Shine:

您可以看一下map文件里地址分配是否正确。

user1315332:

回复 Shine:

请问一下map文件怎么用呢,有相关文档吗?
谢谢!

user1315332:

回复 Shine:

你好,我发现CSL_gpioOpen函数返回的handle对应的对象是分配在stack区的,这是不是意味着该对象会被自动释放?所有后面的函数会将其覆盖呢?我是否应该将该对象复制出来使用?

Shine:

回复 user1315332:

用CCS打开,可以到各个段,变量分配的地址。
map file— An output file, created by the linker, which shows the memory configuration, section composition, section allocation, symbol definitions and the addresses at which the symbols were defined for your program.

Shine:

回复 user1315332:

自动分配,如果stack足够大的话,不会被覆盖。

赞(0)
未经允许不得转载:TI中文支持网 » C6455 变量地址冲突
分享到: 更多 (0)