自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 V4L2视频采集流程复习笔记

本文系统梳理Linux V4L2视频采集流程:从OV5640摄像头通过DVP/MIPI接口接入IMX6ULL SoC,到应用层通过9步ioctl操作完成图像采集。重点解析mmap零拷贝机制、缓冲区轮转(4块buffer)设计思想,对比DVP与MIPI CSI特性,并详解VIDIOC_S_FMT、REQBUFS、QBUF、DQBUF等核心命令及结构体。附完整代码示例与像素格式选择指南,适合作为嵌入式摄像头开发入门与复习手册。

2026-10-21 00:00:48 255

原创 UART_I2C_SPI_GPIO通信方式对比与调试笔记

本文对比UART、I2C、SPI、GPIO四种嵌入式通信方式,涵盖时序、速率、寻址、Linux驱动框架及调试工具。以IMX6ULL平台为例,详解各协议特性与实战调试方法:UART依赖波特率同步,适用于串口设备;I2C以两线制支持多设备挂载,需注意上拉电阻与地址冲突;SPI高速全双工,引脚占用多;GPIO则用于自定义时序的传感器(如DHT11)。结合i2c-tools、spidev_test等工具,提供从设备树配置到应用层读写的完整调试链路,助力快速定位通信问题。

2026-10-20 21:53:23 327

原创 IMX6ULL驱动移植笔记

本文系统梳理IMX6ULL平台从U-Boot启动到根文件系统的移植流程,涵盖启动链路、内核镜像(zImage)、设备树与platform总线框架。重点实现DHT11温湿度与HC-SR04超声波传感器的GPIO驱动,结合时序分析与字符设备编程,完整演示驱动开发全流程。适合嵌入式开发复习与面试速查。

2026-10-18 22:50:20 176

原创 Linux设备驱动并发控制总结_优快云

Linux设备驱动中并发控制核心是解决竞态问题,保障对共享资源的互斥访问。通过原子操作(如atomic_inc)保护简单变量;自旋锁适用于短临界区,禁止睡眠,支持中断上下文;信号量用于长临界区或可睡眠场景,支持多并发。合理选择机制可有效避免数据竞争,确保驱动稳定性与可靠性。

2026-10-14 20:10:10 446

原创 linux驱动中断,相关中断的方式与适用场景

本文介绍了Linux内核中断机制,包括中断分类、核心函数接口(如request_irq、free_irq、disable_irq、enable_irq)及设备树适配方法。通过实例讲解中断注册与处理流程,并结合等待队列实现阻塞式IO。最后阐述中断子系统架构,将中断处理分为顶半部(快速响应)与底半部(耗时任务),底半部采用软中断、tasklet和工作队列等机制,兼顾效率与可扩展性。

2026-10-14 19:50:39 256

原创 在linux中 字符设备驱动框架 beep蜂鸣器的驱动开发

本文系统梳理了Linux字符设备驱动的加载流程与核心步骤:通过module_init注册模块入口,使用alloc_chrdev_region动态分配设备号,结合cdev_init与cdev_add完成驱动注册;利用ioremap将物理寄存器映射为内核虚拟地址以访问硬件;通过file_operations函数指针表实现用户态与内核态交互;强调copy_from_user/copy_to_user的数据安全拷贝及ioremap应置于init函数中避免重复映射。最后说明mknod创建设备节点、MODULE_LIC

2026-10-09 21:19:04 112

原创 【arm裸机】 屏幕的配置与坐标获取

本文介绍了基于PWM66Hz的IPG时钟配置及GPT模型在自然语言处理中的应用,重点阐述触控屏GT9147通过I2C2通信的初始化流程:包括引脚复用配置、复位操作、读取产品ID、中断配置(下降沿触发)、中断使能与优先级设置,并通过结构体实现读写操作,确保触控响应稳定。

2026-09-29 17:33:11 23

原创 【裸机lcd】framebuffer的配置与小型图像库的移植

LCD显示配置需重点完成四步:一、配置24根RGB数据引脚为复用模式(AF9),设为推挽输出,确保信号稳定;二、设置高输出速度、无上下拉、中高驱动能力的电气属性,提升信号边沿陡峭度;三、通过PLL倍频生成稳定高频时钟,满足PCLK需求;四、正确配置PCLK、HSYNC、VSYNC、DE等同步信号。其中,PCLK同步像素传输,HSYNC控制行起始,VSYNC标识帧开始,DE标记有效数据区。最终通过示波器验证波形质量,保障高速数据传输不失真。

