自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动

本文介绍Linux内核驱动开发中的核心机制:内核定时器用于延迟或周期性任务,需注意其不可睡眠的上下文限制;platform总线模型通过设备树与驱动匹配,实现片上设备的统一管理;I²C子系统提供外设通信框架,依赖设备树描述和标准接口进行读写操作。此外,简要说明IIO(传感器统一接口)与USB子系统的基本用途。文章强调驱动调试要点,并建议按“GPIO→中断→platform/I²C”顺序学习,以构建完整的驱动开发知识体系。

2026-10-21 20:05:07 86

原创 嵌入式 Linux 驱动开发学习笔记:中断、等待队列与工作队列

本文系统介绍嵌入式Linux驱动中的中断处理、阻塞I/O、等待队列与工作队列机制。通过中断响应硬件事件,利用等待队列实现进程阻塞与唤醒,结合工作队列将耗时任务移至内核线程执行,有效分离上半部快速响应与下半部延后处理。强调上下文限制、同步机制选择及常见问题排查,帮助开发者理解各组件协作逻辑,提升驱动可靠性与系统性能。

2026-10-20 20:11:48 229

原创 嵌入式 Linux 驱动开发学习笔记:设备树、pinctrl 与 GPIO 驱动开发

本文系统梳理了嵌入式Linux驱动开发中设备树、pinctrl与GPIO的核心内容。通过设备树分离硬件描述与驱动逻辑,实现平台无关性;利用OF接口解析节点与属性,完成资源获取;借助pinctrl配置引脚复用及电气特性,确保GPIO功能正确启用;最后通过GPIO接口控制电平,实现LED等外设操作。以LED驱动为例,完整演示了从DTS定义到驱动实现的开发流程,并总结常见问题排查方法,强调“先验硬件、再查驱动”的调试思路,为嵌入式驱动开发提供实用指导。

2026-10-19 21:03:15 433

原创 嵌入式 Linux 驱动开发学习笔记(三)设备树、GPIO子系统、中断与外设驱动实战

传统LED驱动依赖硬编码寄存器地址,导致移植困难、复用性差。Linux引入设备与驱动分离思想,通过设备树(DeviceTree)描述硬件资源,实现硬件与驱动解耦。设备树以树形结构定义GPIO、中断等信息,驱动通过compatible匹配并解析reg、pinctrl、interrupts等属性,调用GPIO子系统控制LED或注册中断处理函数。按键等外设驱动基于此流程,完成硬件描述、资源获取、中断注册及用户接口提供,形成标准化的驱动开发范式。

2026-10-14 17:55:22 392

原创 嵌入式 Linux 驱动开发学习笔记(二)字符设备驱动、LED驱动、sysfs与misc设备

本文系统介绍了嵌入式Linux中字符设备驱动开发的核心内容,涵盖驱动作用、分类、框架流程及关键接口。重点讲解了基于file_operations的驱动设计、设备号注册、copy_from_user/copy_to_user数据交互、GPIO控制原理,并通过LED驱动实例演示完整开发流程。结合设备树与驱动分离思想、sysfs文件系统及misc设备简化注册机制,强调驱动分层设计与模块化开发的重要性,最终实现用户程序对硬件的高效控制。

2026-10-12 21:43:43 194

原创 嵌入式 Linux 系统移植与驱动开发学习笔记

嵌入式Linux系统由开发环境、交叉编译工具链、U-Boot、Linux内核、设备树(DTB)和根文件系统(Rootfs)组成。启动流程为:上电→BootROM→U-Boot初始化硬件并加载zImage与dtb→传递bootargs参数→启动内核→初始化kernel_init→挂载Rootfs→执行rcS脚本→进入Shell。开发阶段常用TFTP+NFS实现网络启动,提升效率。驱动通过ioremap映射物理地址,以模块形式(.ko)加载,实现对硬件的控制。整个过程体现了“内核提供核心能力,用户空间运行环境由

2026-10-09 19:52:40 640

