MCU进阶篇(一)——选项字节
MCU进阶篇(一)——选项字节前言: 1 介绍 本篇以STM32F103 MCU系列为例,选项字节(Option Bytes) 是STM32微控制器中一个特殊的配置区域,用于存储芯片的关键系统级配置信息。这些配置在芯片上电或复位时被读取,直接影响其硬件行为和安全特性。选项字节就是STM32芯片的一组“启动开关”或“熔丝位”(Fuse Bits),用来设置一些不能在运行时随意更改的重要参数。 2 存储 在STM32F103系列中,选项字节不是程序代码的一部分,也不是RAM中的变量,而是保存在Flash存储器中的一个受保护区域,具有非易失性(掉电不丢失)。选项字节存储在MCU片内Flash中,查看芯片数据手册,其中介绍了选项字节在内存中的存放位置。它的前面是片内Flash中的固件,后面是主内存区。 在参考手册中介绍了选项字节的大小,共计16字节。 3 定义 在官方文档 STM32F10xxx Flash memory microcontrollers...
Vim基础篇(三十一)——字符替换插件vim-clap
Vim基础篇(三十一)——字符替换插件vim-clap前言: 在linux下编程,终端最是常用的工具,将Vim和Terminal配合好使用将大大提高效率。 1 介绍 vim-clap 是一个强大的Vim插件,提供了多种功能,其中之一是字符替换功能。它允许用户在Vim中快速查找和替换文本,支持正则表达式和多文件操作,非常适合处理大量文本数据。 异步处理(Async) 所有搜索操作在后台异步执行,不会阻塞编辑器。 提供流畅的用户体验,即使在大型项目中也能快速响应。 无需外部依赖(可选) 默认使用 Vim 内置功能实现,无需安装 fzf、ripgrep 等外部工具。 可选集成 rg(ripgrep)、git 等工具以提升性能。 丰富的源(Providers) 支持多种查找模式,例如: Clap files:文件查找(支持 .gitignore) Clap git_files:Git 管理的文件 Clap grep:文本内容搜索(类似 :Ag) Clap buffers:打开的缓冲区切换 Clap marks:书签跳转 Clap...
OpenOCD基础篇(三)——擦除和读取
OpenOCD基础篇(三)——擦除和读取前言: 本篇文章介绍使用OpenOCD烧录和调试。 1 全片擦除 通过OpenOCD可以对MCU的Flash进行全片擦除,本文以STM32F103ZET6单片机为例,创建一个OpenOCD的脚本文件 jlink_swd_stm32f103_erase_flash.cfg ,内容如下: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081# ============================================# STM32F103ZET6 全片擦除配置文件(J-Link + SWD)# 支持无 nSRST 连接情况# ============================================# 使用 J-Link...
Vim基础篇(三十)——Debug插件vimspector
Vim基础篇(三十)——Debug插件vimspector前言: 在linux下编程,终端最是常用的工具,将Vim和Terminal配合好使用将大大提高效率。 1 介绍 vimspector 是一个为Vim和Neovim提供图形化调试功能的插件,它使得在Vim中进行代码调试变得更加直观和高效。vimspector支持多种编程语言(如Python、C/C++、JavaScript、Go、Java等),通过集成 Debug Adapter Protocol (DAP) 实现与各种调试器的通信。 多语言支持 : 借助 DAP 协议,vimspector 可以支持任何实现了对应 Debug Adapter 的语言,例如: Python(使用 debugpy ) C/C++/Rust(使用 lldb-vscode 或 gdb ) JavaScript/TypeScript(使用 vscode-node-debug2 ) Go(使用 delve ) Java、Ruby、PHP...
FreeRTOS基础篇(八)——高级调试功能
FreeRTOS基础篇(八)——高级调试功能前言: 在嵌入式开发中,系统的稳定性与性能优化离不开强大的调试支持。FreeRTOS 不仅是一个轻量级实时操作系统,还提供了一系列高级调试功能,帮助开发者深入洞察系统运行状态。从任务调度跟踪、CPU 使用率统计,到栈溢出检测与内存分配监控,结合 Tracealyzer 和 SystemView 等可视化工具,可大幅提升问题定位效率。本文介绍 FreeRTOS 的核心调试机制及其应用,助你打造更可靠、高效的嵌入式系统。 1 介绍 FreeRTOS提供了多种高级调试功能,帮助开发者在开发和优化嵌入式系统时定位问题、分析运行状态。主要包括: 可视化跟踪(Trace Facility):通过启用 configUSE_TRACE_FACILITY 和使用第三方工具(如 Tracealyzer 和 SystemView ),可记录任务调度、队列操作、内存分配等事件,生成时间轴视图,用于分析系统行为和性能瓶颈。 运行时统计(Runtime Stats):启用...
FreeRTOS基础篇(七)——事件组和任务通知
FreeRTOS基础篇(七)——事件组和任务通知前言: 在嵌入式实时系统中,任务间的同步与通信是构建复杂应用的核心。FreeRTOS 提供了多种机制来协调任务执行,其中事件组(Event Group)和任务通知(Task Notifications)因其高效性和灵活性被广泛使用。事件组适用于多事件的逻辑组合等待,而任务通知则是最快速的任务间通信方式,无需额外创建队列或信号量。本文通过实例详解两者的工作原理、API 使用场景及性能差异,帮助开发者在实际项目中做出更优选择,提升系统响应速度与资源利用率。 1 事件组(Event Group)1.1 介绍 事件组是一种允许一个或多个任务等待多个“事件”中某些或全部发生的同步机制。它使用一个24位(STM32上通常为23位可用)的位图来表示不同的事件标志(bit flags),每个bit可代表一个特定事件。 典型用途: 等待多个条件中的任意一个发生(如:按键按下 OR 定时器超时) 等待多个条件全部满足(如:网络连接 + 时间同步 + 配置加载完成) 1.2...
FreeRTOS基础篇(六)——中断管理
FreeRTOS基础篇(六)——中断管理前言: 在实时操作系统中,中断是响应外部事件的核心机制,而如何安全、高效地处理中断,直接关系到系统的实时性与稳定性。FreeRTOS 通过精心设计的中断管理机制,实现了中断与任务间的协同工作,既保证了关键操作的及时响应,又避免了资源竞争与系统崩溃的风险。本文聚焦 FreeRTOS 在 Cortex-M 平台上的中断处理原理,深入解析 FromISR API、中断优先级配置、PendSV 调度机制等核心概念,帮助开发者正确编写中断服务程序,充分发挥 RTOS 的实时性能。 1 介绍 中断 是硬件或软件发出的信号,通知CPU暂停当前任务,去处理更紧急的事件(如定时器溢出、串口接收数据等)。处理中断的函数称为 中断服务程序(ISR, Interrupt Service Routine) 。中断处理应尽可能快,避免阻塞系统,因此中断内要处理的东西应该尽可能精简。 FreeRTOS对中断进行了优化,使其与任务调度协同工作。主要特点包括: 可屏蔽中断(Maskable...
FreeRTOS基础篇(五)——内存管理
FreeRTOS基础篇(五)——内存管理前言: 在嵌入式系统中,内存资源宝贵且有限,合理的内存管理对系统稳定性与实时性至关重要。FreeRTOS 通过提供多种可选的堆管理方案(heap_1 至 heap_5),让开发者能够根据应用场景灵活选择最合适的策略,兼顾效率、安全与碎片控制。本文系统介绍这五种内存管理方式的核心原理、适用场景及配置方法,帮助你深入理解 FreeRTOS 的内存机制,做出更优的设计决策。 1 介绍 FreeRTOS作为一个轻量级的实时操作系统(RTOS),在资源受限的嵌入式系统中广泛应用。由于其不依赖标准c库的动态内存管理(如 malloc / free),FreeRTOS提供了多种灵活且可配置的内存管理方案,以满足不同应用场景对性能、安全性和内存碎片的要求。 FreeRTOS不直接使用c标准库中的 malloc() 和 free(),而是提供了一套可移植、可配置的内存管理机制,以适应资源受限的嵌入式环境。其核心思想是:将一块静态定义的内存区域作为堆(heap),由...
FreeRTOS基础篇(三)——任务管理
FreeRTOS基础篇(三)——任务管理前言: 本文将系统性地讲解 FreeRTOS 中任务的创建、运行、状态转换以及阻塞与唤醒机制,帮助读者理解如何利用任务实现复杂的实时应用逻辑。通过实际代码示例,您将掌握任务的基本使用方式,并为后续学习队列、信号量、事件组等高级功能打下坚实基础。让我们从“任务”出发,逐步揭开 FreeRTOS 多任务并发的神秘面纱。 1 介绍 FreeRTOS的 任务管理 是其核心功能之一,具有轻量、高效、可移植性强等特点。主要具有以下特点。 多任务并发执行 FreeRTOS支持多任务并法执行(通过时间片轮转和优先级抢占实现),每个任务都是一个独立的函数,拥有自己的 栈空间 和 上下文 环境。值得解释下这里所说的栈空间是什么,它包含函数内部的局部变量、函数调用时的参数信息、函数调用后的返回地址,而上下文是指程序计数器(PC指针)、堆栈指针(SP)、通用寄存器(R0, R1,...
FreeRTOS基础篇(四)——时间管理
FreeRTOS基础篇(四)——时间管理前言: 本文简要介绍FreeRTOS中的时间管理机制,重点讲解系统节拍(SysTick)的工作原理、节拍计数器的使用以及任务延时函数的差异,帮助读者掌握如何在实际项目中实现精确的时间控制。 1 介绍 时间管理是实时操作系统(RTOS)的核心组成部分之一。在 FreeRTOS 中,时间管理主要依赖于一个周期性的硬件定时器中断——系统节拍(SysTick),它为整个系统提供时间基准,驱动任务调度、延时控制、超时判断等关键功能。 2 系统节拍(Tick) FreeRTOS使用一个固定的频率产生周期性中断,称为 系统节拍中断(Tick Interrupt),通常由处理器的SysTick定时器实现。每次中断发生时,FreeRTOS内核会调用 xTaskIncrementTick() 函数,递增一个全局计数器 xTickCount,这个计数器记录了自系统启动以来经过的节拍数。 默认节拍频率:1000Hz(即每 1ms 一次中断)。可配置范围:一般为10Hz ~...








