本文共 1323 字,大约阅读时间需要 4 分钟。
static
volatile
int a;a = 0; // 这句话可以优化掉,不影响 a 的结果a = 1;
int *p = ioremap(xxxx, 4); // GPIO 寄存器的地址*p = 0; // 点灯,但是这句话被优化掉了*p = 1; // 灭灯
volatile int *p = ioremap(xxxx, 4); // GPIO 寄存器的地址*p = 0; // 点灯,这句话不会被优化掉*p = 1; // 灭灯
强制转换
.../* 定义led_dev设备结构体 */struct led_dev{ dev_t devid; /* 设备号 */ struct cdev cdev; /* cdev */ struct class *class; /* 类 */ struct device *device; /* 设备 */ int major; /* 主设备号 */ int minor; /* 次设备号 */ /*GPIO子系统*/ struct gpio_desc *led_gpio; /* GPIO子系统接口 */ /*定时器*/ int timeperiod; /* 定时周期,单位为ms */ struct timer_list timer; /* 定义一个定时器*/ /*自旋锁*/ spinlock_t lock; /* 定义自旋锁 */};struct led_dev leddev; /* led设备 */... /* 注意leddev类型是结构体led_dev,这里取地址然后强制转化为unsigned long,用的时候需要强制转化为struct led_dev* */ leddev.timer.data = (unsigned long)&leddev;void timer_function(unsigned long arg){ /*这里强制转化成结构体*/ struct led_dev *dev = (struct led_dev *)arg;... gpiod_set_value(dev->led_gpio, sta);/* 用的时候需要强制转化为struct led_dev*,并且只能用->运算符 */}...
转载地址:http://ofnaf.baihongyu.com/