原创 【嵌入式 ARM 驱动开发】PWM 脉宽调制原理与 GT9147 电容触控屏驱动开发详解

本文详解嵌入式ARM系统中PWM与电容触控屏(GT9147)的驱动开发。PWM通过计数器、周期与比较寄存器实现占空比调节,结合引脚极性控制输出;GT9147驱动则基于I2C通信,完成复位、ID验证、中断配置及坐标读取,采用中断+I2C方式实现多点触控,确保高效人机交互。

2026-09-29 20:04:50 218

原创 【ARM嵌入式开发】LCD液晶屏显示原理、色彩模式与显存地址映射详解

本文系统讲解LCD屏幕基础原理,涵盖分辨率与尺寸对清晰度的影响、像素色彩模式(如RGB565、ARGB8888)、显存(Framebuffer)布局与地址计算,以及通过指针操作实现像素点绘制。重点介绍LCD控制器关键时序信号(PCLK、HSYNC、VSYNC、DE)及驱动配置三步法:引脚复用、时钟设置与寄存器配置。强调掌握显存映射与时序原理是嵌入式图形开发的基石,为后续裸机绘图、Linux帧缓冲操作及图形库移植奠定基础。

2026-09-29 11:57:07 370

原创 【ARM嵌入式开发】SPI总线协议详解与ADXL345加速度传感器应用指南

SPI是一种高速、全双工、同步串行通信协议,广泛用于OLED、Flash、传感器等外设。其4根信号线(SCLK、MOSI、MISO、CS)支持高传输速率(可达几百MHz),优于I2C和UART。SPI工作模式由CPOL和CPHA决定,共四种模式,需根据设备匹配配置。通信中“读即是写”,读取数据时需发送Dummy字节以生成时钟。以ADXL345为例,原始数据经0.0039g/LSB的刻度因子转换即可得实际加速度值。掌握其特性与读写机制对嵌入式开发至关重要。

2026-09-27 18:45:45 362

原创 【嵌入式系统开发】I2C设备(LM75/AT24C02)应用与 ADC 模数转换原理及滤波算法详解

本文系统讲解I2C总线在嵌入式系统中的典型应用,涵盖AT24C02 EEPROM与LM75数字温度传感器的特性及使用方法。深入剖析ADC模数转换原理,包括采样过程、逐次逼近法(SAR ADC)与分辨率计算公式。结合实际案例,介绍均值滤波、低通滤波、高通滤波及卡尔曼滤波等常见信号处理算法,提升数据稳定性与精度,适用于温度、液位等传感器数据采集系统的优化设计。

2026-09-25 00:05:19 562

原创 【嵌入式必备】深入理解 I2C 总线通信协议:时序图解与读写流程详解

I2C(Inter-Integrated Circuit)是嵌入式开发中最常用的同步串行总线之一。本文基于底层时序,详细剖析 I2C 的起始/停止信号、数据有效性、ACK/NACK 应答机制,并结合实战图解完整拆解 I2C 的写时序与读时序流程。

2026-09-23 19:26:21 699

原创 【ARM 裸机开发】EPIT/GPT 定时器详解与 UART 串口通信实战

EPIT为32位向下计数定时器,支持自由运行与重装载模式,适用于周期中断及软硬件消抖;GPT为32位向上计数定时器,具备输入捕获与输出比较功能,可实现精准延时、测速与PWM输出。UART结合Modbus协议构建单主多从通信拓扑,采用RS485差分传输与CRC校验提升抗干扰能力,配合RTS/CTS流控防止数据丢失,合理配置UBIR/UBMR寄存器确保115200bps等波特率精度。

2026-09-22 19:16:32 467

原创 ARM裸机开发Day06|IMX6ULL汇编CPS指令、启动流程、GIC中断优先级、时钟系统PLL/PFD详解

