自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ARM嵌入式学习(五)---IMX6ULL外部中断

摘要:本文详细解析了ARM中断处理机制,重点介绍了三类中断源(SGI、PPI、SPI)及其特性,阐述了异常向量表与中断服务函数表的区别与联系。通过按键中断实例,完整呈现了从中断触发到返回的流程,包括硬件自动操作、现场保存、中断号获取、C语言分发处理等关键环节。文章特别强调了7个易错点,如LR修正、EOIR写入、中断标志清除等,并指出不同CPU模式需配置独立栈空间。整个中断流程可概括为:外设触发→GIC接收→硬件跳转→汇编处理→C函数执行→恢复现场返回。

2026-04-02 21:00:56 626

原创 ARM嵌入式学习(四)--- C语言应用:led、beep、key

本文介绍了基于i.MX6ULL处理器的嵌入式系统开发流程。主要内容包括:1.汇编启动代码完成异常向量表设置、工作模式切换和栈初始化;2.主函数通过CCM模块使能时钟,实现按键控制LED和蜂鸣器的功能;3.LED、蜂鸣器和按键的驱动实现;4.详细解析了BSP和SDK的概念与作用;5.完整的Makefile构建系统,包含编译流程、关键注意事项和自动生成规则。特别强调了ARM处理器多模式栈初始化的必要性,以及Makefile中启动文件顺序的重要性。整个系统实现了从底层硬件驱动到上层应用开发的完整流程。

2026-04-01 19:52:37 497

原创 ARM嵌入式学习(三)---汇编应用:LED点亮

本文详细介绍了i.MX6ULL裸机开发中GPIO控制LED的实现过程。主要内容包括:硬件原理分析、GPIO配置四步法(功能选择、电气特性、方向设置、电平输出)、裸机代码结构设计,以及完整的编译链接流程(编译生成.o→链接为.elf→转换为.bin→反汇编调试)。重点阐述了寄存器配置方法、运行地址设置和SD卡烧写步骤,并总结了裸机开发的注意事项。通过该实验,掌握了ARM Cortex-A7架构下GPIO的底层驱动方法,为后续外设开发奠定了基础。

2026-03-31 20:18:22 589

原创 ARM嵌入式学习(二)---ARM 汇编与中断学习笔记

本文系统介绍了ARM汇编语言的核心知识体系,主要内容包括:C语言基础数据类型与变量特性;ARM汇编伪操作(数据定义、符号定义等)及其应用;汇编源程序的段式结构(代码段与数据段);ARM指令集六大分类及常用指令;指令格式与条件码执行机制;函数调用原理与栈操作实现;工作模式切换方法;以及SWI软中断处理流程。重点剖析了数据处理指令、堆栈操作、混合编程规范和中断处理机制,为ARM裸机开发奠定了理论基础。掌握这些核心概念对理解ARM架构、编写高效底层代码至关重要。

2026-03-30 21:13:38 846

原创 ARM嵌入式学习(一)---ARM基础概念学习

本次学习围绕ARM处理器体系结构展开,系统梳理了ARM架构核心概念、硬件组成、工作模式与异常处理机制。明确了ARM作为RISC架构的定位及其与普通单片机的区别,掌握了Cortex-A/M/R三大系列的应用场景;区分了RAM、ROM、Flash的特性差异,以及CPU/MCU/MPU/SOC的不同定位。深入学习了ARM内部寄存器(R0~R12、PC、LR、SP、CPSR、SPSR)功能、七种工作模式及其权限规则,重点理解了异常触发、现场保存与恢复的完整处理流程。同时掌握了ARM栈结构(减栈+满栈)

2026-03-30 20:17:46 672

原创 SQLite3数据库查询学习笔记2

本文介绍了SQLite数据库的基本查询语句和回调函数的使用方法。主要内容包括:1)基本SQL查询语句,如全表查询(SELECT*FROM)、条件查询(WHERE)和表结构查询(PRAGMA);2)详细解析了sqlite3_exec回调函数的参数含义和使用场景;3)提供了一个完整的C语言示例代码,展示如何通过回调函数实现用户登录验证功能。该示例涵盖了数据库连接、SQL语句执行、回调函数处理和资源释放等关键操作流程。

2026-03-27 21:10:23 95

原创 SQLite3数据库学习笔记1

