- 博客(140)
- 收藏
- 关注
原创 单例模式简析:C语言实现单例模式
单例模式是一种确保类只有一个实例的设计模式,提供全局访问点。其核心特点是唯一性、全局访问、延迟初始化和线程安全。现实中的例子包括公司CEO、国家总统、打印机等。在嵌入式系统中,单例模式可避免硬件重复初始化问题,如多个程序员共用打印机时,防止设置冲突和资源浪费。代码示例展示了通过静态变量和初始化标志实现单例,确保所有调用者获取同一实例指针。该模式能有效提升系统安全性和效率。
2025-12-10 16:11:35
2129
原创 【OTA专题】13 APP工程移植Ymodem协议接收解包固件
本文详细介绍了Ymodem协议在串口DMA环境下的移植实现。主要内容包括:1)移植流程解析,重点说明在Boot和App模式下DMA数据搬运策略的差异;2)协议处理核心代码详解,包括数据包接收、解包和校验机制;3)关键实现技术,如空闲中断回调函数处理、DMA接收优化等。特别强调了通过队列机制实现异步数据接收,确保在文件传输过程中不影响其他应用任务的执行。该方案解决了传统串口中断方式对系统实时性的影响,为嵌入式系统OTA升级提供了可靠的数据传输方案。
2025-12-10 16:07:07
1543
原创 【DMA】FreeRTOS下STM32串口接收不定长数据并结合DMA实现环形缓冲区:2 串口DMA不定长接收代码实践
本文介绍了在FreeRTOS下使用STM32串口结合DMA实现环形缓冲区接收不定长数据的方法。系统采用分层设计:硬件中断层负责数据接收并存入环形缓冲区,BSP层驱动程序处理缓冲区管理并通知APP层,APP层进行数据解包处理。通过串口空闲中断、DMA半满和全满中断动态调整缓冲区head指针位置,实现高效数据接收。相比动态内存分配方案,环形缓冲区能避免内存碎片问题,保证系统实时性。文章还解答了环形缓冲区必要性、数据量限制等问题,为嵌入式系统中串口通信提供了一种可靠实现方案。
2025-12-09 15:12:35
1906
原创 【DMA】FreeRTOS下STM32串口接收不定长数据并结合DMA实现环形缓冲区:1 相关函数理论部分与环形缓冲区设计
本文介绍了STM32 HAL库中UART空闲中断与DMA结合的接收机制及环形缓冲区实现。主要内容包括:1) HAL_UARTEx_ReceiveToIdle_DMA函数的工作原理,详细分析了DMA半满中断、全满中断和串口空闲中断的触发条件与回调机制;2) 环形缓冲区的设计与实现,包括创建、判空判满、数据存取等操作;3) 通过串口空闲中断+DMA中断+环形缓冲区实现不定长数据接收的方案,阐述了中断处理程序、驱动程序和应用层解包程序的分层设计;4) 相关Q&A解答了环形缓冲区必要性、数据量限制等问题。该
2025-12-09 15:10:27
1610
原创 【OTA专题】12 APP中移植EEprom、W25Q驱动
摘要:本文介绍了24C02 EEPROM和W25Q64 Flash存储器的驱动移植方法。24C02采用IIC通信,支持1.8V-5.5V供电,256字节存储空间,详细说明了其寻址方式和读写操作。W25Q64通过SPI1接口连接,配置256分频。移植过程包括修改地址、添加驱动文件、设置调试,返回值为1表示成功。硬件连接采用PB8(SCL)、PB9(SDA)引脚,3.3V供电。通过单步调试验证了两种存储器的驱动移植均成功完成。
2025-12-08 21:39:42
1141
原创 【OTA专题】11 进一步优化OTA后台无感下载架构
本文介绍了基于STM32F411CEU6的Bootloader系统架构设计。硬件部分包含主控芯片、按键切换模块、LED指示灯、串口通信模块(CH340)、外部Flash(W25Q64)和EEPROM(AT24C02)等。软件架构包括App层功能模块和下载流程。重点验证了串口通信协议(115200波特率)、外部Flash分区设计(64KB A/B区互为备份)以及EEPROM状态标志存储。最后对比了Flash和EEPROM的特性差异:EEPROM适合频繁修改的小数据存储(100万次擦写),而Flash适合大容量
2025-12-08 21:39:39
1843
原创 【OTA专题】10 W25Q64替换片上flash备份区,OTA升级串口改蓝牙
本文介绍了W25Q64 SPI Flash存储器的移植与通信实现。首先通过焊接芯片和测试用例验证功能,然后详细说明了SPI通信协议的移植过程,包括驱动文件的修改和接口适配。接着阐述了W25Q64的数据读写逻辑:写入需要先擦除(置为0xFF),编程以页(256字节)为单位;读取支持连续地址递增访问。文章还介绍了使用HC-05蓝牙模块实现远程OTA升级的方法。最后解答了常见问题:W25Q64擦除后存储单元置为0xFF,支持多种擦除单位(4KB/32KB/64KB),扇区擦除时间最大400ms。
2025-12-03 10:15:31
1680
原创 【OTA专题】9 更进一步的 bootloader 架构设计
摘要 本文探讨了外部Flash下载的适用场景及其软硬件架构设计。从成本、安全性和功能扩展性三个维度分析了适合采用外部Flash下载的产品特性,并详细介绍了基于STM32F411CEU6的硬件架构和Bootloader/App双模式的软件架构设计。系统通过Key检测实现模式切换,采用Ymodem协议完成PC端通信,利用W25Q64存储备份代码,支持本地和蓝牙远程升级。升级流程清晰划分Bootloader和App功能模块,确保系统稳定性和扩展性。
2025-12-03 10:15:08
1217
原创 【OTA专题】8 bootloader读App的备份区并解密存放进Flash App运行区并验证
本文介绍了App代码通过AES加密生成文件的实现步骤。主要内容包括:1) 在Boot_Manager.c中定义AES加密所需的IV向量和256位密钥;2) 实现BackToApp函数完成加密数据的解密和写入流程,包括初始化参数、数据解密、校验和写入Flash等操作;3) 分析了当前bootloader可优化的方向:启动速度(代码跳转逻辑)、代码体积(内存优化)、下载速度(协议优化)和安全性能(增加CRC校验、数据二次校验、看门狗机制和回滚功能等)。
2025-12-02 21:40:10
1099
原创 【OTA专题】7 App代码转AES加密文件生成步骤
本文介绍了文件加密工具的技术规范,主要包含以下要点:1.支持DES系列(单/双/三DES)和AES系列(128/192/256bit)加密算法;2.采用CBC加密模式,AES使用16字节初始向量,DES使用8字节向量;3.加密后文件格式包含自定义数据长度、自定义数据、明文长度和密文数据四部分,扩展名为.mxxx;4.要求自定义数据长度加8字节必须是16的整数倍;5.支持字符串输入,解密时可显示自定义数据。文档还说明了密钥长度自动匹配、数据块对齐补全等实现细节。
2025-12-02 21:36:05
1546
原创 单片机内存布局管理:sct分散加载详解
本文深入解析ARM嵌入式开发中的分散加载文件(.sct),重点介绍其核心功能、使用场景和配置方法。文章首先说明.sct文件在链接阶段的作用,类比GCC中的.ld文件;详细解析文件结构,包括加载域(LR_IROM)和执行域(ER_IROM/RW_IRAM)的地址分配规则;通过实例演示如何创建自定义加载域管理特定代码段和数据段;特别讲解__attribute__关键字实现内存定向分配的方法;最后解答常见问题,包括Flash/SRAM执行效率差异、cache优化策略等。全文为嵌入式开发者提供了.sct文件的实用配
2025-11-22 10:24:42
2198
原创 【OTA专题】6 基于当前ota架构增加带AES加密的架构设计(双备份区)
本文介绍了一种基于STM32F411CEU6的双备份区Bootloader系统设计方案。系统采用AES加密和双备份Flash机制,将Flash划分为Bootloader区(32KB)、App运行区(96KB)和备份区(128KB)。通过按键触发Ymodem协议实现固件升级,先将加密固件下载到备份区,验证解密后搬运到运行区。该系统具有断电保护、无缝回滚、升级可靠性高等特点,采用硬件成本可控的分区策略,适合资源受限的单片机应用。
2025-11-22 10:24:27
1762
原创 【OTA专题】5 实现Bootloader接收App代码并跳转
本文介绍了基于Ymodem协议的Flash烧写流程。通过VSCode编写C代码,Keil生成bin文件后,使用SecureCRT经串口发送至MCU。Bootloader负责擦除目标扇区,将bin文件写入APP区,并进行跳转验证。关键步骤包括:定义APP地址、关闭定时器中断、擦除验证(检查FF值)、文件传输及跳转测试。调试时需注意指针指向位置确认跳转成功,同时避免中断干扰。整个流程实现了从代码编译到固件烧录的完整闭环。
2025-11-21 21:47:56
1116
原创 【OTA专题】4 Bootloader搭建基础外设并移植Ymodem协议
摘要:本文介绍了外设资源配置和Ymodem协议移植方法。外设配置包括Key/GPIO设置、串口参数(115200波特率、8位数据、无校验)及Flash操作示例。Ymodem移植步骤包含:1)工程编译调整,处理文件路径和头文件;2)协议验证,通过定义接收数组测试传输功能;3)提供bin文件生成命令和SecureCRT下载教程链接。重点实现了基础硬件功能配置和文件传输协议的应用验证。
2025-11-21 21:35:19
1249
原创 【OTA专题】3 Bootloader跳转App
本文介绍了STM32 Bootloader架构与工程移植的关键步骤,重点分析了代码分区、跳转实现和常见问题。内容涵盖:1)Flash资源分配方案(Bootloader区32KB,其余为APP区);2)跳转代码实现细节,包括中断屏蔽、向量表重设和栈指针初始化;3)常见问题解决方案,如Bootloader体积过大时的优化策略(功能精简、分层设计、编译优化),以及串口/RTT打印差异的原因。特别强调了跳转过程中的中断处理机制,解释了屏蔽中断和重设向量表对保证系统稳定性的重要作用。
2025-11-07 23:13:14
1646
原创 【OTA专题】2 初级bootloader架构和基础工程移植
本文介绍了基于STM32F411CEU6的Bootloader设计与实现方法。硬件架构包含主控芯片、按键模块、LED指示灯、CH340通信模块等。软件架构分为Bootloader和APP两部分,分别实现固件下载管理和应用逻辑。重点阐述了标准库移植过程,包括工程文件重构、调试工具集成以及开发注意事项。文章还提供了Bootloader代码的分层管理建议,将项目分为BSP、Core、Drivers等模块,并详细说明了调试工具Easylogger与RTT的配置方法,特别强调了避免使用printf重定位可能引发的通信
2025-11-07 23:02:03
2282
原创 【OTA专题】1 OTA加密升级总览
摘要:本文详细介绍了基于单片机的OTA(无线)升级技术,包括概念意义、工作原理和完整流程。系统采用双区域存储设计(A/B区),通过APP和Bootloader两阶段协作实现安全升级:APP阶段完成固件下载、校验和标志设置;Bootloader阶段执行固件解密、备份当前程序、写入新固件等关键操作。文章还分析了该技术在智能家居、工业设备等场景的应用价值,指出其灵活性高、可扩展性强等优势,同时也提醒注意无线稳定性、存储容量和安全风险等问题。整个方案通过分块处理、备份机制等设计确保了升级的可靠性和可恢复性。
2025-11-06 21:29:16
1152
原创 【AES加密】AES加密算法实现(附代码):4 AES全局函数
本文介绍了AES加密算法的实现,主要包括密钥扩展、加解密函数和测试流程。密钥扩展通过原始密钥生成轮密钥表,支持128/192/256位密钥长度。加解密函数支持ECB和CBC模式,其中CBC模式通过初始化向量(IV)增强安全性,并采用逆序解密优化。测试函数验证了完整加密解密流程,使用128位密钥和CBC模式,成功还原原始明文。实现中考虑了原地操作、块处理优化和安全性问题,提供了完整的示例代码和十六进制输出工具。
2025-11-06 21:14:12
2067
原创 【AES加密】AES加密算法实现(附代码):2 AES工具函数的书写(下)
本文详细解析AES加密算法的实现流程,主要包括: 字节替换(SubBytes):使用S盒/逆S盒进行非线性替换 行移位(ShiftRows):对状态矩阵各行循环移位 列混合(MixColumns):通过有限域乘法实现列数据混淆 单块加解密:完整流程包括初始轮密钥加、多轮变换(10/12/14轮),最后一轮省略列混合步骤 有限域运算:详细说明了GF(2⁸)中的乘2运算规则 算法通过S盒替换、行移位和列混合三个主要步骤实现数据混淆和扩散,配合轮密钥加操作完成加密。解密过程为加密的逆操作,需反向使用轮密钥表。
2025-10-31 21:13:22
1730
原创 【AES加密】AES加密算法实现(附代码):2 AES工具函数的书写(上)
本文摘要了AES加密算法的核心实现细节。首先介绍了跨平台兼容性处理,通过条件编译实现在8051单片机和普通C环境下的代码适配。其次详细解析了AES的关键组件:密钥长度转换(Nk)、数据块大小(Nb)、加密轮数(Nr)的定义,以及有限域运算中BPOLY(0x1B)作为不可约多项式的重要性。重点阐述了S-box的构造原理(有限域逆元和仿射变换)及其安全作用,并提供了生成S-box的完整代码实现。最后讲解了轮密钥加(AddRoundKey)操作的核心功能,这些组件共同构成了AES加密的安全基础。
2025-10-31 21:11:23
1876
原创 【AES加密】AES加密算法实现(附代码):1 AES头文件的书写
本文解析AES加密实现的关键要素:首先定义了密钥长度枚举类型(128/192/256位),提升代码可读性和安全性;其次介绍了ECB和CBC两种加密模式,重点说明CBC通过初始化向量和块链接机制增强安全性;最后详述了核心函数声明,包括密钥初始化、数据加密解密接口,强调数据长度必须符合分组大小整倍数的要求,并解释其技术原理。全文从实现角度系统阐述了AES加密的关键技术要点。
2025-10-28 20:35:47
1982
原创 【AES加密】AES加密算法流程全解析
本文系统介绍了加密算法的基本概念与分类,重点解析了AES对称加密算法。内容涵盖:1.加密算法定义与分类(对称/非对称);2.对称加密典型算法DES和AES的工作原理及优劣势;3.AES的具体实现,包括128/192/256位密钥的差异、加密轮次、分组处理流程(密钥扩展、初始轮、主轮操作等);4.非对称加密原理及与对称加密的对比;5.混合加密方案的应用场景。文章通过数学示例(RSA算法)和信箱类比,深入浅出地解释了非对称加密的单向安全性原理,最后提出结合两种加密优势的实践方案。
2025-10-28 20:30:22
3251
原创 FreeRTOS下STM32双缓冲ADC数据采集与处理
本系统采用STM32CubeMX配置ADC+DMA实现数据采集,通过FreeRTOS实现双缓冲机制。系统初始化时创建两个缓冲区(buffer1/buffer2)、两个队列(queue1/queue2)和互斥锁。主流程包括:1)ADC完成转换后触发中断发送queue1通知线程A;2)线程A切换DMA目标缓冲区并发送queue2通知线程B;3)线程B处理就绪缓冲区数据。关键设计特点包括:双缓冲交替采集处理、互斥锁保护共享资源、队列实现任务间通信。系统通过DMA直接搬运数据提高效率,同时包含完善的错误处理机制,确
2025-09-29 17:03:16
1037
原创 Bootloader核心原理与简单实现:从零写一个bootloader
Bootloader是单片机系统中用于简化固件更新、分离应用逻辑和增强安全性的关键组件。本文介绍了开发一个最简单的Bootloader的步骤:1)配置Flash布局,划分Bootloader区和应用区;2)在Bootloader工程中实现跳转函数,包括验证应用有效性、设置栈指针和跳转地址;3)在应用工程中正确配置中断向量表偏移。核心原理是通过Bootloader初始化后跳转到应用复位向量,同时需注意栈空间隔离和中断向量表重定向。文中还解答了常见问题,强调设置MSP寄存器的重要性,以及如何实现安全的跳转流程。
2025-09-29 16:51:14
2790
2
原创 揭秘:基于Bootloader的IAP如何实现程序更新
摘要:基于Bootloader的IAP技术通过将MCU的Flash划分为Bootloader区和Application区,实现程序远程更新。Bootloader作为"启动管理器"在上电后首先运行,检查更新标志或等待更新指令。若需更新,则通过通信接口接收新固件,校验后写入Application区,最后跳转执行新程序。关键技术包括中断向量表重映射、通信协议设计、Flash操作和校验机制。该技术可实现远程升级、降低成本,但会增加系统复杂度并存在"变砖"风险。这种方案是现代智能硬件远程更新的重要实现方式。
2025-09-28 23:14:14
1701
原创 单片机烧录方式:ISP、IAP、ICP全解析
摘要: ISP、IAP和ICP是单片机常用的三种烧录方式,主要区别在于编程时机和核心原理。ISP通过专用接口在断电/复位时烧录,依赖芯片内置Bootloader;IAP在系统运行时通过用户程序(Bootloader)实现远程在线更新;ICP则利用JTAG/SWD调试接口在开发阶段直接烧录。ISP工具成本低,IAP无需额外硬件,ICP需专业仿真器但支持调试。分别适用于生产烧录、远程升级和开发调试场景。
2025-09-28 23:08:01
2042
原创 STM32启动流程与bootloader全面解析:从上电复位到进入main函数
本文系统解析了STM32启动流程,从硬件复位到用户程序执行的完整过程。主要内容包括:1. 启动阶段划分:BootROM硬件初始化→BootLoader执行→应用程序启动;2. 启动文件(.s)的核心作用:建立中断向量表、初始化栈/堆/全局变量、跳转至main函数;3. 中断向量表机制:物理存储位置可偏移但内容固定,复位向量指向Reset_Handler;4. BootLoader设计要点:独立工程包含自身启动文件,通过VTOR寄存器实现应用跳转;5. 双程序区布局实践:BootLoader与应用需分别配置链
2025-09-27 23:22:40
3014
原创 STM32启动流程解析:从BootROM到BootLoader
本文解析了STM32启动流程中的BootROM与BootLoader机制。BootROM是芯片出厂固化的只读代码,负责基础硬件初始化和启动模式选择;BootLoader则是可编程的软件层,提供高级初始化和固件更新功能。文章对比了两者的区别,指出BootROM位于芯片内核不可修改,而BootLoader存储在可擦写存储器中可高度定制。同时解释了为什么BootROM在地址映射中不可见的原因,并提供了相关参考资源。全文系统梳理了嵌入式系统的启动层次架构,对理解MCU启动过程具有参考价值。
2025-09-27 23:11:56
2137
原创 FreeRTOS内存分配与STM32内存布局详解
本文解析了FreeRTOS在STM32中的内存分配机制。FreeRTOS采用heap4方案,通过未初始化的大数组在.bss段分配任务栈、控制块等资源。系统运行时,.data段数据从Flash拷贝到SRAM,堆空间在启动文件中定义。文章还指导如何通过.map文件查看.text/.data/.bss段的地址分配,以及Keil5环境下.map文件的打开与解析方法,帮助开发者理解STM32与FreeRTOS的内存管理原理。
2025-09-26 23:33:34
2692
原创 STM32中的Flash、ROM与RAM全解析
摘要: STM32存储结构解析:Flash作为ROM存储程序代码(.text段)和初始化数据(.data段初始值),而SRAM则用于运行时的.data段变量和.bss段内存分配。启动时,系统自动完成数据从Flash到SRAM的拷贝(.data)和清零(.bss)操作。.text段始终在Flash中执行,不占用SRAM空间。这种分层存储设计既保证了数据持久性,又提高了运行效率,通过链接脚本可查看各段在0x08000000(Flash)和0x20000000(SRAM)的具体地址分布。
2025-09-26 23:27:21
3126
2
原创 stm32定时器:什么是 Timer Trigger Output Event
STM32定时器的TRGO(Timer Trigger Output Event)是一种硬件触发信号,用于实现外设间的精确同步。它通过内部连接自动触发ADC、DAC、DMA等外设,无需CPU干预,具有高精度和低延迟优势。开发人员可通过配置定时器CR2寄存器的MMS位选择触发源(如更新事件)。该功能在电机控制、电源转换等实时应用中尤为重要,能显著提升系统效率和响应速度,是硬件自动化协同工作的关键技术。
2025-09-22 22:30:45
3012
原创 【FreeRTOS】二值信号量与互斥量核心区别与使用详解
FreeRTOS中二值信号量与互斥量的核心区别在于:二值信号量用于任务同步(无所有权概念,任何任务都可释放),适合事件通知场景;互斥量用于资源保护(具有所有权特性,必须由获取者释放),能防止优先级反转。关键差异体现在互斥量支持优先级继承机制,当高优先级任务等待时,持有互斥量的低优先级任务会临时提升优先级,避免被中优先级任务阻塞。使用原则:任务间同步选二值信号量,共享资源保护用互斥量,注意互斥量不可在ISR中使用且要避免嵌套获取。
2025-09-22 22:25:41
2424
原创 【DMA】DMA高级应用:DMA+定时器PWM模拟通信时序,解放CPU
文章摘要:本文介绍了使用STM32驱动WT588F02B语音模块的三种方法。传统GPIO模拟方式存在CPU效率低、中断延迟等问题;改进的定时器PWM方式通过配置不同占空比提高效率,但仍需频繁中断;最优方案采用定时器PWM+DMA方式,通过DMA自动搬运比较值到CCR寄存器,仅需一次DMA中断即可完成数据传输,既保证时序精度又提高CPU效率。详细说明了CubeMX配置、初始化函数编写、数据发送实现及测试方法,适用于低速率单总线通信场景。
2025-09-20 18:34:21
2516
原创 【DMA】FIFO模式解析:高效传输的奥秘
本文补充分析了DMA的两种Stream传输模式:1)无FIFO模式下,Stream使能即预加载首字节;2)FIFO模式会预先装满数据待发。重点探讨了FIFO未满即清空时的处理机制:DMA会立即传输FIFO中有效数据,丢弃未填充部分,保证不传输假数据但效率降低。这种机制确保数据可靠性,但会损失批量传输优势。
2025-09-20 18:24:41
1092
原创 【DMA】深入解析DMA控制器架构与运作原理
本文深入解析了DMA控制器的内部架构和工作机制。重点介绍了DMA2实现Memory-to-Memory传输的数据流路径,通过总线矩阵实现高效数据传输。文章详细阐述了DMA的8个数据流、通道选择机制、仲裁器工作原理,以及FIFO和Burst两个关键功能模块。FIFO通过缓冲数据提高了总线利用率,减少CPU中断;Burst传输则通过"原子操作"确保数据完整性。文章还特别强调了FIFO阈值与Burst配置的匹配关系,不当配置会导致传输错误。这些机制共同保障了DMA控制器在STM32等MCU中的高效运行。
2025-09-19 23:26:33
1278
原创 【DMA】DMA入门:外设数据到内存,以串口DMA接收为例,解析底层实现
摘要:本文分析了DMA从串口接收数据到内存的底层实现机制。通过HAL_UART_Receive_DMA()函数,系统会自动注册DMA回调函数,包括半满、全满和错误回调。其中全满回调最终会调用串口传输完成回调HAL_UART_RxCpltCallback()。关键点在于DMAR寄存器的置位,它决定UART是否启用DMA接收模式。HAL库通过这种架构实现了代码复用,将不同模块的回调函数关联起来,简化了开发流程。整个流程展示了DMA与串口协作时数据搬运和回调处理的内部机制。
2025-09-19 23:14:30
1601
原创 【DMA】DMA实战:用DMA操控外设
本文介绍了使用DMA控制器直接操作外设寄存器的实战方法。通过DMA2控制GPIOA翻转LED的案例,详细说明了DMA配置步骤:1)确定DMA通道与总线连接关系;2)配置为MemoryToMemory模式;3)获取目标寄存器地址。重点解决了DMA传输标志位清除问题,对比了查询等待和中断回调两种方式,并指出中断方式仍会唤醒CPU的局限性。最后提出优化思路:增加单次传输数据量或结合定时器触发,实现真正的CPU解放。文章提供了完整的代码实现和调试方法。
2025-09-18 23:13:12
1035
原创 【DMA】DMA入门:理解DMA与CPU的并行
本文对比分析了基于中断和DMA的串口接收模式。中断模式下,CPU需逐个字节处理数据搬运,效率较低;而DMA模式下,DMA自动完成数据搬运,CPU仅需处理完整数据包,效率更高。实验通过GPIO翻转验证了DMA模式能显著减少CPU中断响应时间。文章详细介绍了HAL_UART_Receive_IT、HAL_UART_Receive_DMA等关键函数的调用机制,以及USARTx_IRQHandler和HAL_UART_RxCpltCallback中断服务函数的执行流程。
2025-09-18 23:02:55
1590
原创 【DMA】DMA架构解析
STM32F411芯片的DMA架构分析:AHB总线矩阵挂载6主5从设备,包括ICode/DCode总线、DMA1/2内存与外设总线等。DMA1仅能访问APB1外设,而DMA2可访问更多外设。AHB1/APB桥用于外设降速处理。总线矩阵的M/S标识采用主设备连接从端口的特殊设计,交叉点"小圆圈"表示可连接性。该架构实现了高效的数据传输管理。
2025-09-17 23:42:18
1087
原创 FreeRTOS任务切换流程
FreeRTOS实现多任务调度的核心在于上下文切换机制。该系统通过PendSV异常和双堆栈指针(MSP/PSP)实现任务切换:1)每个任务拥有独立栈空间,保存完整的寄存器状态(R0-R15、xPSR等);2)SysTick中断触发调度,但由低优先级的PendSV实际执行切换;3)切换时保存当前任务上下文到其栈中,并从新任务栈恢复寄存器;4)通过恢复PC寄存器实现任务"无缝续跑"。这种设计利用硬件特性,既确保中断及时响应,又实现高效的任务切换。
2025-09-17 23:31:45
1181
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