CPS指令(ARMv6+)可高效切换模式与开关中断,简化汇编代码。裸机启动需完成7步:向量表设置、重映射、栈分配、开中断、清BSS、开启I-Cache、跳转main。GICV2优先级越小越高,IMX6ULL支持32级,分抢占与子优先级。遵循OCP原则,扩展功能不修改原有代码。时钟系统以24MHz晶振为基础,通过PLL倍频、Prescale整数分频、PFD分数分频生成多路时钟,配置顺序为:主频→PFD→根时钟。

2026-09-21 18:41:37 757

原创 ARM裸机开发|IMX6ULL GIC中断详解,中断流程、GIC版本分类、CP15协处理器

IMX6ULL基于Cortex-A7内核,采用GICV2中断控制器管理SPI、PPI、SGI三类中断。中断流程包括外设配置、GIC仲裁分发、CPU切换至IRQ模式、跳转异常向量表执行服务函数,并通过C_EOIR通知中断结束。关键寄存器如GPIO1_ICR2(触发方式)、IMR(使能)、ISR(状态清零)及GIC的C_IAR(读中断号)、C_EOIR(结束中断)协同工作。利用CP15协处理器(mrc/mcr指令)实现Cache控制与异常向量表重映射,提升系统效率。inline内联函数编译时展开,减少调用开销。

2026-09-20 20:07:56 187

原创 ARM裸机开发Day04|IMX6ULL汇编&C点灯实操,Makefile、链接脚本、段解析

本文对比S3C2440与IMX6ULL存储介质特性,阐述IMX6ULL需将代码加载至DDR运行,并详细讲解裸机开发中寄存器操作、volatile关键字作用、ARM交叉编译工具链流程(gcc→ld→objcopy)、程序段划分(.text/.data/.bss等)、Makefile三要素及工程目录规范,系统总结了基于IMX6ULL的裸机开发核心知识点。

2026-09-18 22:30:19 199

原创 ARM裸机开发Day03|IMX6ULL汇编点亮LED,寄存器、内存、中断梳理

本文回顾IMX6ULL裸机开发基础:涵盖SVC软中断与硬中断区别、GPIO分组、开发环境配置(VSCode+Ubuntu+FileZilla)、DDR3内存布局及栈划分。重点讲解LED点灯三大模块——IOMUXC引脚复用、GPIO寄存器操作与CCM时钟使能,强调裸机开发中时钟开启的必要性。总结三种点灯方式:汇编、C语言及NXP固件库,并指出开发组合高效便捷。

2026-09-17 20:18:47 383

原创 ARM入门学习Day02|ARM32汇编核心指令、栈操作、C与汇编混合编程

本文系统介绍ARM汇编核心指令:算术加法(ADD)、状态寄存器操作(MRS/MSR)、内存访问(LDR/STR)、位操作(ORR)、跳转(B/BL/BX)及栈管理(STMFD/LDMFD),并阐述汇编与C语言混合编程的参数传递与返回机制,涵盖模式切换、函数调用、现场保护等关键应用,体现ARM架构的高效性与灵活性。

2026-09-16 18:44:36 571

原创 ARM入门学习Day01|ARM体系架构核心知识点梳理

本文系统介绍了ARM架构基础知识点:从溢出与CPSR状态寄存器、栈机制及SP/R13等通用寄存器作用,到RISC精简指令集特点与Cortex-A/R/M系列应用区分;涵盖冯诺依曼架构、大小端模式、MMU虚拟内存管理、交叉编译、Flash存储特性、中断向量表结构,以及逻辑右移(LSR)、算术右移(ASR)、循环右移(ROR)三种移位操作,全面构建嵌入式开发核心知识体系。

2026-09-15 22:02:48 211

原创 DS18B20数字温度传感器超详细学习笔记|51单片机单总线通信

DS18B20是一款非常经典的单总线数字温度传感器,只需要一根GPIO口就可以完成和单片机的数据交互,硬件接线简单,广泛用于环境测温、设备内部温度采集。本文整理DS18B20关键参数、单总线原理、完整测温流程、复位/写/读时序,适合51单片机入门学习

2026-09-14 17:49:53 208

原创 单片机Day03|UART/I2C/SPI/CAN通信协议全面梳理