摘要:本文介绍了嵌入式数据库SQLite的特点及使用方法。SQLite具有轻量级、单文件存储、支持标准SQL语法等特点,适合嵌入式设备使用。文章详细说明了数据库基本操作指令、常用SQL语句(建表、查询、更新等)以及C语言编程接口。最后提供了一个将字典数据批量导入SQLite数据库的完整C语言示例代码,展示了数据库连接、SQL执行和事务处理等核心操作流程。

2026-03-27 20:50:47 420

原创 TCP 并发学习笔记(进程 fork / 线程 pthread)

本文介绍了两种实现服务器并发处理客户端连接的方法:多进程(fork)和多线程(pthread)。多进程方式通过fork创建子进程处理连接,主进程继续监听,具有独立稳定但资源开销大的特点。多线程方式通过pthread_create创建线程处理连接,设置线程分离自动释放资源,具有轻量高效但需处理同步问题的特点。两种方法都实现了主进程/线程持续监听,子进程/线程处理具体业务的基本并发模型。文章对比了两种方法的优缺点,并提供了关键实现代码示例。

2026-03-27 20:19:11 180

原创 多路IO学习笔记

IO多路复用是一种高效的IO处理机制,允许单线程同时监控多个文件描述符。相比传统多进程/线程模型,它显著减少资源消耗和切换开销,支持更高并发。主要实现方式包括:1)select:跨平台兼容但性能受限,需全量遍历描述符;2)epoll:Linux专属高性能方案,仅处理就绪事件,支持百万级连接。核心区别在于epoll采用事件驱动和共享内存,避免select的全量遍历和数据拷贝问题。实际应用中,select适合少量连接或跨平台场景,epoll则是高并发服务器的首选。代码示例展示了两种方式实现的TCP服务器,体现了

2026-03-27 20:07:22 503

原创 网络编程学习笔记(数据封包拆包 + 协议格式 + 网络工具 + HTTP 协议)

本文系统介绍了网络数据传输的核心原理与协议格式。主要内容包括:1) 数据封包拆包过程,详细说明TCP/IP五层模型中各层的协议头添加与剥离机制;2) 三大核心协议格式:以太网MAC帧(数据链路层)、IP数据报(网络层)和TCP报文段(传输层)的详细结构;3) 常用网络测试工具如ping、telnet、Wireshark等的使用方法;4) HTTP协议的工作机制,包括URL格式、请求/响应报文结构及状态码含义。文章重点阐述了协议头在网络通信中的关键作用,以及如何通过抓包工具分析网络数据流,为理解网络通信原理和

2026-03-24 20:47:25 1813

原创 网络编程-TCP 协议学习笔记

本文系统介绍了网络通信模式与TCP协议核心知识。主要内容包括:1)三种网络通信模式(C/S、B/S、P2P)的特点与交互逻辑;2)TCP协议核心特征(面向连接、可靠传输等)及会话过程(三次握手、四次挥手);3)Linux环境下C/S模式编程流程及关键函数;4)TCP黏包问题的成因与解决方案;5)TCP与UDP协议的对比分析。文章提供了完整的服务器端和客户端代码示例,涵盖了套接字创建、绑定、监听、连接、数据收发等关键步骤,并详细说明了各函数的参数与返回值,为网络编程实践提供了实用参考。

2026-03-18 20:49:14 629

原创 网络编程第一天学习笔记(重点:UDP 协议)

本文系统介绍了网络通信的核心知识,包括OSI七层模型和TCP/IP四层模型的结构与功能,详细解释了DNS、DHCP、TCP等关键网络协议。重点阐述了UDP协议的特性、通信流程及核心函数(socket/bind/recvfrom/sendto),通过服务端和客户端的代码示例展示了UDP编程的实现方法。同时涵盖了IP地址分类、常用Linux网络指令、网络编程基础概念等内容,为网络编程学习提供了全面的理论基础和实践指导。

2026-03-18 19:56:36 672

原创 进程间通信(IPC)学习笔记(信号通信 + 共享内存)

不可捕捉 / 忽略的信号SIGKILL(9 号)、SIGSTOP(19 号),只能默认处理(终止 / 暂停),无法通过signal修改;信号处理函数的可重入性:自定义处理函数中应避免调用非可重入函数(如printfmalloc),防止数据竞争。在所有的信号中有如下两个特例:10号信号SIGUSR1,12号信号SIGUSR2,这两个信号专门预留给程序员使用的未定义信号。应用:回收子进程,防止出现僵尸进程//SIGCHLD ,对于父进程而言,默认情况是忽略。

