- 博客(25)
- 收藏
- 关注
原创 C 语言学习笔记——11(函数指针与指针函数)
本文通过C语言示例详细讲解了指针函数和函数指针的区别与用法。指针函数是返回指针的函数,示例展示了返回静态变量和动态内存的两种实现;函数指针是指向函数的指针,示例包括基本调用、作为参数传递及在结构体中的应用。最后结合结构体展示了高级应用场景,如工厂模式返回函数指针、图形面积计算系统等。文章强调指针函数不能返回局部变量地址,需使用static或动态分配内存,并演示了如何通过函数指针实现策略模式和多态行为。
2026-04-04 21:15:35
269
原创 C语言学习笔记——10(结构体)
本文摘要:文章系统讲解了C语言结构体的定义、初始化、成员访问及指针操作。主要内容包括:1)结构体定义语法和内存分配原理(含内存对齐);2)两种初始化方式(定义时初始化和后赋值);3)结构体指针的使用方法(->运算符原理、偏移量计算);4)指针修改结构体成员的内存机制;5)结构体作为函数参数的传值与传址区别;6)动态内存分配和结构体数组指针操作;7)常见错误警示(如返回局部变量指针、字符串赋值方式等)。通过内存地址分析和示例代码,深入解析了结构体及其指针的底层实现原理。
2026-04-02 21:02:16
651
原创 C语言学习笔记——9(C语言的内存)
本文摘要: C程序运行时内存分为栈区(自动管理局部变量)、堆区(手动管理动态内存)、静态区(全局/静态变量)和代码段(只读指令)。栈由CPU自动分配释放,速度快;堆需手动malloc/free,易产生内存泄漏;静态区生命周期覆盖整个程序。全局变量非线程安全,多线程访问需同步。只读空间(.text/.rodata)不可修改,修改会导致段错误。静态局部变量虽作用域限于函数,但生命周期为整个程序,存储在静态区而非栈。堆栈区别:栈分配高效但空间有限,堆灵活但有管理开销。开发中应避免全局变量滥用,注意内存管理边界问题
2026-04-02 21:02:03
484
原创 SPI工作原理以及核心
SPI总线学习摘要:SPI(串行外设接口)是一种全双工同步串行总线,采用主从模式通信,通过4根线(SCLK、MOSI、MISO、CS)实现数据传输。核心特性包括可配置的时钟极性(CPOL)和相位(CPHA),形成4种工作模式,主从设备必须严格匹配。相比I2C,SPI速度更快(可达几十MHz)但通信距离短,适合板内高速设备连接。典型应用包括Flash存储、LCD屏幕等。调试时需注意模式匹配问题,常见错误为数据错位。与UART和I2C相比,SPI具有全双工、无应答机制、硬件简单等特点。
2026-03-30 16:15:26
568
原创 ESP32学习笔记之GPIO
本文系统介绍了GPIO(通用输入输出接口)的工作原理及应用。主要内容包括:1)GPIO的四种工作模式(输入/输出/复用/模拟);2)输入模式的详细解析(上下拉电阻、消抖方法等);3)输出模式的推挽与开漏结构对比;4)ESP32的GPIO编程实践(LED控制、按键检测及中断处理);5)GPIO中断的完整实现流程与注意事项。重点阐述了机械按键消抖的必要性、中断服务程序的设计原则,以及ESP-IDF中GPIO相关API的使用方法。文章通过多个示例代码展示了GPIO在嵌入式系统中的典型应用场景。
2026-03-20 22:58:41
604
原创 ESP32学习笔记之UART
UART(通用异步收发器)是一种串行异步通信协议,采用点对点全双工传输,通过起始位、数据位(5-9位)、校验位和停止位组成数据帧。其特点包括:无需时钟线,依靠约定波特率实现同步;常见配置为8N1(8数据位、无校验、1停止位);典型应用需注意参数匹配、TX/RX交叉连接和共地问题。在ESP32开发中,UART初始化包括配置参数结构体、设置引脚和安装驱动,提供轮询、中断和DMA三种工作模式。其中DMA方式利用GDMA通道和链表管理实现高性能数据传输,适合大数据量场景。调试时需关注缓冲区溢出和接收处理时效性问题。
2026-03-20 22:58:33
521
原创 IIC总线工作原理和核心
IIC是一种半双工串行总线协议,采用两根双向线(SDA数据线和SCL时钟线)实现芯片间通信。它具有多主机能力,通过7位地址寻址从机设备,通信过程由起始信号、地址传输、数据交换和停止信号构成。数据传输遵循严格的时序规则:SCL低电平时准备数据,高电平时读取数据,每个字节传输后需接收方应答。IIC支持主机写、主机读和复合模式三种基本通信流程,具有结构简单、成本低、支持多设备连接等特点,广泛应用于低速短距离通信场景。
2026-02-23 22:13:22
1033
原创 基于STM32F103C8T6 HAL库来操作IIC通信的AHT20(轮询,中断,DMA三种模式)
本文介绍了STM32使用I2C接口驱动AHT20温湿度传感器的三种实现方式:轮询模式、中断模式和DMA模式。轮询模式实现简单但效率低;中断模式通过状态机和回调函数提高CPU利用率;DMA模式利用硬件DMA控制器进一步降低CPU负载。详细说明了CubeMX配置步骤、各模式的工作原理、实现代码及注意事项,特别强调了中断模式中的数据缓冲区生命周期问题和状态机设计。最后给出了完整的AHT20初始化、测量、读取和数据处理函数实现,以及主程序中的状态机控制流程。
2026-02-23 22:12:33
921
原创 UART 工作原理以及核心
本文摘要:UART(通用异步收发器)是一种串行异步通信总线,采用两条数据线(TX/RX)实现全双工通信。关键特性包括:1)串行传输节省资源;2)通过起始位、数据位(5-8位)、校验位和停止位组成数据帧;3)依赖波特率实现时序同步;4)支持TTL、RS232和RS485三种电平标准,分别适用于短距离、中距离和工业长距离通信。文中还详细介绍了UART控制器结构、寄存器配置及USB-TTL转换模块的应用,强调硬件连接需遵循交叉互联和共地原则。
2026-02-08 11:18:07
1054
原创 基于STM32F103C8T6_HAL库来操作USART通信(轮询,中断,DMA三种模式)
摘要:本文介绍了STM32串口通信的三种实现模式。轮询模式通过CPU主动查询状态实现简单通信但占用资源;中断模式利用中断回调处理数据收发,降低CPU负载但仍需频繁中断;DMA模式通过专用控制器完成数据传输,大幅提升效率并支持高速率通信。文章详细对比了三种模式在CPU占用、实时性和适用场景等方面的差异,并提供了配置STM32CubeMX和Keil环境的注意事项,特别解决了MicroLIB启用时的常见报错问题。
2026-02-08 11:18:04
788
原创 C语言学习笔记——8(函数)
本文系统介绍了C语言函数的相关知识。主要内容包括:1)函数的定义与三要素(函数名、参数列表、返回类型);2)函数的意义(代码复用、模块化设计等);3)函数调用方式(语句、表达式、参数);4)指针函数的特性与注意事项,重点分析了可安全返回的地址类型;5)递归函数的原理与实现,包括递归出口、递归关系及常见类型。文章通过具体代码示例,详细说明了字符串常量与局部字符数组的区别、递归调用栈的工作原理,以及经典递归问题的实现方法,为理解和使用C语言函数提供了全面指导。
2026-02-03 13:23:04
767
原创 C语言学习笔记——7(指针数组,数组指针,多级指针)
本文介绍了指针数组和多级指针的核心概念。指针数组是由多个同类型指针组成的数组,其内存占用由指针大小和数组长度决定。指针数组名加1移动一个指针大小的空间。与数组指针不同,指针数组存储的是多个指针而非指向数组的指针。多级指针分为不同级别(一级、二级等),通过逐级解引用可访问原始数据。指针数组名本质上是二级指针,多级指针运算遵循类型大小移动规则。使用时需注意级别匹配、内存释放和空指针检查等问题。这些概念是理解复杂指针操作和高效内存管理的基础。
2026-02-02 18:26:15
788
原创 C语言学习笔记——6(指针)
本文摘要: 本文系统介绍了C语言中指针的核心概念与应用。主要内容包括:1)内存基础概念与变量地址;2)指针的本质与定义方式;3)指针解引用与运算规则;4)指针与数组的关系及二维数组处理;5)字符指针与字符串操作的区别;6)指针在内存管理中的应用。重点解析了指针运算、数组指针、行指针等关键概念,并通过代码示例演示了指针操作的实际应用。文章还对比了字符数组与字符指针的本质差异,为深入理解指针机制提供了全面的技术参考。
2026-01-31 22:33:21
972
原创 C语言学习笔记——5(数组)
本文摘要:数组是存储相同类型数据的构造数据类型,具有元素连续存储、类型相同等特点。一维数组通过下标访问元素,初始化方式包括完全、部分和自动推断。二维数组按行连续存储,可通过行列下标访问。文章详细介绍了数组定义、初始化、内存分配及越界风险,并提供了查找最大值、矩阵转置等实用示例。特别提醒数组越界可能导致的严重后果,如内存覆盖或程序崩溃。
2026-01-29 16:46:40
634
原创 C语言学习笔记——4(重在练习:if-else,switch-case,for,while,break,continue)
本文介绍了C语言中的选择结构和循环结构。选择结构包括if单分支、if-else双分支和嵌套if语句,演示了判断奇偶、闰年、三角形构成等示例。循环结构详细讲解了for和while循环的语法及应用,如打印星号、计算偶数和、水仙花数等。同时介绍了控制语句break和continue的用法,前者用于跳出循环,后者跳过当前迭代。文中提供了多个完整代码示例及运行结果,帮助理解条件判断和循环控制在实际编程中的应用场景。
2026-01-28 21:24:38
827
原创 C语言学习笔记——3(字符的输入输出,putchar,getchar,pprintf,scanf)
本文介绍了C语言中的字符输入输出函数(putchar/getchar)和格式化输入输出函数(printf/scanf)的基本用法。putchar输出单个字符,getchar读取字符并返回int类型以处理错误情况。printf支持多种格式说明符和修饰符控制输出格式,包括宽度、精度和对齐方式。scanf提供相应的输入格式控制,需要注意%c会读取空白字符的特殊性,以及抑制符*可跳过输入数据。文中通过多个示例演示了这些函数的实际应用场景和使用技巧。
2026-01-27 18:50:43
358
原创 C语言学习笔记——2(数据类型,运算符)
本文摘要: 本文系统介绍了C语言中的数据类型和运算符。主要内容包括:1) 数据类型部分详细讲解了整数类型(char,short,int,long)的存储大小和取值范围,字符类型(ASCII编码)及其转换规律;2) 运算符部分全面解析了算术运算符(包括除法特殊性)、关系运算符、逻辑运算符、赋值运算符(含复合赋值)、位运算符等的使用方法和注意事项,特别强调了自增/减运算符的前后缀区别。文章通过大量代码示例演示了各运算符的实际应用,如闰年判断、数字分离等,并指出了常见编程错误和防御性编程技巧。
2026-01-26 22:27:10
688
原创 C语言学习笔记——1(C语言本质,开始程序,进制,原码,反码,补码,变量)
本文系统阐述了C语言底层原理与计算机体系结构的关系。首先从ARM架构出发,解析了程序从硬盘加载到内存执行的全过程,以及CPU执行指令的底层操作(读取、计算、写入)。接着深入探讨了C语言本质是对内存的读写操作,并通过示例程序说明基本语法和输出格式控制。然后详细介绍了二进制、八进制、十进制和十六进制的表示方法及相互转换规则,包括数码、基数、位权等概念。最后讲解了数据存储单位、原码/反码/补码表示方法,以及变量的内存地址、命名规则、存储类型和作用域等核心概念,揭示了变量作为连接软件与硬件的桥梁作用。全文贯穿了从高
2026-01-26 15:53:14
697
原创 关于制作基于STM32的智能垃圾桶的总结
本项目基于STM32F103C8T6微控制器设计了一款多功能智能垃圾桶系统。硬件包含主控芯片、传感器模块(红外、火焰、超声波)、执行机构(舵机、紫外线消毒灯)及通信模块(蓝牙、OLED显示)。系统实现了自动开盖、消毒杀菌、火灾预警、垃圾量监测和手机交互等功能。关键技术包括:蓝牙AT指令配置、OLED汉字显示、舵机PWM控制、超声波测距等。开发过程中解决了供电不足、信号时序、模块初始化等典型问题,通过硬件隔离、软件滤波等方法确保系统稳定运行。该设计展示了嵌入式系统在智能家居领域的应用价值。
2026-01-23 22:06:36
827
原创 嵌入式系统开发核心基础:从硬件架构到程序语言
本文摘要:计算机系统核心知识(嵌入式/单片机方向)主要阐述了计算机系统的分层架构(硬件层、操作系统层、应用层)及其相互关系,重点介绍了操作系统作为资源管理者和服务提供者的双重角色。文章详细解析了计算机的进制基础、硬件组成以及程序的概念与执行过程,并系统梳理了编程语言从机器语言到高级语言的发展历程,特别强调了C语言在系统编程中的桥梁作用。针对嵌入式系统,深入讲解了MPU、MCU等硬件核心概念,以及系统启动流程和存储器(ROM/RAM)的工作原理,最后说明了内存控制器如何实现统一地址空间访问。
2026-01-23 17:01:44
634
原创 嵌入式必会硬件基础知识(一)
本文总结了电路实验的安全要点与基本操作规范。安全方面强调:1)安全电压电流限值(交流≤36V/10mA,直流≤50V);2)禁止徒手测试,必须使用万用表;3)极端情况下单手操作的应急方法。测量技术部分说明:电流表串联、电压表并联的原理,并指出万用表内阻对测量的影响。最后通过二极管限流实例,演示如何利用电阻的限流特性(R=U/I)保护敏感元件。全文核心是强调规范操作和理论应用,确保实验安全准确。
2026-01-22 11:54:36
610
原创 PID算法的保姆级理论整理(一)(PID:让误差消失的艺术)
笔者按:本文仅是对PID控制原理的粗浅梳理,犹如以指触月,虽不能尽述其辉光,但望能为您打开一扇窗。控制工程的世界浩瀚如星海,从经典PID到现代自适应控制、模糊逻辑、神经网络... 每一个技术突破都源于无数工程师的躬身实践与思想碰撞。🔸 文中存在疏漏之处🔸 有更优雅的离散化实现🔸 或独到的参数整定经验诚邀在评论区分享真知灼见—— 这方寸之地,终将因您的智慧而闪耀。
2025-07-21 12:13:55
1023
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
3