当前位置: 代码迷 >> 单片机 >> *(volatile unsigned short *)0x20000000背后的意义是啥?该如何处理
  详细解决方案

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

热度:618   发布时间:2016-04-28 16:29:50.0
*(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是不同的地址啊!
还是不明白。。。
  相关解决方案