- 博客(92)
- 收藏
- 关注
原创 【stm32进阶】定时器+ADC+DMA+乒乓缓冲区
选修单片机设计课程的期末作业是设计并实现一款简易心率测量装置,用到的心率传感器可使用单片机的ADC直接进行电压信号采集。对于这样的一个系统显然需要使用到ADC,其次对于心率信号的采集频率一般为250Hz,所以需要使用到定时器定时触发ADC采集,最后为了减轻CPU负担选择使用DMA进行数据搬运,并使用乒乓缓冲区(双缓冲区)存储数据,确保DMA和CPU不会发生数据访问冲突。定时器:决定采样率,例如250Hz(4ms一次),足够还原心率波形并留有滤波余量。ADC。
2026-04-07 20:16:13
593
原创 【51单片机】第一课:单片机简介与软件安装
摘要:本文介绍了51单片机入门基础教程,内容包括软件下载(Keil和Protues)、单片机概念与用途、51单片机命名规则、最小系统搭建(电源/晶振/复位电路)以及开发环境配置。详细说明了初学者可接触的51和STM32单片机,提供了仿真电路搭建方法,并推荐了工程模板创建流程。教程包含软件安装指南和代码示例,适合单片机初学者快速入门。
2026-03-27 16:22:02
595
原创 【杂谈】蓝牙模块使用时遇到的问题(串口通信一定要共地!!!)
本文记录了作者在蓝牙模块与STM32串口通信中遇到的乱码问题排查过程。实验发现蓝牙模块与电脑通信正常,STM32串口配置也无误,但当蓝牙模块与STM32连接时出现持续乱码并回传数据的异常现象。经过深入排查,最终发现问题根源在于供电系统未共地——蓝牙模块由独立电源供电,而STM32通过下载器供电,导致两者地线未连接。将STM32改由同一电源模块供电后,通信立即恢复正常。这个案例深刻揭示了串口通信中共地连接的关键作用,也提醒开发者即使熟知的理论知识在实践中也容易疏忽,导致不必要的时间浪费。
2026-03-25 13:39:04
49
原创 【MQTT】详解MQTT协议
摘要:MQTT协议是基于TCP/IP的轻量级物联网通信协议,通过固定报头、可变报头和有效载荷三部分构成控制报文。核心功能包括连接管理(CONNECT/CONNACK)、订阅发布(SUBSCRIBE/PUBLISH)和心跳保活(PINGREQ/PINGRESP)。协议提供三种服务质量等级(QoS0/1/2)实现不同可靠性的消息传输,支持遗嘱消息(Will)和会话保持(CleanSession)等特性。报文格式规范严格,包含报文类型标识、标志位、剩余长度计算等要素,所有字符串采用UTF-8编码并以2字节长度前缀
2026-03-24 21:30:11
583
原创 【杂谈】结构体的内存对齐与位段
本文介绍了结构体的内存对齐和位段操作两个重要概念。内存对齐通过填充字节优化CPU访问效率,其规则包括成员对齐位置、总大小计算和嵌套结构处理。位段操作则用于精确控制位数分配,节省内存空间,适用于硬件寄存器和网络协议等场景。文章详细说明了位段的定义方法、使用注意事项,并举例说明了其工程应用价值,如在网络协议中减小数据报大小以提高传输效率。两种技术分别从时间效率和空间优化角度提升了结构体的性能表现。
2026-03-13 22:43:00
442
原创 【C语言】自定义数据类型——结构体
本文介绍了C语言中结构体的定义、创建、初始化及使用方法。结构体(struct)允许将不同类型数据组合成一个整体,用于表示复杂对象。文章详细讲解了结构体的三种创建方式、初始化方法、成员访问操作(.和->),以及作为函数参数传递的两种方式(传值和传地址)。同时介绍了typedef简化结构体声明、结构体自引用规则、内存对齐原理及位段操作等进阶内容。结构体通过合理组织数据成员,既能提高程序可读性,又能优化内存使用效率,是C语言中处理复杂数据结构的重要工具。
2026-03-12 14:46:37
537
原创 【C语言】数据在内存中的存储
本文主要探讨了数据在内存中的存储方式。整数采用补码形式存储,正数原/反/补码相同,负数则需转换。浮点数遵循IEEE754标准,分为符号位、指数位和尾数位,包含规格化数、非规格化数和特殊值三种存储方式。此外,文章详细介绍了大小端字节序的概念及判断方法,并通过代码示例展示如何检测当前机器的字节序。最后提供了多个练习案例,涉及数据溢出、类型转换等常见问题,帮助理解内存存储原理。这些知识对深入理解计算机底层数据存储机制具有重要意义。
2026-03-11 10:53:36
466
原创 【杂谈】OLED显示屏驱动
摘要:本文详细介绍了SSD1306 OLED显示屏驱动芯片的特性与控制方法。该芯片支持I2C、SPI和8位并行接口,具有低功耗、高集成度等特点。文章阐述了通信协议、初始化流程和显示内存组织结构,并提供了完整的单片机控制代码实现,包括英文字符(6×8和8×16点阵)和汉字(16×16点阵)的显示功能。通过基础函数封装实现了清屏、定位、字符串及中文显示等功能,为嵌入式开发者提供了实用的OLED显示解决方案。
2026-03-02 21:03:39
967
原创 【FreeRTOS】调试技巧篇
摘要:本文总结了FreeRTOS开发中的几个常见问题及解决方法。1.中断中写队列必须使用专用中断写队列函数,否则会导致卡死;2.队列集功能需在FreeRTOSConfig.h中手动启用;3.内存不足时可增大堆空间配置;4.MPU6050任务需在队列集创建后启动;5.使用volatile修饰全局变量可防止编译器优化。调试时建议使用CallStack窗口分析调用关系,注意局部变量在优化后可能无法准确显示。(149字)
2026-02-17 22:59:47
707
原创 【C语言】内存函数
本文介绍了C语言中四个重要的内存操作函数: memcpy:内存拷贝函数,逐字节复制数据,要求源和目标内存不重叠。 memmove:类似memcpy,但能正确处理内存重叠的情况。 memset:内存置数函数,以字节为单位填充指定值,常用于清零或初始化。 memcmp:内存比较函数,按字节比较两个内存区域的内容。 文章详细说明了各函数的原型、特点、使用示例和常见错误,并提供了模拟实现代码。重点强调了内存重叠、缓冲区大小、数据类型处理等注意事项,以及这些函数与strcpy、calloc等类似函数的区别。
2026-02-02 10:03:16
767
原创 【C语言】字符函数和字符串函数
本文系统介绍了C语言中常用的字符串处理函数,包括字符分类、转换函数以及各类字符串操作函数。重点分析了strlen、strcpy、strcat、strcmp等核心函数的原型特点、使用示例、注意事项和模拟实现方法,并详细讲解了strncpy、strncat、strncmp等安全版本函数。此外还介绍了字符串查找(strstr)、分割(strtok)和错误处理(strerror)等实用函数。文章通过大量代码示例演示了这些函数的具体用法,并指出了常见错误和注意事项,为C语言字符串处理提供了全面的参考指南。
2026-02-01 11:37:31
996
原创 【杂谈】stm32重定向printf为什么需要勾选MicroLIB
摘要:本文介绍了C语言标准输入输出重定向的实现方法,重点针对嵌入式系统(如STM32)中的硬件设备重定向。通过重写底层I/O函数(如fputc、_write等),可将printf等函数输出重定向到UART等硬件接口。详细对比了MicroLIB库与标准库在代码体积、重定向机制和性能方面的优势,MicroLIB更适用于资源受限的嵌入式环境。同时提供了多串口重定向的实现方法,并指出使用MicroLIB时的注意事项,如不支持浮点数格式化等特性。
2026-01-29 16:12:24
438
原创 【杂谈】针对Cortex M4内核使用Systick进行延时
摘要:本文介绍了ARM Cortex-M4内核内置的SysTick系统定时器,它是一个24位递减计数器,主要用于操作系统时钟节拍和精确延时。详细说明了4个关键寄存器(CTRL、LOAD、VAL、CALIB)的功能及两种时钟源配置方式(AHB时钟或AHB/8)。提供了基于STM32F4的微秒和毫秒延时函数实现示例,包含初始化配置和延时函数的具体代码实现,并解释了如何通过检测控制寄存器状态来实现精确延时。
2026-01-25 14:04:19
214
原创 【杂谈】使用Edge浏览器下载文件显示“Microsoft Defender SmartScreen 已阻止此不安全文件”的解决方法
摘要:当浏览器下载文件时出现"Microsoft Defender SmartScreen阻止不安全文件"的报错,可通过以下步骤解决:先在Edge浏览器设置中关闭"防止有害网站和下载"功能(路径:设置>隐私与安全>安全性);再在电脑安全中心关闭"实时保护"(路径:设置>病毒和威胁防护>管理设置)。建议下载完成后恢复原有安全设置以确保系统安全。
2026-01-23 10:51:55
689
原创 【杂谈】如何将文件夹列入白名单以避免被安全中心当做病毒删掉
摘要:当安全软件误删程序时,可将文件夹设为"排除项"避免扫描。操作步骤:1)进入设置→隐私和安全性→病毒和威胁防护;2)点击"管理设置";3)找到"排除项"→"添加或删除排除项";4)添加目标文件夹。这样该文件夹就会被加入白名单,不再被安全中心扫描。(98字)
2026-01-23 10:19:22
121
原创 【阅读】《C和指针》1(2~5章)
本文摘要:本文系统梳理了C语言中的核心概念,分为数据、语句、操作符与表达式三大部分。在数据类型方面,详细探讨了整型长度标准、char符号性、十六进制优势、枚举用法及字符串特性;深入解析了指针声明、#define与typedef区别、变量链接属性和static关键字的双重作用。在语句部分,对比了continue在for/while中的差异,规范了switch语句的使用。操作符章节重点分析了赋值截断、++操作、条件运算符等常见陷阱,并强调整型提升、算术转换的注意事项,最后提出长运算优化方案。全文通过大量代码示例
2026-01-22 11:16:20
1001
1
原创 【杂谈】C语言中的链接属性、声明周期以及static关键字
本文探讨了变量链接属性与生命周期的关键问题。链接属性分为external(外部)、internal(内部)和none(无),其中static修饰可将变量限定在当前文件内。全局变量默认具有external属性,建议在头文件中使用extern声明以共享变量。作用域方面,大作用域变量可覆盖小作用域变量。所有全局变量都存储在静态区,生命周期持续到程序结束。static关键字具有两大功能:一是将函数或变量的链接属性改为internal,限制其使用范围;二是将变量存储区域从栈区迁移到静态区,使局部变量在函数退出后仍保留
2026-01-22 10:59:12
388
原创 【PID学习】多环PID
本文介绍了多环PID控制系统及其实现方法。主要内容包括:1)多环PID与单环PID的对比,说明多环PID在控制精度和抗干扰能力上的优势;2)双环PID的工作流程分析,通过内外环协同控制实现位置和速度的双重调节;3)提供了完整的伪代码实现方案,包括变量定义、调控周期设置和PID计算过程;4)提出程序优化方案,使用结构体封装PID计算函数。该方案适用于需要同时控制多个物理量的系统,能有效提高系统的稳定性和响应速度。
2026-01-19 17:16:37
910
原创 提交Git遇到“Failed to connect to 127.0.0.1 port 26561 after 2020 ms: Connection refused”的解决
可能因为之前使用过代理工具(如 VPN、 Shadowsocks,或像 Composer 这样的工具也可能设置代理),但后来代理服务被关闭或更改了,而 Git 的配置或系统环境变量中没有相应更新。通常是因为 Git 被配置了指向本地地址(127.0.0.1)和特定端口(26561)的代理,但该端口并没有程序在监听代理服务。你可以回想之前自己是怎么配置本地代理的,然后重新配置一遍本地代理。如果忘记了当时本地代理是怎么配置的,还可以使用方法二:取消本地代理。关闭终端后,这些变量可能会再次出现。
2025-11-04 10:12:38
524
原创 【杂谈】Gitee的使用方法
顺利将仓库克隆到本地后就会有一个被打了绿勾的文件夹,名字和Gitee仓库的名字一样。点击commit进入如下界面,在message栏中输入信息后点击commit。注意要先安装 git 再安装 Tortoise。在点击add后的框中选择ok进入如下界面。最后点击push即可。
2025-11-03 02:19:31
447
原创 【通信模块】蓝牙模块
本文介绍了蓝牙模块的基本概念、分类对比及配置方法。蓝牙模块作为无线通信组件,可实现设备间的短距离数据交换。文章对比了经典蓝牙、低功耗蓝牙和双模蓝牙的特性差异,重点讲解了通过AT指令配置HC-05蓝牙模块的具体步骤,包括进入AT模式、常用指令集和使用示例。此外,还说明了两个蓝牙模块互连通信的设置方法,以及当AT指令无响应时的检查步骤。内容涵盖了蓝牙模块从基础认知到实际应用的关键知识。
2025-10-26 13:23:26
1477
原创 【通信协议】串口、SPI和IIC通信协议小结
本文对比了UART、SPI和I²C三种通信协议的特性与应用场景。UART采用异步通信,简单可靠但速度较慢;SPI同步全双工传输,速度最快但引脚占用多;I²C仅需两根线支持多设备,但协议复杂速度较慢。选择时需考虑速度、引脚数量、设备规模等因素:高速选SPI,多设备选I²C,简单调试用UART,长距离通信可转换为RS-485标准。
2025-10-23 08:30:18
1395
原创 【通信协议】IIC总线
IIC协议是一种两线制(SCL时钟线和SDA数据线)的串行通信协议,支持多主从架构,通过地址寻址选择从设备。其核心时序包括起始条件(SCL高时SDA由高到低)、停止条件(SCL高时SDA由低到高)、数据传送(SCL低时写数据,高时读数据)和应答机制(每字节后跟随应答位)。硬件上需采用开漏输出模式并加上拉电阻。典型应用包括指定地址写(发送设备地址+寄存器地址+数据)和指定地址读(通过"写地址指针+读数据"两步实现)。协议规定0表示有效应答,从机地址可通过硬件引脚修改。该协议广泛用于低速设备
2025-10-22 00:09:41
925
原创 【通信协议】SPI总线
SPI(串行外设接口)是一种同步全双工串行通信协议,采用四线制(SCK、MOSI、MISO、SS)实现主从设备间的数据交换。其特点包括高速传输(可达几十Mbps)、无寻址机制(通过片选线选择从机)、无应答机制。SPI支持4种工作模式(由CPOL和CPHA决定时钟极性与采样边沿),常用模式0和模式3。硬件电路需注意从机未被选中时MISO必须保持高阻态。软件模拟SPI需实现时序控制、字节交换等核心功能。相比I2C,SPI具有速度更快、硬件更简单等优势,但需要更多信号线且不支持总线寻址。
2025-10-21 00:14:29
1172
原创 【通信协议】串口
本文介绍了串口通信的基本原理和实现方法,主要内容包括:1. 串口通信的基本概念,包括通信线路(TX、RX、GND)、关键参数(波特率、数据位、校验位等)和流控制方式;2. 串口通信的时序规范,详细说明数据帧的组成(起始位、数据位、校验位和停止位)及其电平状态变化;3. 软件模拟串口通信的实现方法,包括初始化、数据发送和接收的具体代码示例;4. 硬件串口在51单片机和STM32上的应用,涵盖初始化配置、数据收发功能实现,以及HEX数据包和文本数据包的处理方法。文章提供了完整的代码示例,适用于不同场景下的串口通
2025-10-20 09:05:30
1562
原创 【STM32F1标准库】代码——SPI通信
摘要 本文介绍了W25Q64串行Flash存储器的使用,包括其内部结构(页、扇区、块划分)、关键指令集(写使能、页编程、扇区擦除等)和操作流程(先擦后写、检查忙状态等)。详细阐述了软件模拟SPI时序的实现方法,包括引脚配置、字节交换逻辑及W25Q64驱动层函数(如扇区擦除、页编程)。同时对比了硬件SPI接口的配置流程,展示了如何通过STM32硬件SPI优化数据传输效率。核心要点包括:写操作前需使能并等待BUSY位清零,页编程不可跨页,以及硬件SPI的时钟配置与数据交换机制。
2025-10-18 23:27:40
859
原创 【STM32F1标准库】理论——SPI通信
SPI(串行外设接口)是一种高速全双工同步串行通信协议,采用四线制(SCK、MOSI、MISO、SS)实现主从设备通信。其特点包括无寻址机制、最高可达几十Mbps的传输速率,以及通过片选线选择从设备。SPI通信基于移位寄存器交换数据,支持四种工作时序模式(由CPOL和CPHA决定)。相比I2C,SPI具有速度更快、硬件简单等优势,但缺乏应答机制和寻址功能。SPI广泛应用于存储器、显示屏等高速外设,而I2C更适合中低速传感器等设备。使用时需注意主从设备模式匹配和片选信号管理。
2025-10-14 11:39:59
955
原创 【STM32F1标准库】代码——IIC通信
本文详细介绍了MPU6050六轴运动传感器的使用方法和I2C通信实现。主要内容包括:1. MPU6050基础介绍,包括常用寄存器功能、初始化流程和数据换算方法;2. 软件模拟I2C时序的实现,包括起始/停止条件、字节收发、应答处理等底层时序,以及MPU6050寄存器读写应用层实现;3. 硬件I2C接口的使用方法,包括STM32硬件I2C配置流程和MPU6050驱动实现。文章重点讲解了I2C通信中的关键时序细节和注意事项,并提供了完整的代码实现,可作为MPU6050传感器开发的实用参考。
2025-10-09 23:33:38
1169
原创 【STM32F1标准库】理论——IIC通信
《IIC通信协议详解》摘要: IIC是一种两线制串行通信协议,采用SCL时钟线和SDA数据线实现半双工通信。协议支持多主从架构,通过7位或10位地址寻址,包含起始/终止时序、数据收发和应答机制。硬件采用开漏输出和上拉电阻设计,确保总线安全。基本时序包括:SCL高电平时SDA跳变控制起止,低电平期间传输数据,每字节后需应答。实用时序分为指定地址写、当前地址读和复合的指定地址读(先写地址指针再读数据)。关键问题解答了应答信号逻辑、从机地址修改方法及复合读操作原理。该协议广泛应用于低速设备通信,具有结构简单、扩展
2025-10-09 01:11:35
1046
原创 【FreeRTOS】第八课(2):互斥信号量(Mutex)
互斥信号量是一种特殊的二值信号量,具有优先级继承机制,可防止优先级反转问题。其特点包括:仅允许一个任务运行实现互斥操作,并能提升持有任务优先级至等待任务级别。执行逻辑中,低优先级任务获取互斥量后优先级被提升,确保高优先级任务不被阻塞。函数操作与普通信号量类似,包括创建(静态/动态)、删除、give/take等,但不可在ISR中使用。应用示例展示了两种典型场景:解决多任务优先级反转问题(通过优先级继承机制调整执行顺序)和保护共享资源(如IIC总线访问)。使用时需注意互斥量的获取和释放成对出现,确保资源正确释放
2025-10-04 11:58:04
450
原创 【FreeRTOS】第八课(1):信号量(Semaphore)
信号量是一种用于任务同步和互斥的计数机制,不涉及数据传输。通过take(获取)和give(释放)操作控制资源访问:当信号量为0时任务阻塞,优先级高的优先获取。与普通队列不同,信号量队列无需数据缓冲区,只有计数值和等待队列。二值信号量和计数型信号量分别用于互斥和资源计数。使用中需注意优先级反转问题,即低优先级任务可能阻塞高优先级任务。创建信号量时可静态或动态分配内存,并提供ISR(中断服务程序)专用操作函数。通过合理使用信号量能有效实现任务间的同步与互斥。
2025-10-03 23:28:33
1050
原创 【PID学习】PID算法改进
本文系统介绍了PID控制器的改进方法,主要分为三部分:1)积分部分改进:通过积分限幅防止饱和、积分分离消除大误差积分、变速积分动态调整积分速度;2)微分部分改进:采用微分先行避免目标突变干扰、不完全微分抑制噪声影响;3)输入输出改进:输出偏移增强小信号响应、输入死区避免微小误差波动。这些方法通过调整PID各环节作用,有效解决了传统PID存在的超调、振荡、响应慢等问题,提升了控制系统的稳定性和动态性能。
2025-10-01 18:44:39
1511
原创 【PID学习】连续形式PID的离散和离散PID另一版本伪代码
本文介绍了PID控制器的两种实现方法。位置式PID通过定时中断获取传感器数据,计算当前误差、误差积分和微分项,输出控制量并进行限幅处理。增量式PID则在位置式基础上增加了上上次误差项,通过增量计算调整输出量。文章指出,PID三个参数需根据应用场景灵活选择:位置控制适合PD组合避免积分项导致的超调;速度控制则需要积分项补偿摩擦力。两种实现均采用定时器中断方式,确保控制周期T的精确性。
2025-09-30 17:10:15
516
原创 【PID学习】PID基本原理
本文介绍了PID控制算法的三个核心参数及其作用:比例控制(Kp)用于快速响应,微分控制(Kd)抑制振荡,积分控制(Ki)消除稳态误差。以无人机悬停为例,说明各参数的应用效果及不当设置的缺点。最后对比了位置式PID和增量式PID的特点:位置式直接输出全量控制值,增量式输出控制增量,后者能保持暂停时的控制状态。两种形式通过不同变量调节可实现不同特性,增量式更适合需要保持状态的执行机构。
2025-09-29 20:29:07
2673
原创 【杂谈】写代码一定要注意数据类型匹配
51单片机延时函数卡死问题分析:由于输入参数(unsigned int)与循环变量(unsigned char)类型不匹配,当输入值>255时导致变量溢出形成死循环。两种解决方案:1)统一变量类型;2)自定义延时逻辑。该问题警示了数据类型匹配的重要性,提醒开发者需注意变量范围的兼容性,避免因类型不匹配导致的程序异常。
2025-09-28 18:01:41
244
原创 【FreeRTOS】第七课(4):任务间的通信——一个设备的数据写入多个队列
本文介绍了一个基于红外遥控的多任务汽车游戏程序框架。程序分为游戏层和数据获取层:游戏层创建了3个汽车任务,每个任务通过队列接收红外遥控数据;数据获取层实现红外数据的采集、解析和分发功能,采用注册机制将数据同时发送到多个任务队列。该设计通过队列通信机制实现了任务间的解耦,使多个汽车可以独立响应不同的红外按键控制,同时保证了系统的可扩展性,其他游戏模块也可通过注册队列来获取红外数据。文中提供了详细的数据结构定义和任务处理函数实现代码。
2025-09-27 16:04:44
288
原创 【FreeRTOS】第七课(3):任务间的通信——使用队列集优化程序架构
本文介绍了解决I2C设备冲突的两种方法(互斥操作或双I2C)以及基于FreeRTOS队列集的多设备数据处理框架。主要内容包括:1. 解决屏幕与MPU6050共用I2C导致的通信问题;2. 队列集的工作原理及API函数说明(创建、添加队列、读取等);3. 实现实例展示了游戏应用中如何通过队列集整合红外遥控、旋转编码器和MPU6050三种输入设备的数据处理流程,包括各模块的队列创建、数据采集和句柄管理。这种架构降低了代码耦合性,提高了系统可扩展性。
2025-09-26 15:49:30
1133
原创 【FreeRTOS】第七课(2):任务间的通信——队列实验
本文介绍了FreeRTOS队列的使用方法,包括动态/静态创建队列、读写队列操作及工程应用。主要内容:1.队列创建方式:动态创建使用xQueueCreate(),静态创建使用xQueueCreateStatic();2.队列操作函数:包括普通/中断环境下的读写接口;3.工程应用示例:通过挡球板控制任务展示了直接读写队列和间接读写队列两种实现方式,后者通过中介队列处理复杂数据转换;4.混合控制方案:结合红外中断和旋转编码器的多输入控制实现。文中详细提供了各场景下的代码实现模板和参数说明。
2025-09-25 00:18:03
1393
原创 【FreeRTOS】第七课(1):任务间的通信——使用队列
本文介绍了多任务通信的三种方法:全局变量、环形缓冲区和队列。重点分析了环形缓冲区的工作原理,通过读写指针和计数值实现数据存取管理。详细讲解了队列通信机制,它是在环形缓冲区基础上增加了互斥和阻塞唤醒功能,适用于生产者-消费者模式。以流水线为例,说明了接收方B任务的执行流程:当产品到达时被唤醒处理,或超时后主动检查。队列实现了任务间的同步与资源管理,避免CPU资源浪费。
2025-09-21 22:33:07
778
原创 【FreeRTOS】第六课:同步与互斥
本文介绍了RTOS中任务同步、互斥和通信的实现方法及注意事项。在同步方面,使用全局变量作为触发条件存在缺陷,会导致CPU资源浪费,建议采用阻塞方法优化。互斥问题可通过禁止任务切换解决,但仍存在资源占用问题。通信的关键在于保证结果正确性。文章还详细讲解了volatile关键字的作用:防止编译器过度优化,确保对硬件寄存器和异步修改变量的正确访问,举例说明了其在内存映射寄存器和信号处理程序中的典型应用场景。这些技术要点对嵌入式系统开发具有重要意义。
2025-09-18 17:10:22
750
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