2026-03-17 20:54:29 530

原创 进程间通信(IPC)- 管道专题学习笔记

今日聚焦进程间通信(IPC)核心内容,补充计数信号量后,重点掌握管道(无名管道pipe、有名管道fifo)相关知识:1. IPC分类:分为古老通信方式(管道、信号等)、IPC对象通信、Socket通信三类,管道是基础且核心的古老通信方式。2. 管道通用特性:半双工、基于文件描述符(读端fd[0]、写端fd[1])、内核级缓冲区存储(FIFO队列,数据读走即消失,缓冲区大小有限),存在写阻塞、读阻塞、管道破裂、read返回0四大关键读写场景。

2026-03-16 21:13:01 685 1

原创 线程学习笔记(含进程区别、核心函数、互斥同步与死锁)

本次学习围绕线程编程核心知识点展开,首先明确了线程与进程的核心区别,厘清两者在资源分配、调度效率、独立性和通信成本上的差异;随后系统学习了线程相关核心函数,包括线程号获取(pthread_self())、线程退出(pthread_exit()、pthread_cancel())、线程回收(pthread_join())、线程传参(单个参数、结构体多参数)及线程分离(pthread_detach()),每个函数均掌握其功能、参数、返回值、注意事项及代码实现;接着深入学习线程控制,重点掌握互斥锁(定义、初始化、

2026-02-26 21:07:41 680

原创 数据结构学习笔记:树 & 哈希存储

本文系统介绍了树结构与哈希存储的核心概念及实现方法。主要内容包括:1)树的基本概念和二叉树特性,如节点度、遍历方式等;2)二叉树的C语言实现,涵盖创建、前/中/后序遍历及层序遍历算法;3)哈希存储原理与拉链法实现,包含哈希函数、冲突处理和基本操作。重点讲解了递归遍历、队列辅助的层序遍历等关键技术,并提供了完整代码示例。文章强调二叉树遍历的核心地位和哈希表O(1)查询的特性,为数据结构学习提供了实践指导。

2026-02-06 20:16:42 337

原创 栈与队列(Stack & Queue):顺序实现 vs 链式实现

本文详细讲解了栈和队列的数据结构实现与操作。主要内容包括:顺序栈和链式栈的实现原理、核心操作(入栈/出栈/读栈顶/销毁)及代码实现;顺序队列和链式队列的特性(FIFO)及实现方法(入队/出队/销毁)。通过对比分析,指出顺序实现的效率优势和容量限制,以及链式实现的灵活性和内存开销。最后总结了栈(LIFO)与队列(FIFO)的核心区别及应用场景,为数据结构学习提供了全面指导。

2026-02-04 20:23:18 988

原创 今日学习笔记:双向链表、循环链表、栈

本文总结了双向链表和循环链表的核心操作与实现要点。双向链表需维护prev和next指针的联动,带头节点结构简化了首尾操作;循环链表尾节点指向头节点形成闭环。关键操作包括:头/尾删除、指定值删除、销毁链表等,均需注意指针更新和内存释放以避免断裂和泄漏。循环链表创建时需初始化头节点指向自身形成空链表。所有操作需严格处理边界条件,确保链表完整性。

2026-02-03 20:59:06 787

原创 链表进阶 & Makefile & 双向链表 学习笔记

本文总结了链表进阶和工程化工具的核心内容:1. 单链表排序算法:详细讲解了选择、冒泡和插入三种排序的实现思路,均采用数据交换而非指针调整,强调防御性检查和指针安全操作。2. Makefile工程化:介绍增量编译原理,解析目标-依赖-命令结构,提供标准编译规则模板和清理指令,强调Tab键使用规范。3. 双向链表实现:从结构体定义到核心操作(创建、判空、打印、头尾插入),重点说明双向指针调整顺序和循环链表特性,保持与单链表一致的命名规范。学习要点包括算法思想理解、工程规范遵守和指针操作安全,后续可拓展删除操作和

2026-02-02 20:24:59 564

原创 数据结构学习笔记(第二天):链表进阶操作全解析

