自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 Linux USB host driver 枚举前的源码分析

当我们插上USB设备,系统会根据电平信号的变化,检测到新设备的接入,接着获取USB设备、配置、接口、端点的数据,并创建新设备。

2024-04-07 20:30:20 655

原创 基于C++代码实现的设计模式之单例模式

单例模式介绍及C++实现方式

2024-03-23 18:13:26 1008

原创 【C++ UnitTest】基于Google Test 的Value-Parameterized Tests使用和示例

如何编写值参数化测试

2024-03-12 19:18:26 962

原创 【C++ UnitTest】基于Google Test 之如何在同一测试套件中的测试之间共享资源

介绍GoogleTest中,如何在同一测试套件中的测试之间共享资源

2024-03-12 19:16:47 622

原创 【C++ UnitTest】基于Google Test 编写 test fixture

测试固件(test fixture)是一种用于测试的环境设置,它用于确保在测试运行期间有一致的测试环境。测试固件允许你在多个测试用例之间共享初始化和清理代码,并且可以确保每个测试用例在相同的环境下执行,从而提高了测试的可靠性和一致性。

2024-03-11 19:50:20 705

原创 【C++ UnitTest】基于Google Test 编写测试用例的简单实例

由于工作和能力原因,这里介绍的都是基于C++的UT,因为java或者python也有相应的UT。在C++中编写测试用例通常使用单元测试框架,比较流行的框架包括和。

2024-03-11 19:48:23 661

原创 【C++ UnitTest】为什么要学习UnitTest

介绍什么是UT

2024-03-10 20:28:09 190

原创 C++中的访问修饰符

在C++中,访问修饰符(Access Specifiers)用于控制类的成员(包括变量和函数)的访问权限。C++提供了三种访问修饰符:private、protected和public。

2023-07-02 21:44:18 474

原创 什么是构造函数和析构函数

构造函数(Constructor)和析构函数(Destructor)是C++中的特殊成员函数,用于在创建对象和销毁对象时执行特定的操作。

2023-07-02 21:38:06 114 1

原创 IIC (三) -- I2C系统驱动程序模型

通过i2c_bus_type中i2c_device_match函数,依次比较设备树,id_table将两者绑定起来,若比较成功,接着调用i2c_device_probe函数进行注册。可以参考I2C驱动程序的层次,而函数之间的调用关系为i2c_register_driver->driver_register(&driver->driver)->driver_find。i2c_driver跟i2c_client匹配成功后,就调用i2c_driver.probe函数。所以这里主要介绍一下这几个重要函数的作用。

2023-07-02 18:57:06 525 1

原创 IIC (二) -- SMBus协议和基础知识介绍

与上面读数据类似,主机会先发送8bit的command code,在没有P信号的同时,再次发送一个读data的信号。向从设备发送一个字节,从设备地址通过7bit 的address体现,Wr为写数据,A为ack响应位,响应位通过从设备回复。SMBus连续读多个字节数据,和连续写类似,先发送command code,主机先读到一个字节为N的字节数信息,然后读取全部数据信息。从上图的关系可以看出SMBus是基于I2C协议的,SMBus要求更严格,SMBus是I2C协议的子集。而是直接开始数据的传输。

2023-07-01 15:50:56 6206

原创 IIC (一) -- 协议和基础知识介绍

这是主机会在SCL第九个时钟来的时候,读取SDA,若此时为低电平,则认为收到了ACK,否则为NACK。5.如果,主机想要在接下来发送一个停止位信号,主机会在SCL为低的时间内将SDA拉低,再拉高,再SCL为高的时候将SDA释放。当主机读取从机发送来的数据时,SCL时钟线依旧由主机控制,从机负责SCL时钟信号为高电平时,将数据发送到总线上。主机在总线上发起数据,主机负责SCL和SDA信号的控制,从机只负责在SCL为高电平的时候,读取SDA的信号。总之,SCL由主机控制,SDA是双向的,主机和从机都可以控制。

2023-06-19 01:19:27 294

原创 SPI (四) -- spi_sync和spi_async的调用流程

内核版本:4.9.88前面我们分析了总线驱动模型,同时分析了如何编写设备驱动。只从上层使用角度去分析。因为内核的spi代码里已经提供好了相应的函数框架供我们使用,这里看一下最核心的两个函数spi_sync和spi_async。

2023-06-17 01:41:03 2065

原创 SPI (三) -- 如何编写SPI设备驱动程序