2026-09-28 20:26:03 668

原创 spi通信协议 以及adxl345传感器配置

本文介绍ADXL345三轴加速度传感器的SPI通信接口及寄存器配置,对比UART、I²C与SPI通信差异。该传感器支持SPI(最高4MHz)和I²C(最高400kHz)接口,具备13位分辨率、低功耗、FIFO缓冲等功能,适用于姿态识别、运动检测等场景。通过配置量程、采样率等寄存器,可实现高精度加速度测量,数据以2的补码形式输出,需按公式转换为实际值。

2026-09-27 18:28:02 29

原创 ADC数模转换器,lm75温度传感器

开启FPUCP1需手动使能协处理器CP1以启用FPU浮点运算功能。ADC采用逐次逼近法(SAR)将模拟信号转为数字量,通过逐位比较确定数值。转换后,结合分辨率与参考电压计算实际电压:电压 = (数字量 / 满量程)× 参考电压,实现高精度信号转化。

2026-09-24 17:48:08 200

原创 I2C 通信协议详解:时序、EEPROM 读写流程与实战总结

I²C是一种由飞利浦开发的串行同步半双工通信总线,仅需SCL(时钟线)和SDA(数据线)即可实现主机与多从机间的低速通信。其工作时序以起始信号(SCL高时SDA下降沿)开始,数据在SCL高电平期间稳定传输,每8位后接收方发送ACK应答,最后以停止信号(SCL高时SDA上升沿)结束。典型应用包括EEPROM存储、传感器采集、显示屏驱动及实时时钟通信。设备地址唯一,支持一主多从或多个主机架构,具有引脚少、连接简单的优势,广泛用于嵌入式系统中。

2026-09-23 23:02:37 315

原创 EPIT定时器配置 uart 串口通信

EPIT(增强型周期中断定时器)是i.MX系列处理器中的向下计数定时器,用于实现精确周期性中断,适用于LED闪烁、任务调度等场景。通过配置加载寄存器(LR)和中断控制寄存器(CR),结合GIC使能中断(GIC_EnableIRQ),确保中断信号可被CPU响应。外加电容可消除按键抖动。相较而言,GPT为自增计数器,精度更高,适用于高精度延时与输出比较、输入捕获等应用。

2026-09-22 17:42:07 233

原创 arm时钟配置,pll锁相环与相关pfd分频的使用

IMX6ULL时钟初始化分为三步:1)配置ARM内核时钟为528MHz,通过旁路切换确保PLL1稳定后切回;2)配置PLL2、PLL3各4个PFD,通过寄存器位操作设置分频值;3)设置根时钟:AHB 132MHz、IPG 66MHz、PERCLK 66MHz,使用CBCDR/CBCMR寄存器完成分频。共7个PLL,8个PFD,实现多外设时钟需求。关键点包括时钟门关闭、安全切换及寄存器精确配置。

2026-09-21 17:35:06 385

原创 ARM 裸机中断:从按键到 GIC 的处理流程

GIC全称Generic Interrupt Controller(通用中断控制器),是ARM公司为Cortex-A/R系列内核设计的标准中断控制器。核心作用:统一管理系统所有中断源,完成中断优先级仲裁、中断屏蔽、中断路由分发,将中断递送给指定CPU内核,是多核系统中断调度的核心。常用版本:GIC v1、v2、v3、v4;i.MX6ULL 使用 GIC v2 版本,具体为ARM GIC-400(PL390架构实现)。

2026-09-20 19:49:59 419

原创 ARM 汇编入门:ARM基本构成 汇编指令与注意事项

本文为ARM汇编初学者整理的系统笔记,涵盖CPU架构(RISC/CISC)、ARM内核(Cortex-A/M)、寄存器(R0-R12、PC、LR、SP、CPSR)、指令集与工作模式,详解立即数判断、常用指令(mov、bic、orr、cmp、b/bl/bx)、栈操作(stmfd/ldmfd)、函数调用(汇编调C、C调汇编)及参数传递规则。结合示例代码,强调8字节对齐、寄存器保存机制与中断上下文处理,帮助快速掌握ARM汇编核心概念。