本文总结了单链表的四种进阶操作:1)快慢指针法查找中间节点;2)双指针间距法查找倒数第k个节点;3)快慢指针法检测链表环;4)迭代法实现链表反转。重点讲解了各算法的实现思路和代码要点,强调防御性编程和边界条件处理。核心技巧是双指针法,能在O(n)时间复杂度和O(1)空间复杂度下高效解决问题。文章还指出了常见易错点,如指针越界、断链等问题,并建议后续学习双向链表、链表排序等进阶内容。

2026-02-01 19:46:38 661

原创 Day1 数据结构学习笔记:从基础概念到链表增删改查

数据结构是组织和管理数据的方式,核心包括逻辑结构、存储结构和算法。线性表作为基本线性结构,可通过顺序存储(数组)或链式存储(链表)实现。本文重点讲解单链表实现,涵盖创建、插入(头插/尾插)、查找、修改、删除(头删/尾删/指定值)及销毁等核心算法,强调避免断链和内存泄漏。关键点包括:头结点简化操作、"先保存后修改"原则、指针使用规范(一级指针修改内容,二级指针修改头指针)。典型错误包括未检查内存申请、操作导致断链、销毁后未置空指针。后续可学习链表进阶操作及其他线性表实现。

2026-02-01 18:37:40 682

原创 C 语言底层语法(共用体 - 枚举 - typedef - 位运算 - 内存管理)笔记

本文系统介绍了C语言中的共用体、枚举、typedef、位运算和内存管理五大核心概念。共用体通过内存共享特性实现高效存储和大小端判断;枚举提升了代码可读性;typedef简化了类型定义。位运算部分重点讲解了异或交换、移位运算和循环左移的实现原理。内存管理详细解析了堆区内存的申请(malloc/calloc/realloc)与释放(free)机制,并总结了内存泄漏、野指针等常见问题的防范措施。这些底层技术对驱动开发、嵌入式系统等场景具有重要应用价值,是C语言程序员的必备技能。

2026-01-28 20:11:37 789

原创 C语言学习笔记:指针函数、函数指针与结构体

本文系统梳理了C语言中指针函数、函数指针和结构体三大核心概念。指针函数返回指针类型,需配合malloc动态内存分配使用,强调"申请-使用-释放-置空"四步准则;函数指针用于回调机制,实现代码解耦;结构体用于封装复杂数据,需注意内存对齐规则和指针传参优化。三者共同构成了C语言处理动态内存、函数回调及数据组织的核心机制,是开发复杂程序的重要基础。

2026-01-26 20:49:24 720

原创 指针进阶:整型 / 字符型二维数组操作 + 指针数组用法梳理

本文系统介绍了指针操作二维数组的方法:1. 整型二维数组的内存连续存储特性,通过行指针*(arr+i)+j访问元素;2. 字符二维数组每行存储独立字符串,使用strcmp等函数操作;3. 指针数组(char*arr[])的灵活优势,元素可指向不同长度字符串。重点对比了二维数组与指针数组的内存布局差异,强调指针类型匹配、字符串操作规范等易错点,并给出遍历、查找最大值、选择排序等典型代码示例。核心在于理解行指针步长、解引用层级以及指针数组的灵活性特点。

2026-01-23 21:05:08 824

原创 从算法到内存操作:快速排序、const 关键字与指针实现字符串函数

本文总结了快速排序算法、const关键字的用法以及指针实现字符串操作的方法。快速排序采用分治策略,通过选取基准值分区并递归排序子数组。const用于定义常量,可修饰变量、指针及函数参数,限制修改权限。通过指针可高效实现字符串函数(strlen、strcpy等),直接操作内存提升效率,但需注意边界条件处理。这些内容涵盖了算法实现、常量定义和指针操作等核心编程知识点。

2026-01-22 21:24:12 307

原创 指针运算与一维数组操作:排序与查找实现

本文介绍了指针的基础知识和应用。首先讲解了指针的定义、内存占用大小(32位系统4字节,64位系统8字节)及其基本用法,包括指针变量的声明、初始化和解引用。其次阐述了指针的常见用途,如动态内存分配、函数参数传递和数据结构实现。重点讲解了指针在整型一维数组中的应用,包括数组的指针表示、迭代遍历方法,以及使用指针实现的四种常见算法:选择排序、冒泡排序、插入排序和查找操作。这些内容为理解和使用指针操作数组提供了实用指导。