单片机外设通信是嵌入式开发的核心基础,常用四大通信协议:UART、I2C、SPI、CAN。本文结合学习笔记,梳理单工/半双工/全双工、串行并行、同步异步、UART串口时序、51单片机串口配置、Modbus主从通信、存储类型data/xdata、电平标准等知识点,适合单片机入门复习。

2026-09-12 18:46:31 273 1

原创 51单片机Day02学习笔记|GPIO、中断、定时器、PWM、蜂鸣器原理

本文系统讲解51单片机核心外设:GPIO用于输入输出控制,支持上拉、下拉等模式,常用于按键检测;中断系统实现事件响应,具备优先级与嵌套机制;定时器通过初值计算实现精准延时与PWM生成;PWM用于调节亮度、音调等;蜂鸣器分有源(直通即响)与无源(需PWM驱动);结合时序分析,可应用于车载中控等复杂场景。

2026-09-11 20:44:00 575

原创 51单片机Day01学习笔记|硬件基础、位运算、处理器概念、数码管原理

最近开始系统学习51单片机,第一天主要梳理硬件基础概念、C语言位运算、各类处理器区别、三极管原理以及数码管动态显示原理。本篇把课堂笔记整理出来,方便自己复盘,也给刚入门单片机的同学做参考。

2026-09-10 21:22:26 116

原创 C语言手写简易HTTP服务器,实现HTML网页+SQLite登录联动|学习笔记

今天学习了HTML基础网页语法,同时用C语言Socket手写极简HTTP服务器,结合SQLite轻量数据库,完成前端登录表单、后端账号校验、页面跳转的完整小Demo。搞懂浏览器与服务端之间HTTP请求响应的基础流程,记录完整学习过程与源码。

2026-09-07 21:24:11 222

原创 Linux应用软件编程|嵌入式轻量级数据库SQLite3完整学习笔记(命令行+C语言API)

在嵌入式Linux开发中,我们可以直接使用普通文件存储数据,但是普通文件做增删改查效率很低,需要自己解析文本、二进制格式,开发成本高。SQLite3是一款开源、轻量级、文件型嵌入式关系数据库,不需要独立数据库服务进程,直接以单个.db文件存储全部数据,非常适合嵌入式设备本地数据存储。

2026-09-05 18:57:25 340

原创 Linux网络编程|IO多路复用poll & epoll深度解析(对比select、LT/ET触发、编程实例)

前面我们学习了select实现IO多路复用,select存在几个硬伤:最大只能监控1024个文件描述符、每次调用都要拷贝全部fd集合、返回后需要遍历所有fd查找就绪事件。为了解决select的短板,Linux又提供了poll,进一步演化出高性能的epoll(Linux特有)。本文从poll讲起,对比select/poll/epoll三者差异,讲解epoll的API、水平触发LT、边缘触发ET,附带核心伪代码,适合嵌入式Linux网络编程进阶学习。 前置知识:掌握TCP套接字、select IO多路复用

2026-09-04 20:25:51 317

原创 Linux网络编程|TCP并发服务器四种实现方案(多进程、多线程、线程池、IO多路复用select)

普通单循环TCP服务器,同一时刻只能处理一个客户端连接,只有当前客户端断开之后,才能接收下一个客户端,无法满足多客户端同时接入的业务需求。实际项目需要TCP并发服务器,可以同时服务多个客户端。本文基于教材PDF,详解四种主流并发实现模型:多进程、多线程、线程池、IO多路复用(select),分析各自优缺点、适用场景、核心代码逻辑,适合嵌入式Linux网络开发入门学习。 前置基础:掌握TCP基础编程socket/bind/listen/accept/recv/send。

2026-09-03 18:50:18 382

原创 Linux网络编程|HTTP协议详解(报文、请求方法、状态码)