2026-09-16 23:55:47 252

原创 【硬件学习入门】--嵌入式51单片机点灯与延迟效应

1.计算机组成1.计算机组成(只要包含就是一个计算机)计算机的组成:控制器,运算器,储存器(内存外存),输出设备,输入设备。

2026-09-10 20:00:12 249

原创 从零手写一个 C 语言 HTTP 商品查询服务器:全链路技术实践

本文实现了一个全栈式商品查询系统,基于BSD Socket与多进程模型(fork+SIGCHLD)构建高并发TCP服务器,支持端口复用与僵尸进程防护;手动解析HTTP请求,实现GET/POST处理、URL解码及响应构造;采用SQLite3嵌入式数据库完成用户注册登录与商品数据管理;前端使用纯手写HTML/CSS实现登录、注册、商品列表与详情页,无框架依赖。整套系统覆盖网络编程、系统编程、数据库与前端开发全链路,具备完整功能与工程化能力。

2026-09-09 17:07:40 221

原创 【HTML 入门笔记】:从零开始认识网页基础标签

<think>我们只需要按照要求生成≤150字的文章摘要。内容是关于HTML基础知识的总结。摘要要简洁,涵盖主要点。注意字数限制。</think>本文介绍了HTML基础知识:网页基本骨架(DOCTYPE、head、body),标签(双/单标签)、属性、文本元素、超链接、图片、列表、表格、HTML实体及表单。强调内容写在body中,属性置于开始标签,并推荐动手实践综合页面以巩固理解。

2026-09-07 22:33:38 278

原创 【sqlite3数据库】一站式学会 增删改查 以及数据库c接口编程

<think>我们根据要求生成≤150字的文章摘要。内容是关于SQLite3的博客,涵盖基础概念、命令、SQL语句和C/C++ API。摘要需简洁概括核心内容。注意字数限制。</think>本文介绍了SQLite3嵌入式数据库的特点、安装、常用命令及SQL语法,并重点讲解了C/C++ API中sqlite3_open、sqlite3_errmsg、sqlite3_exec三个核心接口的使用方法与回调机制,帮助开发者快速上手。

2026-09-07 22:24:42 298

原创 【网络通信】tcp并发服务端

<think>我们根据用户请求,需要基于提供的文本内容生成一篇不超过150字的文章摘要。首先理解文本内容。文本混杂了许多概念:服务器类型(单循环服务器、并发服务器、UDP服务端、TCP服务端)、并发TCP服务器构建方式(多进程fork、多线程pthread、线程池)、生产者-消费者模式、IO多路复用(select等),以及代码片段。这似乎是一份学习笔记或讲义。摘要应概括主要内容。我们需要提取核心信息:它介绍了并发服务器的不同实现方式:多进程、多线程、线程池,以及IO多路复用(尤其select)。

2026-09-03 19:30:35 216

原创 【网络通信HTTP协议】

1.http位于应用层HTTP协议:超文本传输协议基于传输层TCP协议,端口80HTTPS :SSL加密方式默认端口443curl库2.http工作流程3.tcp中的请求与响应报文我们尝试扒取http//www.new.souhu.comhttp请求报文:Ubuntu;Accept:q=0.8q=0.5\r\n\r\nkeep-alive: 长连接:HTTP通信结束,保持一定时间的连接再断开close:短连接:HTTP通信结束,立马断。

2026-09-03 10:38:19 325

原创 TCP协议入门:从连接到粘包,一篇讲透

<think>我们根据用户要求,生成≤150字的文章摘要。内容涵盖TCP特点、三次握手四次挥手、编程流程、核心机制、粘包问题。需要简洁概括。</think>本文介绍了TCP的核心知识:特点(有连接、字节流、可靠但效率低)、三次握手与四次挥手、编程流程、可靠传输机制(应答、超时重传等),并详解粘包问题及三种解决方案。帮助初学者建立对TCP的整体认知。

2026-09-02 23:40:03 527

原创 【网络通信UDP】基础 进程间不同主机的通信

应用层: 应用层、表示层、会话层传输层: 传输层网络层: 网络层网络接口层: 数据链路层、物理层。

2026-08-31 20:02:39 298

