#define LCD_WR_REG(index) ( (* (__IO u16 *) (Bank1_LCD_C) )=( (u16)index) ) ;

2019-08-23 13:54发布

本帖最后由 richthoffen 于 2017-4-3 18:08 编辑

倒数第二行代码#define  LCD_WR_REG(index)     (   (* (__IO u16 *) (Bank1_LCD_C)  )=( (u16)index) ) ;         


问题1    为什么u32位地址可以转化为u16位地址?
问题2    想问下这句语句的赋值,指针没看懂,这和**Bank1_LCD_C=index有不同吗,想问下大家这句语句的意思?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
八度空间
1楼-- · 2019-08-23 18:59
操作系统 发表于 2017-4-3 17:08
超级复杂.感觉这是C语言的弱点了.复杂到一般人理解不了了.呵呵..

1、那不是强制性转换成16位地址,而是将一个16位的数据指针指向那个地址
2、没有强制性编译器会认为是32位的,保险的做法就是转换一下
操作系统
2楼-- · 2019-08-23 19:11
 精彩回答 2  元偷偷看……
richthoffen
3楼-- · 2019-08-23 21:25
本帖最后由 richthoffen 于 2017-4-3 21:05 编辑
八度空间 发表于 2017-4-3 20:22
1、那不是强制性转换成16位地址,而是将一个16位的数据指针指向那个地址
2、没有强制性编译器会认为是32 ...

能再解释一下吗,如果32地址位强制转换为16位,要截断保留低16位,那不是会丢失数据.
richthoffen
4楼-- · 2019-08-24 03:16
本帖最后由 richthoffen 于 2017-4-3 21:27 编辑
八度空间 发表于 2017-4-3 20:22
1、那不是强制性转换成16位地址,而是将一个16位的数据指针指向那个地址
2、没有强制性编译器会认为是32 ...

是不是地址仍然是32位,而32位地址里的数据格式需要变成16位的?
#define LCD_WR_REG(index) ( (* (__IO u16 *) (Bank1_LCD_C) )=( (u16)index) ) ; 这个语句有点像**p=val,这一点我有点不理解?
麻烦了,向你请教.
正点原子
5楼-- · 2019-08-24 04:41
richthoffen 发表于 2017-4-3 20:48
能再解释一下吗,如果32地址位强制转换为16位,要截断保留低16位,那不是会丢失数据.

LCD就是16位数据接口驱动的啊。
八度空间
6楼-- · 2019-08-24 06:01
richthoffen 发表于 2017-4-3 21:17
是不是地址仍然是32位,而32位地址里的数据格式需要变成16位的?
#define LCD_WR_REG(index) ( (* (__IO u ...

1、理解对了
2、你可以实验一下看结果

一周热门 更多>