C语言关于宏定义和指针变量的问题,#define outportw(dat,addr) (*(volatile U16 *)(addr) = (dat))

这个是怎么定义的啊,是把dat的放到addr地址上?请高手指点一下,感谢了

是把dat的值存放到addr地址上,注意存放的是16位的无符号数。

例如:
unsigned short a;
unsigned short *pt;

pt=&a;
outportw(0x1234,pt);
就是把a赋值成了0x1234。追问

哦 非常感谢

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-24
不是呢
意思是将dat的值保存到addr的那段内存,比如:
char a[10];
int b = 12;
outportw(b, a); // 意思就是 *(volatile U16*)a = b;
此处先将a强制转换成U16*,然后将b保存到那段内存里面,如果 typede unsigned short U16;
那么就是说把b写入a的内存,共2个字节
第2个回答  2012-09-24
把一个(强转成)16进制的指针指向 data 数据。volatile 说明该指针是可变的。
第3个回答  2012-09-24
(*(volatile U16 *)(addr) = (dat)),(lolatile U16*)是一个强制类型转换,把addr的地址转换成为U16类型的指针, (*(volatile U16 *)(addr) = (dat))就是向这个地址写数据。在ARM中向寄存器中写数据常用这种方法。
第4个回答  2012-09-27
定义函数 outportw
相似回答