前面我们学习了TCP传输层协议,三次握手、四次挥手、TCP粘包问题。HTTP是工作在TCP之上最经典的应用层协议,默认端口80;HTTPS为加密版本,默认443端口。浏览器访问网页、嵌入式设备调用网络API、物联网设备上报数据,底层几乎全部使用HTTP/HTTPS。本文基于教材PDF整理,讲解HTTP工作流程、请求报文、响应报文、常用请求方法、状态码、长短连接,附带接口调用示例,适合嵌入式Linux网络编程入门。

2026-09-02 18:38:56 241

原创 Linux应用软件编程|TCP协议与Socket全套编程(三次握手、四次挥手、报文头部、核心机制)

上一篇学习了UDP协议,UDP是无连接、面向数据报,不可靠,实时性高。本篇学习TCP传输控制协议,TCP是面向连接、可靠、面向字节流协议,互联网绝大多数业务HTTP、HTTPS、FTP、MQTT底层都基于TCP。本文结合课程PDF,讲解TCP特点、三次握手、四次挥手、TCP报文头部、全套Socket API、TCP可靠性核心机制。

2026-09-01 20:19:06 2029

原创 Linux应用软件编程|网络编程基础(OSI/TCP-IP、IP地址、UDP Socket全套)

前面学习了文件IO、多任务进程线程、IPC进程间通信。Socket套接字属于IPC中的网络通信方式,实现不同主机之间进程通信,是嵌入式Linux开发非常重要的知识点。本文整理网络分层模型、IP地址基础、端口号、字节序转换、UDP全套API,适合入门学习复习。

2026-08-31 20:07:27 347

原创 Linux系统编程|信号进阶 + SystemV IPC(消息队列、共享内存)

上一部分讲解了信号基础signal()注册信号处理函数,本文继续学习信号发送kill、pause、alarm定时器,然后重点学习SystemV IPC三大对象:消息队列、共享内存、信号量集。

2026-08-29 21:33:24 731

原创 Linux系统编程|进程间通信IPC全套详解(1)(管道、信号)

在Linux系统中,进程是资源分配的最小单位,每个进程拥有独立的虚拟地址空间,进程与进程之间天然隔离,不能直接访问对方内存空间。但实际业务开发中,多个进程经常需要交换数据、同步状态、互相通知事件,于是操作系统提供了IPC(InterProcess Communication,进程间通信) 这套机制,用来完成进程之间的数据交互与协同工作。

2026-08-28 21:41:02 180

原创 Linux多任务编程:进程与线程全面解析(fork、僵尸/孤儿进程、线程互斥、死锁)

在Linux应用软件开发中,多任务是核心能力,主要分为多进程和多线程两套实现方案。很多面试经常考察进程线程区别、僵尸孤儿进程、互斥锁、信号量、死锁四大条件等知识点。本文基于学习笔记整理,包含原理、API、代码片段,适合嵌入式Linux开发者学习复习。

2026-08-27 19:54:26 382

原创 Linux系统编程|exec函数簇、进程线程完整详解

本文基于Linux应用编程学习笔记,从exec进程程序替换讲起,覆盖进程退出回收、僵尸/孤儿进程,最后讲解线程原理、进程线程对比与pthread编程入门,配套原理图和可运行Demo代码。

2026-08-26 20:02:49 236

原创 【Linux应用编程】深入理解Linux多任务机制:进程原理、状态转换与进程控制实战

本文介绍了Linux系统中多任务处理与进程管理的核心概念。首先区分了并发与并行的区别,阐述了进程作为资源分配基本单位的特性,包括进程内存布局和状态转换。详细讲解了进程调度算法和Linux七态模型,列举了常用进程管理命令。重点分析了fork()创建子进程的机制,以及孤儿进程和僵尸进程的处理方法,强调通过wait()/waitpid()回收子进程的重要性。文章最后指出进程间通信(IPC)是实现多进程协同的关键技术。全文从理论到实践全面剖析了Linux进程管理机制。

2026-08-25 19:16:48 1635

原创 【Linux应用编程】目录IO、常用工具函数与 Framebuffer 图像绘制详解

