(*(vu32*)(ADDR+read_i*2))

[复制链接]
 楼主| pinghpu 发表于 2013-10-29 17:46 | 显示全部楼层 |阅读模式
uart1_trx[uart1_rx]=(*(vu32*)(ADDR+read_i*2))  //ADDR=0x0801f000;
这句话什么意思
阿南 发表于 2013-10-29 17:52 | 显示全部楼层
就是从串口的特殊功能寄存器(应该是接收寄存器上读一数据
 楼主| pinghpu 发表于 2013-10-29 18:20 | 显示全部楼层
阿南 发表于 2013-10-29 17:52
就是从串口的特殊功能寄存器(应该是接收寄存器上读一数据

(*(vu32*)
这句话什么意思?
阿南 发表于 2013-10-29 22:00 | 显示全部楼层
这是将右边的数强制转换为指针型地址
airwill 发表于 2013-10-30 09:14 | 显示全部楼层
(vu32*) 将后面的数值强制转换成指针 (指向 vu32), 楼主要补补 C 语言咯
lirunze 发表于 2013-10-30 09:49 | 显示全部楼层
感觉应该是这么个意思啊
ayb_ice 发表于 2013-10-30 10:39 | 显示全部楼层
强制指针操作
戈卫东 发表于 2013-10-30 11:17 | 显示全部楼层
简单来说就是直接地址访问---给出一个整数(地址),直接访问该地址. C语言似乎只有这么做.
dictionary 发表于 2013-10-30 14:49 | 显示全部楼层
本帖最后由 dictionary 于 2013-10-30 14:51 编辑

uart1_trx[uart1_rx]=(*(vu32*)(ADDR+read_i*2))

一点一点来吧
(ADDR+read_i*2) 这部分的做用是计算地址,类似于0x080ff000,但它的结果是一个数字,所以有了下一步

(vu32*)(ADDR+read_i*2) 这一部分,就是将计算出来的的地址强制转换为一个VU32类型的指针,V就是volatile 表示 这个变量是易变 编译器在编译这个变量的时候,每当程序中使用了这个变量,编译器都会将这个变量从内存中取出,再使用。 U 就是 unsigned 无符号的意思,总的来说就是将这个计算出来的结果强制转换成  易变的 无符号的 32位整形指针。
(*(vu32*)(ADDR+read_i*2)) 这部分你再要是不知道的话那我前面的白说了!

评分

参与人数 1威望 +3 收起 理由
gcxzhz + 3 赞一个!

查看全部评分

qinhuan7 发表于 2013-11-1 12:34 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部