原创 【linux】系统多文件操作 ipc机制通信 手搓微信对话

IPC 进程间通信 英文名 : interprocess communicate一共分为三大类。

2026-08-28 20:57:45 188

原创 [linux】系统 线程操作

线程是一个轻量级的进程,用来实现多任务并发。线程是操作系统任务调度的最小单位。进程是操作系统资源分配的最小单位。

2026-08-27 20:58:28 176

原创 【linux】多文件操作 进程创建 消亡 相关命令与函数

进程和程序的区别:1. 程序是一组数据指令集合,存储在硬盘空间,是静态的;2. 进程存储在内存空间,执行过程需要CPU参与(内存+CPU);3. 进程具备动态的生命周期,从启动到消亡。4. 程序运行起来产生一个进程;也可产生多个进程;5. 在一个进程中也可以执行多个程序。

2026-08-25 19:56:22 167

原创 【linux】多文件操作 文件IO 与 普通IO的区别

文件IO: Linux内核提供的文件操作接口。属于系统调用。学习接口:1. 打开文件 : open()2. 读文件、写文件 : read() 、write()3. 关闭文件 : close()1.函数接口。

2026-08-24 18:33:58 212

原创 【linux系统文件操作】手把手教学标准io操作

在man 函数中fputc;功能:向文件中写入一个字符c:就需要我们写入一个 字符或者字符对应的ASCII值stream:要写入的文件的文件流;举例:fputc(“w”,fp);返回值 成功 :写 入 字 符失败 :EOF = -1 (所以我们可以通过int 一个值接收值去判断)写完后指针向后移动✅️在这里和大家普及一下三个文件流FILE *stdin :标准输入流 -------------》标准输入设备:键盘。

2026-08-21 20:49:55 332

原创 【linux系统操作】 多文件之间的 读取 粘贴 复制

本文摘要主要介绍Linux文件操作的核心概念与方法。主要内容包括:1)内存与外存特性对比,强调文件存储的持久性优势;2)Linux七类文件类型(块设备、字符设备、目录、普通文件等);3)标准IO与文件IO两种操作方式,重点说明标准IO的fopen/fclose/fputc/fgetc等核心函数;4)文件流指针FILE*的作用及三种默认标准流(stdin/stdout/stderr)。文章系统阐述了Linux环境下文件操作的基础知识框架,涵盖文件打开模式、读写方法及重要注意事项。

2026-08-20 21:05:19 338

原创 【数据结构】栈 二叉树 算法以及时间复杂度的应用 快速排序思想

栈栈栈结构:只允许从一端进行插入和删除数据的线性存储结构,成为栈结构。数据插入和删除的这端成为栈顶,另一端成为栈底;数据的插入称为入栈/压栈, 数据的删除称为出栈/弹栈特点先进如的后面出栈的应用:解决回溯问题撤销功能、网页撤销功能缓存判断回文字符串,判断成对出现的符号有没有丢失。12321(回文数)

2026-08-19 21:10:23 448

原创 【数据结构】内核链表,链式队列,循环队列

Linux内核中使用到的一种链表形式本质:双向循环链表1. 普通链表将数据存储在结点中,程序中,一点确定了结点中存储得数据得数据类型,该链表再无法存储其他类型的数据。2. 内核链表将结点嵌入到要存储的数据结构体中,在项目工程中,一套链表操作,可以用来存储不同类型的数据类似于一下流程图内核提供宏:offsetof: 获取链表结点首地址到结构体开头的偏移量。container_of:利用结点的首地址-偏移量,获得结构体首地址。

2026-08-17 20:26:59 197

原创 【数据结构】双向链表的构造与使用

本文介绍了双向链表的基本概念和操作实现。双向链表相比单向链表增加了指向前驱节点的指针,支持双向遍历。主要内容包括:1.双向链表的结构体定义,包含数据域、前驱指针和后继指针;2.创建双向链表对象的初始化过程;3.头部和尾部插入节点的实现细节;4.头部和尾部删除节点的处理方法;5.链表销毁操作,通过循环调用头删并最终释放链表内存。文章重点展示了各关键操作的代码实现,包括节点插入时的空链表判断、指针调整等细节处理。双向链表通过维护前后指针,提高了数据操作的灵活性。

2026-08-17 19:55:51 14

