- 博客(26)
- 收藏
- 关注
原创 嵌入式linux 块设备驱动框架
新产生的bio可能会被合并到requeset中,也可能产生新的requeset,然后插入到requeset_queue中合适的位置,这一切都是I/O调度器来完成的,下面是requeset_queue,requeset和bio之间的关系。第6行,compat_ioctl函数和ioctl函数一样,都是用于块设备的I/O控制,区别在于在64位系统上,32位应用程序的ioctl会调用compat_ioctl函数,在32位的系统上运行的32位应用程序调用的就是ioctl函数。...
2022-07-18 21:20:38
996
1
原创 第十节 STL-常用算法
概述:学习目标:掌握常用的遍历算法算法简介:1.1 for_each功能描述:实现遍历容器函数原型:总结:for_each是在实际开发中最常用的遍历算法,需要熟练掌握功能描述:搬运容器到另一个容器中函数原型:总结:搬运的目标容器必须要提前开辟空间,否则无法正常搬运学习目标:掌握常用的查找算法算法简介:2.1 find功能描述:查找指定元素,找到返回指定元素的迭代器,找不到返回结束迭代器end()函数原型:总结:find可以再容器中找到指定的元素,返回值
2022-06-29 20:05:44
400
原创 第九节 函数对象
概念:本质:函数对象(仿函数)是一个类,不是一个函数特点:2 谓词2.1 谓词概念概念:2.3 二元谓词3 内建函数对象3.1 内建函数对象的意义概念:STL内建了一些函数对象分类:用法:功能描述:仿函数原理:总结: 使用内建函数对象的时候,需要引入头文件#include功能描述:实现关系对比仿函数原型:总结:内建函数对象就相当于将我们自己写的仿函数模板化了,直接拿来用就好了,不用我们自己写仿函数了。功能描述:实现逻辑运算...
2022-06-28 16:31:20
1495
原创 第八节 常用容器
本质:string是C++风格的字符串,而string本质上是一个类string和char *的区别:特点:string内部封装了很多成员例如:查找find,拷贝copy,删除delete替换replace,插入insertstring管理char *所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责构造函数原型:1.3 string赋值操作功能描述:给string字符串进行赋值赋值函数的原型:1.4 string字符串拼接功能描述:实现字符串末尾拼接字符串函数原型:
2022-06-27 18:14:39
511
原创 第七节 STL初识
容器:置物之所也STL容器就是将运用最广泛的一些数据结构实现出来常用的数据结构:数组,链表,树,栈,队列,集合,映射表等这些容器分为序列式容器和关联式容器两种: 序列式容器:强调值得排序,序列式容器中的每个元素均由固定的位置 关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系算法:问题之解法也有限的步骤,解决逻辑或数学上的问题,这一门学科我们叫做算法算法分为:质变算法和非质变算法 质变算法:是指运算过程中会更改区间内的元素的内容,例如拷贝,替换,删除等等
2022-06-22 15:05:34
153
原创 第六节 模板
1,模板1.1 模板的概念模板就是建立通用的模具,大大提高复用性模板的特点:模板不可以直接使用,他只是一个框架 模板的通用并不是万能的1.2 函数模板C++的另一种编程思想称为泛型编程,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板1.2.1 函数模板语法函数模板作用:建立一个通用的函数,其函数的返回值和形参类型可以不具体制定,用一个虚拟的类型来代表语法:template<typename T>.....................
2022-06-21 17:33:28
60
原创 嵌入式linux IIO驱动
IIO子系统简介 我们一般搜索IIO子系统,就会发现大多数讲的都是ADC,这是因为IIO就是为ADC类传感器准备的,当然了DAC也是可以的,我们常用的陀螺仪,加速度计,电压/电流测量芯片等内部都是有个ADC,内部ADC将原始的模拟数据转换为数字量,然后通过其他的通信接口,比如IIC,SPI等传输给SOC。 因此,我们使用的传感器本质是ADC和DAC器件的时候,我们可以优先考虑使用IIO驱动框架。1,iio_dev结构体 IIO子系统使用结构体iio_dev来描述一
2022-06-20 16:35:08
1890
1
原创 嵌入式linux 定时器
定时器是一个很长用的一个功能,需要周期性处理的工作都要用到定时器。在使用内核定时器的时候需要注意一点,内核定时器并不是周期性运行的,超时以后就会关闭,因此想要周期性定时,就需要重启定时器。jiffesLinux内核使用全局变量jiffies记录系统从启动以来的系统节拍数,系统启动时,Jiffies会初始化为0。 jiffies_64用于64位系统,jiffies用于32位系统,jiffies就是jiffies_64的低32位,不管在32位还是64位系统都可以使用ji......
2022-05-31 21:50:08
715
原创 嵌入式linux 并发与竞争
原子操作 linux内核定义了叫做atomic_t的结构体来完成整型数据的原子操作,在使用中原子变量来代替整型变量。atomic_t lock; 定义lock变量,本身是一个整型变量,内核中提供了大量原子操作的API函数1,先初始化原子变量atomic_t lock= ATOMIC_INIT(0); lock初始化为0atomic_set(&lock, 10); ......
2022-05-31 15:59:57
110
原创 嵌入式linux 通过获取设备树电亮LED
已经被舍弃的方法就不再写了(地址映射)搭建好设备驱动框架之后,需要对led灯引脚进行初始化,不管什么外设驱动,GPIO驱动基本都是必须的,而pinctrl和gpio子系统又是GPIO驱动所必须的。pinctrl 子系统主要工作内容如下:获取设备树中 pin 信息。 根据获取到的 pin 信息来设置 pin 的复用功能 根据获取到的 pin 信息来设置 pin 的电气特性,比如上/下拉、速度、驱动能力等。 对于我们使用者来说,我们只需要在设备......
2022-05-31 12:29:23
301
原创 Linux之驱动开发篇—字符设备驱动框架
(1)驱动的入口和出口:(2)括号里面的就是驱动的入口和出口函数:(3)需要在驱动入口函数注册字符设备驱动 1,在自身给出主设备号的时候,用下面的函数来注册和注销 2,需要系统自动分配的时候使用下面的函数来注册 3,初始化cdev 4,自动分配设备结点,需要类和设备的创建,下面是创建类和设备(4)上面的函数里面有字符设备操作集(chrdevbase_fops),需要初始化一下***在操作设备函数里面(re
2022-05-31 10:51:57
160
原创 第五节 文件操作
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会释放通过文件可以将数据持久化 C++对文件操作需要包含头文件<fsteam> 文件类型分为两种:文本文件 - 文件以文本的ASCII码形式存储在计算机内 二进制文件 - 文件以文本二进制形式存储在计算机中,用户一般不能直接读懂他们操作文件的三大类:ofsteam:写操作 ifsteam:读操作 fsteam:读写操作5.1 文本文件5.1.1 写文......
2022-05-20 13:10:35
145
原创 第四节 类和对象
4 类和对象C++面向对象的三大特性为:封装,继承和多态C++认为万事万物皆为对象,对象上有其属性和行为 例如:人可以作为对象,属性有姓名,年龄....行为有跑,跳......车可以作为对象,属性有车胎,方向灯....行为有载人,放音乐....具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类4.1 封装4.1.1 封装的意义 封装的意义一:将属性和......
2022-05-16 15:44:48
105
原创 第三节 函数高级
3 函数提高3.1 函数默认参数在C++中,参数的形参列表可以使默认值语法:返回值类型 函数名(参数 = 默认值){}#include <iostream>#include <string>using namespace std;//如果我们传入了参数就用自己的,不然就用默认的参数int Fuc(int a, int b =10, int c = 20){ return a + b + c;}int ma......
2022-05-01 19:43:52
71
原创 第二节 C++中的引用
2引用2.1 引用的基本使用语法:数据类型 &别名 = 原名#include <iostream>#include <string>using namespace std;int main(){ //引用的基本语法:数据类型 &别名 = 原名 int a = 3; int &b = a; b = 20; //结果a = 20 cout << a << endl;
2022-04-30 14:12:58
78
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人