打印

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

[复制链接]
1861|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pinghpu|  楼主 | 2013-10-29 17:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
阿南| | 2013-10-29 17:52 | 只看该作者
就是从串口的特殊功能寄存器(应该是接收寄存器上读一数据

使用特权

评论回复
板凳
pinghpu|  楼主 | 2013-10-29 18:20 | 只看该作者
阿南 发表于 2013-10-29 17:52
就是从串口的特殊功能寄存器(应该是接收寄存器上读一数据

(*(vu32*)
这句话什么意思?

使用特权

评论回复
地板
阿南| | 2013-10-29 22:00 | 只看该作者
这是将右边的数强制转换为指针型地址

使用特权

评论回复
5
airwill| | 2013-10-30 09:14 | 只看该作者
(vu32*) 将后面的数值强制转换成指针 (指向 vu32), 楼主要补补 C 语言咯

使用特权

评论回复
6
lirunze| | 2013-10-30 09:49 | 只看该作者
感觉应该是这么个意思啊

使用特权

评论回复
7
ayb_ice| | 2013-10-30 10:39 | 只看该作者
强制指针操作

使用特权

评论回复
8
戈卫东| | 2013-10-30 11:17 | 只看该作者
简单来说就是直接地址访问---给出一个整数(地址),直接访问该地址. C语言似乎只有这么做.

使用特权

评论回复
9
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 赞一个!
10
qinhuan7| | 2013-11-1 12:34 | 只看该作者

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

30

帖子

0

粉丝