原创 【数据结构】链表结构 如何 头插 尾插入 增删改查 操作

基本概念数据结构;存储一种或者多种特定关系的数据集合(如何组织和存储)程序设计=数据结构+算法数据与数据之间的关系逻辑结构:数据元素与元素之间的关系集合:数据元素与元素之间关系平等线性结构:数据元素与元素支架确定一对一的关系(顺序表(数组),链表,队列,栈)树形结构:元素与元素之间具有一对多的关系(二叉数)图形结构数据元素与元素之间多对多的关系A向上向下都可以检索到很多的数据元素物理结构顺序存储结构,1.一个连着一个存储,有连续性与(顺序表(数组))时间复杂度为o1。

2026-08-13 23:42:48 263

原创 [C语言]位运算,程序调试方法gdb 多文件管理 makefile

左移动 乘 2的3次方右移动 除 2的3次方我们可以使用安慰异或进行数字的调换,不借助三方的变量~ 大于 << >> 大于 & 大于 ^ 大于 |

2026-08-12 18:58:38 184

原创 [c语言基础]构造函数,结构体学习使用

int numstruct nums定义一个s的变量结构体类型 名称struct numint age;int sorce;定义的变量名称声明结构体类型的同时,定义了一个变量,变量的变量名mydate。

2026-08-06 20:42:55 46

原创 【C语言】指针函数 函数指针 指针数组 数组指针 秒通

指针数组,本质是数组,在数组中保存了若干个指针 int * a【5】 char* a【5】 char*p=NULL;4 char*p【5】={NULL}//部分初始化,全部初始化为空null 2))定义为已有字符串地址 char*p=“hello”;把h的首地址保存在p中 char*a【5】={"hello","string",“word”,”are”,“you”};定义了一个数组指针每个指针的

2026-08-05 17:42:17 291

原创 C【语言】指针

基类型*变量名基类型;该指针指向的空间存储的数据类型int float double void 构造类型类型说明符,说明后面的变量是一个指针变量名;遵循标识符的命名规则习惯用 p 开头 int*pmax char*ptmp64位占八个bit32 四指针变相保存的地址是目标的首地址。

2026-08-03 19:53:08 190

原创 【C语言基础】函数 函数的认识与使用 函数封装 一维二维函数的传参与使用

本文介绍了C语言函数的基本概念与使用方法。主要内容包括:1) 函数定义的三要素(返回值、函数名、形参表)及其语法规则;2) 函数调用的注意事项(参数个数/类型匹配、执行机制);3) 函数声明与多文件调用的方法;4) 参数传递机制(值传递、形参与实参关系);5) 递归调用的实现要点;6) 数组作为函数参数的传递规则(首地址传递、需额外传递长度)。通过求余函数示例和数组处理说明,阐述了模块化编程的思想,强调函数封装对降低耦合、提高代码复用性的重要性。

2026-07-30 19:51:22 137

原创 【C语言】数组的输入输出与排序

本文介绍了数组的基本概念和使用方法。主要内容包括:1.数组定义由类型说明符、数组名和常量组成,用于存储相同类型的数据;2.数组元素通过下标访问,需注意越界问题;3.数组初始化方式及注意事项;4.数组在内存中的存储特性(单一性、连续性、有序性);5.常见排序算法(选择排序、冒泡排序)及其特点;6.字符数组的特殊性,包括定义、初始化、输入输出及常用字符串处理函数(strlen、strcpy、strcat、strcmp)的使用。文章还特别强调了数组越界、初始化规则等注意事项。

2026-07-28 19:24:22 307

原创 【C语言基础】 循环结构的学习,水仙花数,回文数,n的阶乘

本文介绍了C语言中三种循环结构:for循环、while循环和do-while循环。重点讲解了for循环的语法结构(表达式1初始条件,表达式2执行条件,表达式3结束条件)及使用注意事项(分号位置、表达式省略规则等)。通过1到100累加和水仙花数示例演示for循环应用。同时说明了while循环和do-while循环的特点,指出do-while会先执行后判断。文章最后强调各种循环的语法细节,如避免死循环、大括号不可省略等关键点,并提供了数字逐位分解的循环实现示例。

2026-07-27 17:27:34 311

空空如也

空空如也

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

TA关注的人

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