本文介绍了Linux系统中目录操作、格式化函数和Framebuffer帧缓冲的核心技术。主要内容包括: 目录I/O操作:详细讲解opendir、readdir、closedir等目录操作API,以及struct dirent结构体,并给出遍历/dev目录的实战代码示例。 系统辅助函数:介绍fprintf、dprintf、sprintf等格式化输出函数,字符串截取函数strtok,以及errno错误处理机制。 Framebuffer帧缓冲技术:解释帧缓冲概念,说明操作流程(打开设备、获取参数、内存映射等),重

2026-08-24 21:02:08 206

原创 Linux文件I/O与系统调用详解

除了普通的文本与二进制文件外,网络 Socket、管道、硬件设备(如串口、显示屏、触摸屏等)在应用层均被抽象为文件进行操作。与 ANSI C 标准库提供的标准 I/O(如 fopen、fread、fwrite)不同,文件 I/O 不经过 C 库缓冲,直接由内核处理,因此。,深入讲解其核心 API(open、read、write、lseek、close)、文件描述符(FD)的分配机制,并深度对比。而在文件 I/O 中,内核使用。// 2. 打开目标文件(只写,不存在则创建,存在则清空,权限0664)

2026-08-23 10:33:41 819

原创 Linux标准IO:gets与fgets、fread/fwrite、文件流定位、时间函数详解

fgets、fputs适合操作ASCII文本文件,不适合二进制文件,因为fputs无法写入数值为0的字节(字符串结束符`\0`)。gets()和fgets()都是读取字符串的函数,但gets函数极度危险,已经被C11标准废弃,开发中一律使用fgets。注意:scanf()读取字符串时,遇到空格、tab、换行符就停止读入,不能读取带空格的整行输入。/* 一年中的第几天,1月1号为0 */// 读:从文件读取nmemb个元素,每个元素size字节,存入ptr内存。// 复位到文件开头,后续可以继续读取内容。

2026-08-21 19:26:01 160

原创 Linux应用软件编程|Linux文件操作(标准IO详解)

本文介绍了Linux C开发中的标准IO操作,重点讲解了标准IO的基本概念、文件类型、核心API及使用注意事项。主要内容包括:1. Linux七种文件类型区分;2. 标准IO与文件IO的区别;3. 标准IO操作流程及FILE指针;4. 核心API详解(fopen/fclose/fputc/fgetc/fputs/fgets);5. 常见易错点(NULL判断、文件描述符泄露、读取限制等)。文章强调标准IO具有跨平台移植性、自带缓冲区的特点,并提供了实用案例和开发建议,适合Linux C开发者学习文件操作基础。

2026-08-20 21:06:31 982

原创 【数据结构】哈希表+算法复杂度与经典排序查找(C语言)

本文摘要:文章系统介绍了哈希表和算法基础两大主题。哈希表部分详细阐述了哈希函数、冲突处理机制(开放定址法和链地址法)及其优缺点;算法部分重点讲解了五大评价指标、时间复杂度分析(大O表示法)以及经典排序(插入排序、希尔排序、快速排序)和查找算法(二分查找)的实现与特性。全文通过C代码示例,深入浅出地展示了数据结构和算法的核心概念与应用要点。

2026-08-19 23:17:59 693

原创 C语言数据结构——二叉树完整学习笔记(概念、满/完全二叉树、遍历)

本文系统介绍了二叉树的核心概念与遍历方法。主要内容包括:1. 树结构基础术语解释;2. 二叉树的定义与特点;3. 两种特殊二叉树(满二叉树和完全二叉树)及其性质;4. 深度优先(前序、中序、后序)和广度优先(层序)四种遍历方式,分别给出遍历规则和应用场景;5. 通过具体示例演示不同遍历顺序;6. 提供C语言二叉树结点结构体模板和前序遍历递归代码框架。文章强调二叉树在文件系统、数据库索引等领域的重要性,适合嵌入式开发和C语言初学者复习数据结构知识。

2026-08-18 19:30:55 203

空空如也

空空如也

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

TA关注的人

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