上面将函数读写的上下层调用关系简单说明,其中,有个重要的数据结构,就是 struct spi_message *message。spi_message中存放的transfer链表,是由多个spi_transfer结构体组成,链表通过上图中的spi_message_add_tail函数,将传输的buff放入链表尾部。函数,对应的是异步的SPI传输函数,简单地说就是这个函数即刻返回,它返回后SPI传输不一定已经完成。,这是一个同步、阻塞的SPI传输函数,返回要么成功,要么失败。函数最终返回时,调用了。

2023-06-14 23:49:45 1681

原创 SPI (二) -- SPI总线设备驱动模型

下图来自韦东山SPI总线设备驱动模型的图示,清晰的介绍了SPI设备和SPI控制器之间的关联。Linux中使用spi_master结构体描述SPI控制器,里面最重要的成员就是。SPI子系统中根据主从控制的方式,有两类设备,SPI控制器和SPI设备。SPI控制器有驱动程序,提供SPI的传输能力。

2023-06-13 02:07:32 501

原创 SPI(一) -- 协议介绍

途中可以看到它有一根SCK的时钟信号和各个硬件模块相连,为了保证发送端和接收端的同步,告诉这根线上的设备,“我要开始同步(发送或接收)数据了”。0x56的二进制也就是 0101 0110,最高位MSB为0,LSB为0,数据传输的方向是从MSB最高位到最低位LSB一位一位的移动进入SPI 的data register。以上图为例,数据采集信号的时刻是时钟第二个边沿(上升沿),即CPHA为1,同时因为SCLK的初始电平为高电平,所以CPOL为1.CPOL:表示SCK的初始电平,0为低电平,1为高电平。

2023-06-12 23:29:05 126

原创 进程间通讯 -- 套接字socket

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,和其他文件一样都可以用open/write/read/close 模式来操作。socket就是该模式的一个实现, socket即是一种特殊的文件,后面会介绍的socket函数就是对其进行的操作,包括读/写IO、打开、关闭。socket也是一种进程间的通讯方式,只不过是基于网络协议之上。

2023-06-05 00:27:08 254

原创 通过coredump文件定位程序异常位置

什么是coredumpulimit生成core文件gdb调试coredump查看coredump时的堆栈总结待填坑。。

2023-05-25 00:41:39 48

原创 uboot的启动流程分析(一)

uboot启动主流程分析,第一部分

2023-05-25 00:37:11 51

原创 Linux驱动开发 -- input子系统

input子系统介绍input设备应用层编程实践input 子系统源码分析坑待填

2023-05-23 01:47:46 32 1

原创 Linux系统编程 -- 线程 (二)

线程的通信无名信号量互斥锁读写锁条件变量线程池坑待填。。

2023-05-23 01:41:59 35 1

原创 Linux系统编程 -- 线程的原语

创建线程与结束线程线程的退出线程的取消

2023-05-23 01:39:14 48 1

原创 Linux系统编程 -- 进程的创建、退出和回收(一)

进程的创建进程的退出进程的回收

2023-05-23 01:35:26 65

原创 如何移植uboot2014.04到smart210上

挖坑待埋。。。

2023-05-23 01:31:23 74

原创 Linux中的线程(一)-- 线程的创建

Linux 中的线程被称为“轻量级进程”(Lightweight Process,LWP),它是在进程内部运行的一种“子进程”。与传统的进程不同,线程共享相同的虚拟地址空间和其他资源,例如打开的文件、信号处理程序和用户 ID 等。

2023-05-08 01:55:07 1581 1

原创 Linux中的进程(一)-- 基本概念

本文是专题中的第一篇文章,也是整个文章的引言,这篇只介绍有关进程的基本概念,后续的文章会针对进程中涉及到的各个概念和名词、如何创建进程、进程的使用细节和规范等进行更加详细的介绍。

2023-05-06 05:44:56 94 1

原创 C++中指针和引用的区别

那么,我们再整理一下两者的具体区别:定义方式指针使用 * 号来定义,而引用使用 & 号来定义。例如,int* ptr;表示一个指向 int 类型的指针,而 int& ref;表示一个 int 类型的引用。初始化指针可以被初始化为一个有效的内存地址或者为 NULL,而引用必须在定义时初始化为一个已经存在的变量。内存分配指针可以通过 new 运算符动态分配内存,而引用不可以。重载指针可以被重载,而引用不可以。空指针引用指针可以为空(指向 NULL),但是引用不能。作为函数参数。

2023-05-06 05:05:12 31 1

原创 简述C++中深拷贝与浅拷贝的区别与代码示例

Deep Copy。

2023-05-04 23:11:43 184 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除