嵌入式C语言结构体的问题

starl1985 2011-08-25 03:07:50
#define GPIO_LOW 0
#define LCD_DISP_ON_IOPIN gpio4

请教一个问题,下面是结构体的定义
struct gpio{
u32 display_on;
u32 lcd_cs;
u32 lcd_standby;
u32 mcu_fmk_pin;
};

接着是初始化
struct gpio fb_gpio = {
.lcd_cs = 0,
.display_on = (GPIO_LOW<<16)|LCD_DISP_ON_IOPIN,
.lcd_standby = 0,
};


第一个问题:为什么结构体里面的成员变量都是以.开头的变量进行初始化?
第二个问题:.display_on的初始化是怎么理解的?
...全文
230 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
CJacky++ 2011-08-26
  • 打赏
  • 举报
回复
发一下gpio4的声明或宏定义。
changing_better 2011-08-26
  • 打赏
  • 举报
回复
估计这么写是方便你阅读,你知道display_on = (GPIO_LOW<<16)|LCD_DISP_ON_IOPIN,
是由谁组成的。以后改代码方便。
Soulic 2011-08-26
  • 打赏
  • 举报
回复
2,不知道是否和大小端有关系
luciferisnotsatan 2011-08-26
  • 打赏
  • 举报
回复
关键是 0再怎么移,它还是0。和对齐也没关系。
(GPIO_LOW<<16)|LCD_DISP_ON_IOPIN 这个的结果就是 LCD_DISP_ON_IOPIN
starl1985 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luciferisnotsatan 的回复:]
初始化,看这里
http://topic.csdn.net/u/20110803/15/4d1a4f46-f3ab-43a8-9345-ce25d15316b9.html

#define GPIO_LOW 0

(GPIO_LOW<<16)
确定没写错?0<<16有什么用?
[/Quote]

恩,没写错!我现在感觉好像是为了强制类型转换,这个平台是支持32位地址总线,不知道编译器编译常量分配的是默认4个字节还是怎么分配的?如果是4个字节那左移16也就没有用处,如果是2个字节,那左移16位就可以理解了,因为结构体里面定义的变量都是32位的,这样就可以保证字节对齐,不知道是不是这样理解!哎
vincent101 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 luciferisnotsatan 的回复:]

初始化,看这里
http://topic.csdn.net/u/20110803/15/4d1a4f46-f3ab-43a8-9345-ce25d15316b9.html

#define GPIO_LOW 0

(GPIO_LOW<<16)
确定没写错?0<<16有什么用?
[/Quote]
万一以后会换成1呢?
wwwhaichun 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 starl1985 的回复:]

引用 5 楼 luciferisnotsatan 的回复:

(GPIO_LOW<<16)
确定没写错?0<<16有什么用?
[/Quote]

以后有变化,改成非0 就方便而且不易出错了
luciferisnotsatan 2011-08-25
  • 打赏
  • 举报
回复
初始化,看这里
http://topic.csdn.net/u/20110803/15/4d1a4f46-f3ab-43a8-9345-ce25d15316b9.html

#define GPIO_LOW 0

(GPIO_LOW<<16)
确定没写错?0<<16有什么用?
sdudubing 2011-08-25
  • 打赏
  • 举报
回复
第一问没见过哈,第二个是GPIO_LOW左移16位,然后或上LCD_DISP_ON_IOPIN。
shi3590 2011-08-25
  • 打赏
  • 举报
回复
1.
struct gpio fb_gpio = {
.lcd_cs = 0,
.display_on = (GPIO_LOW<<16)|LCD_DISP_ON_IOPIN,
.lcd_standby = 0,
};
等于
struct gpio fb_gpio;
fb_gpio.lcd_cs = 0;
fb_gpio.display_on = (GPIO_LOW<<16)|LCD_DISP_ON_IOPIN;
fb_gpio.lcd_standby = 0;
2.
根据GPIO_LOW初始信号位变化与gpio4变量进行信号同步,纯属个人理解,具体要看代码用途。
starl1985 2011-08-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ouyh12345 的回复:]
1、c99的规定,可以这样初始化
2、先做位移,再做逻辑或
[/Quote]

1.变量前面加一个.是什么意思?
2.功能是实现什么?拉低某一个pin吗?
ouyh12345 2011-08-25
  • 打赏
  • 举报
回复
1、c99的规定,可以这样初始化
2、先做位移,再做逻辑或

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