- 博客(23)
- 收藏
- 关注
原创 嵌入式Linux实战:ARM平台系统移植、内核编译与驱动开发全攻略
以在目录下添加demo.c为例:创建驱动文件修改同层 Makefile修改同层 Kconfig,添加配置项重新配置编译本文完整覆盖:Linux 三大组件网络配置(NAT/桥接)内核编译完整命令内核添加驱动步骤Uboot 命令与启动参数NFS/TFTP 远程启动上电启动流程。
2026-04-08 20:50:16
362
原创 嵌入式底层实战:从寄存器到GPIO控制,吃透ARM架构引脚配置逻辑
这篇博客基于直播回放和寄存器文档,从“为什么要配寄存器”到“具体怎么配”,完整拆解了ARM架构下GPIO的核心逻辑。GPIO不是引脚,是外设控制器,依赖SW_MUX和SW_PAD两个核心寄存器;SW_MUX决定功能(GPIO/外设),SW_PAD决定特性(上拉/下拉/驱动),两者缺一不可;复位后默认值不可信,项目中必须显式配置,这是稳定运行的前提。掌握了这些底层逻辑,你再写代码时,就不再是“复制粘贴库函数”,而是“精准指挥硬件执行”——这才是嵌入式工程师的核心竞争力。
2026-03-24 20:01:26
374
原创 嵌入式底层核心逻辑拆解:从SoC架构到ARM生态,读懂芯片的“底层语言”
真正的嵌入式高手,从不只盯着代码语法,而是理解芯片的底层逻辑:知道为什么内存容量是2的幂,知道跳转指令会影响性能,知道异常处理如何保障系统稳定。这些知识不会直接体现在代码里,却能决定你的代码是否高效、是否稳定。如果你正在学嵌入式开发,别急着上手开发板写代码——先吃透这些底层逻辑,再结合之前讲解的Linux高并发、SQLite数据持久化等技术,才能真正打通“硬件-系统-应用”的全链路,成为能解决核心问题的嵌入式工程师。
2026-03-19 19:44:52
439
原创 嵌入式入门指南:一文读懂串口通信(UART)与常见协议
通常需要四根线(时钟线SCLK、主机输出从机输入MOSI、主机输入从机输出MISO、片选CS),全双工,速率高,但占用引脚多。通过Modbus这样的协议,串口通信就从简单的字节流传输,上升为了有明确语义的“问答”机制,从而能够可靠地控制复杂系统。仅有底层的物理连接和字节帧格式还不够,设备之间需要能理解彼此发送的“命令”和“数据”,这就需要。(文档示例中未体现,实际Modbus RTU必有),校验通过后,解析地址码、功能码和数据。,表示波特率为9600bps,8位数据位,无校验,1位停止位。
2026-03-17 20:42:10
283
原创 51单片机基础:从GPIO、中断到定时器与PWM的入门指南
从控制引脚电平的GPIO,到应对突发情况的中断,再到提供精准时间基准的定时器,最后到生成模拟信号的PWM,这些构成了51单片机最核心的功能骨架。理解并掌握这些基础知识,是进行LED闪烁、按键扫描、蜂鸣器报警乃至电机控制等更复杂嵌入式应用开发的坚实第一步。通过灵活的编程,将这些模块组合运用,就能让小小的单片机实现丰富多彩的功能。
2026-03-16 10:02:45
381
原创 SQLite3事务与数据库编程实战:从基础到工程应用
事务的本质:通过ACID特性保证数据一致性,通过批量操作一次提交提升执行效率,是嵌入式数据库批量操作的必备技巧;查询的核心:掌握回调函数的固定原型和调用规则,实现结果集的灵活处理,是SQLite3 C编程的重点和难点;编程的规范:遵循“打开-执行-异常处理-释放”的通用流程,做好资源释放和异常回滚,让代码更健壮、更易维护。SQLite3作为嵌入式数据库,在Linux后台开发中常用于本地配置存储、日志记录、轻量级数据缓存等场景,而事务的合理使用能让数据库操作更高效、更可靠。
2026-03-10 19:21:01
368
原创 从进程到线程,聊聊Linux服务器的并发模型与数据库搭配实践
今天我们从基础的并发模型入手,讲解了进程版和线程版TCP服务器的实现、坑点与解决方式,也介绍了高并发场景的进阶方案epoll,最后结合嵌入式数据库SQLite3,完成了“网络并发+数据持久化”的基础链路讲解,核心要点总结:进程版并发:稳定性高,开销大,适合低并发、高稳定性需求的场景,重点解决僵尸进程和文件描述符泄漏;线程版并发:轻量级,开销小,适合中小并发场景,重点解决线程资源回收、参数传递和线程安全;epoll:I/O多路复用的高并发方案,突破进程/线程的数量限制,是高并发服务器的核心技术;
2026-03-09 19:15:43
315
原创 续|Linux网络编程高阶:IO多路复用(select/poll/epoll)实战
IO多路复用:允许单线程或单进程同时监测多个文件描述符(FD),等待其中一个或多个FD的IO操作就绪(可读/可写/异常),再集中处理就绪的FD,避免为每个连接创建独立线程/进程,从而减少资源开销、提升并发能力。核心价值解决“一连接一线程”的资源浪费问题(线程栈8M,千级连接需占用数G内存);单线程处理多连接,减少线程切换开销,提升CPU利用率;支持海量并发连接(epoll可支持十万级以上FD)。
2026-03-09 09:09:26
445
原创 续|Linux网络编程进阶:数据封包拆包、Wireshark抓包与HTTP协议实战
本文围绕网络编程的进阶知识点,讲解了数据封包拆包的底层逻辑、Wireshark抓包工具的使用,以及HTTP协议的解析与实战,核心知识点可总结为:网络数据的传输本质是逐层封包与拆包,发送方添加协议头,接收方剥离协议头,最终获取应用层原始数据;Wireshark是网络调试的核心工具,通过选择接口、设置过滤条件,可实时捕获并分析数据包,定位TCP连接、协议交互等问题;HTTP是基于TCP的应用层协议,采用“请求-响应”模型,报文格式固定(请求行/状态行+首部行+空行+实体主体);
2026-03-07 22:00:00
794
原创 续|Linux网络编程:TCP协议核心解析与实战开发
在数据块前添加数据头,数据头中包含数据体的长度(核心),还可添加数据类型、版本号等信息,接收方先读取数据头,获取数据体长度,再按长度精准读取数据体。优点:灵活通用,无边界冲突,支持变长数据传输,是工业级开发的主流方案;缺点:需自定义协议格式,实现稍复杂。自定义协议示例// 定义数据头+数据体的协议格式int type;// 数据类型:1-聊天消息,2-文件传输// 数据体的实际长度// 预留字段,方便协议扩展// 数据头// 数据体,存储实际数据} TCP_MSG;
2026-03-07 17:50:04
418
原创 续|Linux进程间通信与网络编程:从单机到跨主机的通信实现
通信的进程运行在不同的主机上,通过网络介质(双绞线、光纤、无线信道)实现数据传输,而非依赖内核的本地资源。实现跨主机进程通信的核心是网络协议栈,它定义了数据传输的格式、规则和流程,让不同主机的进程能“读懂”彼此发送的数据。我们日常接触的网络通信,都是基于标准化的协议模型实现的。
2026-03-03 21:15:36
368
原创 续|Linux多线程与进程间通信:信号量进阶与IPC全解析
进程是系统中独立的资源分配单位,进程间的内存空间相互隔离,无法像线程那样直接共享数据,因此需要专门的进程间通信(Interprocess Communication,IPC)机制实现数据交互和同步。古老的通信方式:无名管道、有名管道、信号(signal),实现简单,适用于基础的进程通信场景;System V IPC对象:共享内存、消息队列、信号量集,基于内核对象实现,通信效率更高,适用于复杂场景;Socket通信:基于网络协议,支持跨主机的进程通信,是网络编程的核心。本文重点讲解前两类。
2026-03-01 17:23:48
786
原创 一文吃透 Linux 多线程编程:概念、操作与同步互斥
进程:系统中最小的资源分配单位,分配CPU、内存等系统资源,拥有独立的用户空间内存(0~3G)。线程:系统中最小的执行单位,执行具体的代码逻辑,本身不独立分配资源,而是共享所属进程的资源。Linux多线程编程是系统编程的核心内容,其核心优势在于轻量级、资源共享、通信高效,适合处理轻量级并发任务。本文梳理了多线程的核心知识点:线程与进程的本质区别:进程是资源分配单位,线程是执行单位,线程共享进程资源仅私有栈区;
2026-02-26 20:08:08
693
原创 C语言进阶:结构体、共用体、枚举与位运算全解析
结构体是C语言中最核心的自定义数据类型,用于将不同类型的数据封装成一个整体,解决了单一基本数据类型无法描述复杂对象的问题。结构体通过`struct`关键字定义,语法如下:// 定义学生结构体struct stu// 姓名int age;// 年龄int score;// 成绩使用时可直接声明变量,也可通过`typedef`简化类型名:// 简化结构体类型名Stu s1;// 等价于 struct stu s1;type define 注意!!
2026-01-26 19:55:55
589
原创 C语言指针:从本质到实战的核心解析
很多人初学指针会陷入“符号迷局”,先抛开复杂语法,记住核心结论:**指针是存储“内存地址”的变量**。关键概念拆解1. 内存地址:计算机给每一块内存分配的唯一编号(类似门牌号)。- 32位系统中,地址占4个字节(32位二进制);- 64位系统中,地址占8个字节(64位二进制)。2. 指针变量:专门用来存放“内存地址”的变量,其类型决定了“从该地址开始能操作的内存大小”。举个直观例子:// 普通变量:存储数据本身int a = 10;
2026-01-21 20:55:52
601
原创 深入理解C语言预处理与存储关键字
今天想和大家聊聊C语言中两个核心又容易混淆的知识点:**存储类型关键字** 和 **预处理机制**。C语言编译前会经过**预处理阶段**,由预处理器处理以 `#` 开头的指令,核心作用是“文本替换”,不涉及语法解析。// 替换为3.14*(3)*(3) → 正确。printf("圆面积:%f\n", PI * r * r);// 替换为3.14*2*2。#define S(r) (PI*(r)*(r)) // 加括号避免优先级问题。// 调用S(2+1) → 3.14*2+1*2+1 → 错误结果。
2026-01-20 20:42:44
362
原创 函数与递归:C语言核心知识点梳理
今天深入梳理了C语言中函数、递归以及数组操作的核心知识点,结合实操案例总结了这些基础但关键的内容,分享给同样在学习C语言的小伙伴~
2026-01-19 21:49:56
521
原创 数组排序算法学习笔记:冒泡、选择、插入与二分查找
这些基础算法是编程的核心基石,理解其思想和复杂度分析,能帮助我们在实际开发中选择合适的算法解决问题。后续会继续学习快速排序、归并排序等更高效的排序算法,持续更新~
2026-01-15 22:10:05
357
原创 C语言数组与循环:从基础语法到实战应用
数组定义的核心格式为:`数据类型 数组名[数组长度];`,三部分缺一不可:// 定义存储10个int类型数据的数组- **数据类型**:指定元素类型(int/float/char等);- **数组名**:符合标识符规则的自定义名称(如score、a);- **数组长度**:必须是常量(不可用变量),指定元素个数。循环部分1. `for`循环的初始化表达式仅执行1次,更新表达式在循环体执行后执行;2. `while`循环务必写更新表达式,避免死循环;
2026-01-14 20:45:43
616
原创 吃透C语言流程控制:选择结构的核心逻辑与实战
选择结构是C语言流程控制的核心,掌握它的关键在于:1. 理清“表达式真假”的判断逻辑(关系+逻辑运算符);2. 熟练if的三种分支形式,适配不同判断场景;3. 掌握switch的适用场景和break的核心作用;4. 记住“if灵活、switch简洁”的选择原则。后续会继续学习循环结构,让程序具备“重复执行”的能力,一步一个脚印吃透C语言的核心逻辑~
2026-01-13 21:16:26
567
原创 C语言 输入输出函数
1. `getchar/putchar`:专注单个字符的输入输出,适合简单字符处理;2. `printf`:格式化输出的核心,重点掌握占位符和格式修饰符;3. `scanf`:格式化输入的核心,注意地址符`&`、占位符匹配、空白字符处理;4. 输入输出的本质是数据在“键盘→内存→屏幕”之间的流转,理解内存地址和格式转换是关键。希望本文能帮助大家攻克C语言输入输出的难点,建议多敲代码、多试案例,真正做到融会贯通。
2026-01-12 20:15:33
662
原创 C 语言学习日记(第二天):数据类型、运算符与表达式
核心收获理解了数据类型的 “存储本质”—— 不同类型是对内存的不同划分规则。易错点整型溢出(如 unsigned short 65535+1=0);浮点型精度问题(避免直接用 == 比较浮点数);字符型的 ASCII 码转换(大小写、数字字符的偏移量);
2026-01-09 20:08:36
763
原创 初见Linux
Linux是一套免费使用和自由传播的类Unix操作系统,由Linus Torvalds基于Minix开发,衍生出众多发行版:**Ubuntu**(新手友好)、RedHat、CentOS,甚至Android底层也基于Linux内核。与Windows、macOS不同,Linux以“一切皆文件”为核心思想,且更强调命令行操作,稳定性和开源性使其成为服务器、嵌入式领域的主流。本文从Linux基础认知到核心命令,覆盖了新手入门的核心内容。
2026-01-08 21:03:17
680
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