- 博客(42)
- 收藏
- 关注
原创 非易失性存储技术综合对比:EEPROM、NVRAM、NOR Flash、NAND Flash和SD卡
Flash存储(包括NOR Flash和NAND Flash)由于擦写次数有限,确实需要进行均匀磨损(Wear Leveling)管理。在实际嵌入式系统中,对于大容量存储(NAND Flash、SD卡)几乎总是需要均匀磨损策略;而对于小容量存储(如启动NOR Flash),可通过合理应用设计(减少写操作,数据分区)来延长寿命。在实际嵌入式系统设计中,通常会根据应用需求结合使用多种存储技术,以平衡性能、可靠性、容量和成本的需求。:在NAND Flash中常用,管理逻辑地址到物理地址的映射。
2025-05-17 16:01:22
572
原创 手撕I2C和SPI协议实现
使用开漏输出模式配置GPIO实现起始、停止、发送、接收、应答等基本信号操作按照协议时序编写读写函数注意时钟速率控制和时序延迟。
2025-05-17 16:00:04
1406
原创 arm内核执行流程.md
流水线是一种将指令执行分解为多个阶段的技术,每个阶段可以并行处理不同的指令。分支预测是处理器在遇到条件分支指令时,提前猜测分支方向以减少流水线停顿的技术。其执行数据的过程依赖于。通过理解Cortex-M内核的执行数据过程和程序优化技术,可以显著提高嵌入式系统的性能和效率。优化代码通过重排计算顺序,减少了数据依赖,提高了流水线效率。:6级流水线,支持更高的频率和性能,适合高性能嵌入式应用。:避免频繁访问不相关的数据,保持Cache的高命中率。:将分支的执行路径调整为更可能的方向,增加预测命中率。
2025-05-17 15:59:27
451
原创 Zephyr中DTS文件与YAML文件的关系详解
DTS文件描述了特定硬件平台上实际存在的设备实例及其配置YAML绑定文件定义了设备类型的规范和属性要求构建系统使用YAML定义验证DTS内容并生成C代码驱动程序通过生成的宏和API访问设备配置这种设计使硬件描述与驱动实现分离,提高了代码的可移植性和可维护性,同时也简化了针对不同硬件平台的配置过程。通过DTS和YAML的协同工作,Zephyr能够在编译时刻就确定设备配置的正确性,减少了运行时错误。
2025-05-14 11:08:16
925
原创 Cortex-M内核的执行数据过程和程序优化
流水线是一种将指令执行分解为多个阶段的技术,每个阶段可以并行处理不同的指令。Cortex-M内核通常采用3级或更高级的流水线(如Cortex-M7支持6级流水线)。分支预测是处理器在遇到条件分支指令时,提前猜测分支方向以减少流水线停顿的技术。Cortex-M内核是基于ARM架构的嵌入式处理器,广泛应用于低功耗和实时性要求高的场景。其执行数据的过程依赖于。通过理解Cortex-M内核的执行数据过程和程序优化技术,可以显著提高嵌入式系统的性能和效率。通过这些优化技术,可以显著提升Cortex-M内核的性能。
2025-05-14 11:07:04
909
原创 OpenOCD 详解:使用方法、指令和TCL脚本
OpenOCD(Open On-Chip Debugger)是一个开源的片上调试器,广泛用于嵌入式系统开发,特别是ARM处理器的调试和烧录。下面我将详细介绍其使用方法、关键指令和TCL脚本设计。
2025-05-13 09:08:35
1337
原创 HyperBus、HyperRAM和HyperFlash技术解析
HyperBus是由赛普拉斯(现为英飞凌)开发的高速内存接口协议,设计用于提高嵌入式系统与存储器之间的通信速度。
2025-05-13 08:51:12
453
原创 SHA-256 哈希算法详解
SHA-256作为一种强大的哈希算法,在嵌入式系统安全方面扮演着至关重要的角色。它为固件验证、安全启动和数据完整性提供了可靠保障,同时其相对较小的计算量使其适用于资源受限的微控制器。在实际应用中,需要根据特定的安全需求和资源限制来平衡性能与安全性。对于要求极高安全性的场景,可以考虑使用SHA-384/512或SHA-3,而对于性能敏感的场景,则应充分利用硬件加速功能。
2025-05-12 16:25:54
1487
原创 片外合封Flash的SFDP介绍
SFDP (Serial Flash Discoverable Parameters) 是JEDEC组织定义的一种标准规范(JEDEC标准JESD216系列),用于自动发现和识别串行Flash存储器的特性和功能参数。这个标准最初在2010年发布,后来经历了多次修订和扩展。
2025-05-12 16:20:09
1259
原创 CMake + Ninja + GCC 编译构建流程解析
这一工具链组合具有高度灵活性和效率,适用于从小型项目到大型复杂项目的各种嵌入式系统开。:GCC可以生成依赖信息,Ninja利用这些信息确保正确的构建顺序。:可为不同构建类型(Debug/Release)维护不同构建目录。:Ninja专为高效并行构建设计,自动分析依赖并最大化并行任务。:CMake可配置预编译头文件以加速构建过程。:只重新构建更改过的文件及其依赖项。
2025-05-12 16:19:18
372
原创 AES-128 加密与解密详解
有了IV,即使是预先知道的明文,也会因IV的不同而产生不同密文,使此类攻击无效。CBC模式的特点是每个明文块与前一个密文块异或后再加密,但第一个明文块没有"前一个密文块"。IV确保了即使加密相同的数据多次,每次产生的密文也完全不同,这是语义安全的基本要求之一。在 AES-CBC 模式中,初始向量(IV)扮演着至关重要的角色,它不是可选项,而是安全必需品。在可信固件更新系统中,即使每次使用相同的密钥加密固件,通过使用不同的IV,也能确保每次生成不同的密文,大大增强了系统的安全性。
2025-05-12 16:18:40
1382
原创 可信固件更新机制
可信固件是指通过加密、认证和完整性检验等多重安全措施,确保嵌入式设备只执行经过授权和验证的固件程序。可信固件系统的目标是防止未授权修改、恶意代码注入和固件回滚等安全威胁。
2025-05-12 16:17:07
682
原创 CCM/TCM在STM32中的含义和用途
CCM(Core Coupled Memory)和TCM(Tightly Coupled Memory)是ARM架构中的特殊内存类型,它们都表示与CPU核心紧密耦合的内存区域。这些内存具有一些特殊特性,使其在某些应用场景下非常有用。
2025-04-30 15:43:31
651
原创 Ymodem协议在嵌入式设备中与Bootloader结合实现固件更新
可靠性优先:通信中断、电源故障等情况下不损坏固件简单实现:Bootloader应尽量简单,减少潜在bug资源考量:最小化Bootloader占用的Flash和RAM多重保护:固件验证、备份和恢复机制。
2025-04-30 15:31:09
884
原创 嵌入式多功能浏览器系统设计详解
在学习了伟东山的完整嵌入式相机流程之后,将文本阅读器和人脸识别内容添加进去。这是完成后的整体框架,代码会开源在gitee。
2025-04-28 19:53:50
841
原创 MCU内存映射技术详解
内存映射技术是MCU系统设计的基础,掌握内存映射原理和技术对于开发高效稳定的嵌入式系统至关重要。随着MCU向更高性能、更低功耗方向发展,内存映射技术也在不断演进,为开发者提供更大的灵活性和更强的功能。
2025-04-28 19:40:39
958
原创 STM32完整内存地址空间分配详解
在STM32这类基于ARM Cortex-M的32位微控制器中,整个4GB的地址空间(从0x00000000到0xFFFFFFFF)有着非常系统化的分配方案,每个区域都有其特定的用途。
2025-04-28 19:39:29
1770
原创 STM32的Flash映射双重机制
在STM32微控制器中,存在一个重要的内存映射特性:Flash存储器可以同时出现在两个不同的地址区域,而且可以通过重映射功能改变CPU启动时从哪个地址获取初始指令。
2025-04-28 19:38:12
1044
原创 STM32启动流程详解
上电/复位 → 加载MSP → 跳转到Reset_Handler → 初始化栈指针 →复制.data段 → 清零.bss段 → SystemInit() → __libc_init_array() → main()修改启动文件以支持特定的内存布局自定义SystemInit函数实现特定的时钟配置在main函数之前添加自定义的初始化代码通过理解这一完整的启动过程,开发者可以更好地控制STM32应用程序的初始化行为,优化系统性能,并解决启动相关的问题。
2025-04-16 20:58:22
1319
原创 VScode+OpenOCD+HTOS栈回溯在国产mcu芯片上完全调试
本文将详细介绍一个基于 VS Code 的 STM32 开发环境配置,该环境使用 CMake 作为构建系统,OpenOCD 作为调试和下载工具,以及 Ninja 作为构建工具。这是一套专业的嵌入式开发环境,特别适用于 STM32F103 系列微控制器的开发,同时集成了自研的 HTOS 轻量级实时操作系统。这套 VSCode + CMake + OpenOCD + Ninja 的开发环境构成了一个功能强大、灵活且高效的 STM32 开发平台。
2025-04-16 19:02:41
888
原创 C语言关键字
控制流示例存储类示例结构体和共用体示例关键字深入解析const 关键字详解 是一个类型限定符,用于声明"只读"变量或参数,表示其值在初始化后不应被修改。用途和特性:创建只读变量:防止变量被意外修改只读函数参数:表明函数不会修改传入的参数只读指针与指针常量:与类型定义结合:最佳实践: 告知编译器变量可能在程序控制外被改变,防止编译器优化掉对该变量的操作。用途和特性:硬件寄存器访问:多线程共享变量:信号处理程序中的变量:结合const使用:注意事项
2025-04-09 19:58:36
985
原创 ARM内核与寄存器
ARM(Advanced RISC Machine)是一种RISC(精简指令集计算机)处理器架构,最初由Acorn计算机公司设计,现在由ARM公司开发和授权。由于其低功耗和高性能特性,ARM处理器广泛应用于移动设备、嵌入式系统和物联网设备。ARM架构已经发展了多个版本,从ARMv1到最新的ARMv9,不同版本引入了不同的功能和改进。Cortex-A系列:应用处理器,用于高性能系统Cortex-R系列:实时处理器,用于需要快速响应的系统Cortex-M系列:微控制器,用于低功耗嵌入式设备。
2025-04-09 19:27:48
967
原创 嵌入式开发中栈溢出的处理方法
在嵌入式系统中,栈通常被配置为固定大小,当递归层次过深、局部变量过大或函数调用链过长时,可能导致栈溢出。在嵌入式系统开发中,栈溢出是一个常见且危险的问题。最后,处理栈溢出不仅仅是一项技术任务,也是嵌入式系统可靠性工程的重要组成部分,应当贯穿于整个开发生命周期。某些MCU提供硬件级别的栈溢出检测机制,如MPU(内存保护单元)或专用的栈溢出检测寄存器。通过在初始化时填充栈空间为特定模式,然后监控模式被破坏的情况来检测栈使用情况。哨兵变量是放置在栈边界处的特定值,通过定期检查这些值是否被修改来检测栈溢出。
2025-04-04 19:37:56
1446
原创 DMA在SPI和I2C通信中的应用详解
DMA(Direct Memory Access,直接内存访问)是一种允许外围设备(如SPI、I2C控制器)直接访问系统内存而无需CPU干预的数据传输技术。在传统的数据传输中,CPU需要执行一系列指令来移动数据,这不仅占用宝贵的处理时间,还限制了数据传输速率。DMA控制器是一个专门的硬件模块,能够独立于CPU执行内存操作,允许数据传输在后台进行,同时CPU可以执行其他任务。当传输完成时,DMA控制器会通知CPU(通常通过中断)。将DMA与SPI和I2C结合使用可以显著提高嵌入式系统的性能和能效。
2025-04-02 20:28:12
1405
原创 I²C总线高级特性与故障处理分析
I²C(Inter-Integrated Circuit,通常简称为I2C或IIC)是一种由Philips(现NXP)开发的串行通信总线,广泛应用于短距离、芯片间通信,特别适合单板系统内的外设连接。I²C总线采用两线制:这两条线都是开漏(Open-Drain)或开集(Open-Collector)输出,需要外接上拉电阻,空闲状态为高电平。这种设计支持多主机通信、时钟同步和总线仲裁功能。基本特点:基本信号时序元素:典型通信时序:1.3 寻址方式与读写操作标准7位寻址:读操作流程:写操作流程:随着I²C总线
2025-04-02 20:06:59
1087
原创 SPI高级特性分析
QSPI通过四线传输和内存映射等高级特性,为资源受限的嵌入式系统提供了高速外部存储解决方案。高性能:相比标准SPI提供最高4倍的传输速率内存扩展:通过XIP技术扩展有限的片上存储灵活性:支持多种操作模式,可根据需求调整性能和兼容性广泛支持:众多微控制器集成了QSPI控制器,闪存芯片供应充足。
2025-04-02 19:45:08
1302
原创 FreeRTOS通信机制:队列、StreamBuffer与MessageBuffer
队列是FreeRTOS中最基础的任务间通信机制,实现了多任务间数据项的传递。队列可以存储多个固定大小的数据项,通常遵循FIFO(先进先出)原则,但也支持LIFO(后进先出)操作。
2025-03-31 20:27:42
887
1
原创 CMake与Makefile深度分析
构建系统是软件开发中用于自动化从源代码到可执行程序转换过程的工具链。它作为开发流程的核心环节,管理着代码编译、链接以及其他构建步骤,确保项目能够高效、一致地构建。构建系统是一套工具和规则的集合,负责执行从源代码到最终产品的全部或部分转换过程。编译源代码:将高级编程语言(如C/C++)转换为目标代码链接目标文件:将多个目标文件组合成可执行程序或库管理依赖关系:确保文件按正确顺序编译,并在依赖变更时重新构建执行辅助任务:如资源生成、测试运行、文档生成等打包和部署:创建安装包或部署包。
2025-03-31 16:43:38
505
原创 GDB调试方法分析
GDB (GNU Debugger) 是GNU软件系统中的强大调试工具,它可以让我们在程序运行时观察程序的内部状态,主要用于调试用C、C++等编译型语言编写的程序。启动程序,并指定可能影响其行为的任何内容使程序在指定条件下停止程序停止时检查发生了什么修改程序中的内容,以便纠正错误的影响# 定义自定义命令> print i> print j> end# 使用自定义命令。
2025-03-29 16:58:05
838
原创 STM32F407部署简易边缘ai
模型训练和验证tranai文件夹):使用 Python 训练 SVM 分类器,并转换为 ONNX 格式嵌入式部署AI_test文件夹):使用 STM32 Cube.AI 将模型部署到 STM32F4 系列微控制器上AI 相关常量的定义文件。
2025-03-26 10:27:29
919
原创 个人写内核调度代码htOS
htOS是一个专为ARM Cortex-M3微控制器设计的轻量级实时操作系统内核,支持优先级抢占式调度、信号量、消息队列等基本功能。它的设计目标是简单易懂、易于移植,同时保持良好的实时性能。通过研究htOS的源代码,你可以深入理解实时操作系统的核心工作原理,而不必面对FreeRTOS等成熟RTOS成千上万行复杂代码的挑战。至于为什么前缀是ht,h是我的姓,t代表的是tiny。因为这个内核实现的功能非常小,仅仅只实现了内核调度和信号量与消息队列还有内存管理。
2025-03-25 10:08:17
814
原创 FreeRTOS内核源码分析-内存管理
FreeRTOS的堆内存管理是其核心内存管理机制,主要用于动态分配TCB(任务控制块)和任务栈。FreeRTOS提供了5种不同的堆实现方案,开发者可以根据应用需求选择最合适的一种,或者实现自己的堆管理方案。
2025-03-21 21:25:45
638
原创 FreeRTOS内核源码分析-中断管理与CPU管理
目前阅读的FreeRTOS资料很多都是基于11.0.0以前版本的,我阅读了一下最新的源码,发现FreeRTOS自11.0.0之后已经支持多CPU使用一个内核。
2025-03-21 20:31:13
1386
原创 FreeRTOS内核源码分析-任务通知
任务通知(Task Notifications)是FreeRTOS自v8.2.0版本引入的一种高效、轻量级的任务间通信和同步机制。与传统的队列、信号量等通信原语不同,它无需创建单独的内核对象,直接利用任务控制块(TCB)内部的专用字段实现任务间直接通信,极大地提高了通信效率并降低了内存占用。
2025-03-20 16:34:03
1126
1
原创 FreeRTOS内核源码分析-事件组
事件组(Event Groups)是FreeRTOS提供的一种轻量级同步原语,专为多任务间的事件标志同步设计。
2025-03-20 15:16:44
913
原创 FreeRTOS内核源码分析-信号量、互斥量与消息队列
FreeRTOS通过一种统一的数据结构设计,巧妙地实现了队列、信号量和互斥量等不同同步原语。这个核心结构就是,简称Queue_t。
2025-03-17 21:20:04
1055
1
原创 FreeRTOS内核源码分析-任务2
基于优先级的抢占:高优先级任务始终优先于低优先级任务执行时钟滴答驱动:SysTick定时器触发周期性调度检查事件驱动切换:资源访问、延时、通知等都可能触发任务切换PendSV实现切换:使用低优先级PendSV中断执行实际的上下文切换优先级继承:通过互斥量实现优先级继承,避免优先级反转问题。
2025-03-17 20:40:04
647
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人