首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

*(volatile unsigned short *)0x20000000背后的意义是啥?该如何处理

2012-02-09 
*(volatile unsigned short *)0x20000000背后的意义是啥?从8*8LED点阵灯程序中看到的。[解决办法] volatile

*(volatile unsigned short *)0x20000000背后的意义是啥?
从8*8LED点阵灯程序中看到的。

[解决办法]
volatile 表示 禁止编译器优化
[解决办法]
volatile 定义为一个已初始化的全局变量
unsigned short * 的意思是定义一个2个字节的地址指针
连起来就是在0x20000000地址位置上输出一个2个字节长的数据。我想你0x20000000地址应该是一个LED点阵灯的片选信号。
*(volatile unsigned short *)0x20000000 = 0x0;可能是点亮led或关闭led
[解决办法]
volatile 可以不去管

( unsigned short * )是声明了一个 指针,

指针本身就是数值,

unsigned short *p = ( unsigned short * )0x20000000;
*p = 0; 与 *( unsigned short * )0x2000000 = 0;是一样的。

[解决办法]

探讨
(volatile unsigned short *)0x20000000=XXX 
-->0x20000000被定义成一个指针,指向xxx地址。
*(volatile unsigned short *)0x20000000=XXX 
-->0x20000000指向的地址的值是xxx。

现在脑子比较乱,想不过来,上面2行各代表什么意思呢?

[解决办法]
探讨
"控制该显示模块的I/O地址为0x20000000"
既然如此,那就应该是(volatile unsigned short *)0x20000000=XXX 啊。
可为什么写成*(volatile unsigned short *)0x20000000=XXX 才行呢?

ARM9-2410的板子

[解决办法]
探讨
"控制该显示模块的I/O地址为0x20000000"
如果不看代码,我直接理解为地址0x20000000是控制该显示模块的I/O地址,这个地址内的值被修改了的话就改变了点阵灯的显示。
所以应该是(volatile unsigned short *)0x20000000=XXX
而按照楼上各位的说法,地址0x20000000内的值存放的是控制该显示模块的I/O地址。不是吗?

[解决办法]
探讨
1 (volatile unsigned short *)0x20000000=XXX
2 *(volatile unsigned short *)0x20000000=XXX
可是2在语义上应该是XXX存放在0x20000000内值所指向的地址里啊。和1是不同的地址啊!
还是不明白。。。

[解决办法]
探讨
"控制该显示模块的I/O地址为0x20000000"
既然如此,那就应该是(volatile unsigned short *)0x20000000=XXX 啊。
可为什么写成*(volatile unsigned short *)0x20000000=XXX 才行呢?

ARM9-2410的板子

[解决办法]
volatile 是多余的,删掉它,然后应该就明白了吧


[解决办法]
探讨
1 (volatile unsigned short *)0x20000000=XXX
2 *(volatile unsigned short *)0x20000000=XXX
可是2在语义上应该是XXX存放在0x20000000内值所指向的地址里啊。和1是不同的地址啊!
还是不明白。。。

热点排行