自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 顺序表的应用

线性表的顺序存储结构(简称为顺序表)是把线性表中的所有元素按照逻辑顺序依次存储到从计算机存储器中指定存储位置开始的一块连续的存储空间中,如下图所示因此可以根据以上特点定义一个相关的结构体。

2025-03-25 10:38:41 902

原创 SPI驱动程序(ICM20608)

在之前的文章中写了i2c的驱动程序,我们可以知道i2c的传输速度较慢,且为半双工的通信模式。而这篇文章讲解的SPI解决了以上的两个缺点包含了与 SPI 传输相关的各种信息,如传输的长度、数据缓冲区指针、传输标志等,使得 SPI 控制器能够根据这些信息正确地执行数据传输操作。在使用spi_transfer函数前应该先使用kzalloc函数为结构体在内核内存中分配一块内存地址,在使用tx_buf和rx_buf时也同样要分配一份内存地址给它们,当然在声明完之后应该使用kfree函数去释放内存,防止内存泄漏。

2025-03-14 14:16:04 489

原创 i2c驱动程序(AP3216C芯片)

在前面说到了i2c的应用,使用i2c控制EEPROM进行掉电不丢失的存储。在这一篇文章中将对AP3216C进行驱动代码及应用程序的实现。

2025-03-11 22:04:38 1298

原创 led驱动程序的优化(总线模型、设备树模型)

uart1 {/**okay 设备正常运行*disabled 设备不可操作,但是后面可以恢复工作*fail 发生了严重错误,需修复*fail-sss 在fail的基础上加上了sss的错误信息regreg 的本意是 register,用来表示寄存器地址。但是在设备树里,它可以用来描述一段空间。反正对于 ARM 系统,寄存器和内存是统一编址的,即访问寄存器时用某块地址,访问内存时用某块地址,在访问方法上没有区别的。/dts-v1/;

2025-03-04 19:42:29 1035

原创 Linux嵌入式点亮一个led

建立物理地址和虚拟地址之间的映射关系,让内核可以通过虚拟地址来访问硬件设备的物理地址空间,从而实现对硬件设备的控制和数据交互phys_addr:这是一个 resource_size_t 类型的参数,表示要映射的硬件设备的物理起始地址。这个地址通常可以从硬件设备的数据手册中获取。size:这是一个 unsigned long 类型的参数,表示要映射的物理地址空间的大小,单位是字节。

2025-02-28 19:55:44 705

原创 gdb调试

Linux嵌入式等其他场景中无调试选项,但我们在使用时需要调试时,就要使用到gdb调试工具。接下来将从使用方法和基本调试命令来介绍gdb工具。

2025-02-27 22:31:18 552

原创 第一个驱动程序开发

上述file结构体中包含了file_operation结构体,file_operation定义了字符设备驱动程序与用户空间进行交互时所支持的各种操作。Linux 内核中用于输出调试信息、日志信息等的函数,它的功能类似于用户空间的printf函数,但由于运行在内核空间,有着不同的实现和使用场景。设备节点:用户空间程序与字符设备驱动进行交互的接口,通过设备节点,用户空间程序可以调用字符设备驱动提供的操作函数来访问硬件设备。设备类:对设备的逻辑分组,方便设备的管理和识别,并且可以自动创建设备节点。

2025-02-26 11:53:10 984

原创 直接访问EEPROM(Linux嵌入式)

它会先尝试使用 /dev/i2c/%d 格式的路径打开设备文件,如果失败且错误码为 ENOENT(文件不存在)或 ENOTDIR(不是目录),则会尝试使用 /dev/i2c-%d 格式的路径再次打开。若最终仍无法打开文件并且quiet参数的值为0,会根据错误码输出相应的错误信息。返回值:返回最终的文件描述符,打开成功则返回一个非负整数,否则返回 -1quiet) {} else {\n");

2025-02-14 13:50:28 546

原创 i2c协议和SMBus协议

在面对不同的情况使用不同的协议可以事半功倍,在平时运用也可以多加考虑首先介绍一个底层的 I2C SMBus 访问函数,用于执行各种 SMBus 操作。如果操作成功,返回读取到的字节数据;如果失败,返回负数错误码__s32 err;return err;

2025-02-13 20:56:01 691

原创 I2C-Tool使用(无需编写驱动程序直接访问设备)

i2cdetect:用于在 Linux 系统中扫描 I2C 总线并检测连接在其上的 I2C 设备-l 列出I2C总线上连接的设备I2CBUS(I2C 总线的编号) 列出该总线上连接设备的地址i2cget:通常用于从指定的I2C地址读取数据其中的MODE:b(一字节)、w(两字节)、e(执行一个 “PEC(Packet Error Checking,数据包错误检查)读取)例:从I2C 总线 0 上,地址为 0x1e 的传感器设备的一个地址为0xc的16位寄存器上读取两字节的数据i2cset。

2025-02-10 21:23:05 467

原创 多线程编程

多线程编程是一种在单个进程中同时执行多个线程的技术,提高程序的并发性的同时提高资源利用率。attr: 指向 pthread_attr_t 类型的指针,指定线程的属性。如果发生错误,返回相应的错误码。mutex: 指向 pthread_mutex_t 类型的指针,表示要上锁的互斥锁。thread: 指向 pthread_t 类型的指针,用于保存新创建线程的 ID。如果发生错误,返回相应的错误码,例如 EINVAL(条件变量或互斥锁未初始化)。arg: 传递给线程函数的参数,可以是任何类型的指针。

2025-02-03 16:52:10 196

原创 网络编程(TCP UDP)

网络编程使得不同计算机之间可以有效地交换数据。它为数据传输提供了协议和标准,使得在网络上传输数据变得简单而高效。网络编程实现了客户端-服务器模型,这是现代应用程序架构的基础。客户端请求服务,服务器提供服务。

2025-01-24 19:29:19 956 1

空空如也

空空如也

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

TA关注的人

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