博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【嵌入式Linux驱动开发】C语言知识(汇总版)
阅读量:2031 次
发布时间:2019-04-28

本文共 1323 字,大约阅读时间需要 4 分钟。

static

  • static全局变量与普通的全局变量区别:
    • static全局变量作用域仅仅是本文件,而全局变量可以在其他源文件通过extern引用!
  • static局部变量和普通局部变量区别:
    • static局部变量只被初始化一次,下一次依据上一次结果值;
  • static函数与普通函数区别:
    • static函数作用域仅仅是本文件,而不带static函数可以在其他源文件通过extern引用!

volatile

  • ①、编译器很聪明,会帮我们做些优化,比如:
int a;a = 0; // 这句话可以优化掉,不影响 a 的结果a = 1;
  • ② 有时候编译器会自作聪明,比如:
int *p = ioremap(xxxx, 4); // GPIO 寄存器的地址*p = 0; // 点灯,但是这句话被优化掉了*p = 1; // 灭灯
  • ③ 对于上面的情况,为了避免编译器自动优化,需要加上 volatile,告诉它“这是容易出错
    的,别乱优化”:
volatile int *p = ioremap(xxxx, 4); // GPIO 寄存器的地址*p = 0; // 点灯,这句话不会被优化掉*p = 1; // 灭灯
  • 关于volatile更多详细介绍,可参考

强制转换

  • 关于内核定时器这一节有一个结构体和unsigned long的使用。
.../* 定义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/

你可能感兴趣的文章
Spring技术知识点总结之三——Spring Bean 的注入过程
查看>>
Spring技术知识点总结之五——Servlet 生命周期
查看>>
Tomcat技术知识点总结
查看>>
数据库技术知识点总结之三——索引相关内容
查看>>
数据库技术知识点总结之四——乐观锁与悲观锁
查看>>
数据结构技术知识总结之一——二叉树
查看>>
JVM技术总结之二——GC机制
查看>>
JVM技术总结之四——JVM内存结构
查看>>
Lucene基本知识入门
查看>>
Windows系统下通过PSCP传输文件至BeagleBone Black
查看>>
OpenCV像素点邻域遍历效率比较,以及访问像素点的几种方法
查看>>
背景提取算法——帧间差分法、背景差分法、ViBe算法、ViBe+算法
查看>>
“王大锤の非诚勿扰” —— Spring IoC / DI 思想详述
查看>>
服务假死问题解决过程实记(三)——缓存问题优化
查看>>
Individual Homework -----questions about the text book by 张静
查看>>
[初心者适用]如何为代码编写基本的文档
查看>>
DailyScrum beta 第三天!
查看>>
骚博记, 又名: building another twitter
查看>>
Daily scrum beta 第五天!
查看>>
为什么牛逼?——"Stonie is a KungFu monk"游戏精品功能介绍与详细规范,以及其中的挑战...
查看>>