找回密码
 注册
搜索
查看: 1018|回复: 5

[讨论] 一个指针数组定义,在编译ccs上编译有问题,但是在vc上有没有问题,请教!

[复制链接]
发表于 2005-9-22 12:40:00 | 显示全部楼层 |阅读模式
我写了一个小程序
/*三段内存地址*/
#define SDRAM1 0x80000000
#define SDRAM2 0x83400000
#define SDRAM3 0x86600000
/*定义三个分别指向单元首地址的指针
unsigned volatile int *ptr_SDRAM1 = (unsigned volatile int *)SDRAM1;
unsigned volatile int *ptr_SDRAM2 = (unsigned volatile int *)SDRAM2;
unsigned volatile int *ptr_SDRAM3 = (unsigned volatile int *)SDRAM3;
/*定义一个指针数组*/
unsigned volatile int *ptr_SDRAM[3] = {ptr_SDRAM1, ptr_SDRAM2,
ptr_SDRAM3};
void main()
{}
我在ccs上编译,总是提示指针数组定义那一行出错,error: expression must
have a constant value。我就不明白了?

然后我把指针数组定义成这样,又提示没有错了:
unsigned volatile int *ptr_SDRAM[3] = {(unsigned volatile int *)
SDRAM1, (unsigned volatile int *)SDRAM2, (unsigned volatile int *)
SDRAM3};

最后我又做了一次修改,结果又提示出错:
unsigned volatile int *ptr_SDRAM[3];
ptr_SDRAM[1]=(unsigned volatile int *)SDRAM2;

大家帮我解惑啊?:)
发表于 2005-10-24 11:19:00 | 显示全部楼层
<P>试试:</P><P>unsigned volatile int *ptr_SDRAM1 =(* (unsigned volatile int *)SDRAM1);
unsigned volatile int *ptr_SDRAM2 = (*(unsigned volatile int *)SDRAM2);
unsigned volatile int *ptr_SDRAM3 = (*(unsigned volatile int *)SDRAM3);</P>[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2005-10-25 14:33:00 | 显示全部楼层
<BLOCKQUOTE>
<TABLE width="90%" border=0 break-all? WORD-BREAK: fixed;>

<TR>
<TD width="100%" 14pt? LINE-HEIGHT: 10pt;><img src="http://www.52rd.com/bbs/Skins/Discuz/topicface/none.gif"> <B></B>
<P>试试:</P>
<P>unsigned volatile int *ptr_SDRAM1 =*((unsigned volatile int *)SDRAM1);
unsigned volatile int *ptr_SDRAM2 = *((unsigned volatile int *)SDRAM2);
unsigned volatile int *ptr_SDRAM3 = *((unsigned volatile int *)SDRAM3);</P></TD></TR></TABLE></BLOCKQUOTE>

[br]<p align=right><font color=red>+3 RD币</font></p>
点评回复

使用道具 举报

发表于 2006-9-23 14:03:00 | 显示全部楼层
楼主的意思,是定义一个指针数组,ptr_SDRAM[3],它的每个元素是一个指向预定义地址的指针。
unsigned volatile int *ptr_SDRAM1 = (unsigned volatile int *)SDRAM1;
就是给这个数组元素赋值的语句。

我记得在数组的定义中,在数组初始化时,如果采用
unsigned volatile int *ptr_SDRAM[3] = {ptr_SDRAM1, ptr_SDRAM2,ptr_SDRAM3};
的方式进行初始化,是不能使用变量的,必须使用常量。
因此在CCS编译的时候就会提示出错,而用这种方式进行初始化就没问题:

unsigned volatile int *ptr_SDRAM[3] = {(unsigned volatile int *)SDRAM1,
                                                       (unsigned volatile int *)SDRAM2,
                                                       (unsigned volatile int *)SDRAM3
                                                      };

因为SDRAM1,SDRAM2,SDRAM3是宏定义,也就是数值常量。

2楼3楼的意思弄错了吧?
(*(unsigned volatile int *)SDRAM2)就表示0x83400000地址内存储的值,这个值是
不确定的,这样定义数组,编译没问题,但是含义却不对了。
点评回复

使用道具 举报

发表于 2006-10-10 14:07:00 | 显示全部楼层
unsigned volatile int *ptr_SDRAM1 = (unsigned volatile int *)SDRAM1;[52RD.com]
unsigned volatile int *ptr_SDRAM2 = (unsigned volatile int *)SDRAM2;[52RD.com]
unsigned volatile int *ptr_SDRAM3 = (unsigned volatile int *)SDRAM3;[52RD.com]
其中volatile 编译器会对其做优化的,索性直接换成const就可以的了
点评回复

使用道具 举报

发表于 2006-10-14 11:35:00 | 显示全部楼层
4楼说的对,2楼、3楼都错了
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-5-9 04:42 , Processed in 0.066256 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表