2026-01-22 21:13:44 194

原创 预处理指令与 C 语言编译过程学习笔记

本文介绍了C语言预处理的三个核心知识点:1. 预处理目的:处理宏定义、文件包含和条件编译指令,为编译做准备;2. 编译流程:包括预处理(.i)、编译(.s)、汇编(.o)和链接(可执行文件)四个阶段;3. 重点技术:宏定义(含带参宏)的语法与注意事项,其与函数的本质区别,以及文件包含和条件编译的使用场景。特别强调了带参宏的括号使用、宏作用域管理,以及条件编译在调试和跨平台开发中的实用价值。这些预处理技术能有效提升代码的可维护性和执行效率。

2026-01-21 20:59:12 875

原创 函数的实现

本文总结了函数实现的关键要点:1. 函数通过"类型标识符 函数名(形式参数)"格式定义,强调类型标识符决定返回值类型,形式参数需明确类型且与实参匹配;2. 函数定义位置需注意前置声明问题;3. 函数嵌套调用依赖调用栈机制,通过栈结构管理执行流程;4. 介绍了三种函数调用方式(语句调用、表达式调用、参数调用)。特别指出数组不能作为返回值,void函数无需return等注意事项。

2026-01-21 20:25:23 426

原创 二维数组及字符型数组

本文介绍了二维数组和字符数组的相关知识。主要内容包括:二维数组的定义、动态内存分配和多种初始化方法;字符数组的定义、字符串输入输出操作,以及字符串处理函数的使用(如strlen、strcpy、strcat等)。特别强调了动态内存分配时的注意事项,包括malloc的使用和内存释放,以及字符串操作时的缓冲区安全问题。文章提供了详细的代码示例,帮助理解数组的基本操作和常见字符串处理函数的实现原理。

2026-01-16 21:31:30 493

原创 c语言的排序方法

冒泡排序通过重复比较相邻元素并交换顺序错误的元素,将较大元素逐渐“浮”到数组末端。时间复杂度为O(n²),可通过标志位优化提前终止。选择排序通过重复查找未排序部分的最小元素并将其放到已排序部分的末尾。时间复杂度为O(n²),适合小规模数据排序。:直接在原数组上操作,通过移动元素实现插入。空间复杂度为O(1),时间复杂度为O(n²)。二分查找要求数组已排序,通过反复将搜索范围减半实现高效查找。时间复杂度为O(log n)。:需要额外空间存储已排序部分,每次将新元素插入到正确位置。空间复杂度为O(n)。

2026-01-15 21:07:10 264

原创 C语言的循环语句与数组

本文介绍了循环语句和数组的基本概念与应用。循环部分详细讲解了goto、for、while和do-while四种结构的语法特点及适用场景,并说明了break和continue语句的作用。数组部分涵盖了一维数组的声明语法、四种初始化方法以及赋值方式,特别强调了字符数组的特殊初始化形式和使用注意事项。文章指出,循环结构应根据具体需求选择,数组操作需注意边界问题,为程序设计提供了基础指导。

2026-01-14 20:45:23 337

原创 C语言的流程控制

本文介绍了C语言中的逻辑运算和选择语句。逻辑运算部分详细讲解了三种基本运算符(&&、||、!)的特性,包括短路求值、优先级和布尔值表示,并与位运算进行了对比。选择语句部分重点阐述了if语句(单分支、双分支、多分支)和switch语句的语法结构、执行流程及注意事项,通过多个实例(如闰年判断、成绩转换等)演示了实际应用。文章还介绍了条件运算符(三元运算符)的用法及其与if语句的差异,强调了代码简洁性与可读性的平衡。

2026-01-13 20:28:30 592

原创 C语言输入输出函数

c语言的输入与输出,putchar()、getchar()、printf()、scanf()的学习

2026-01-12 20:04:37 624

原创 C语言的数据类型

命令模式下的常用操作、C语言的数据类型、整型常量、变量,进制间的转换,浮点型的比较,字符型的转换

2026-01-09 20:31:50 851

原创 嵌入式系统的定义与Linux基础

什么是嵌入式?ubuntu与Linux的关系?Linux基础的操作指令用法?

2026-01-08 20:35:33 487 1

空空如也

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

TA关注的人

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