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 ~...
OpenOCD基础篇(二)——烧录和调试
OpenOCD基础篇(二)——调试和烧录前言: 本篇文章介绍使用OpenOCD烧录和调试。 1 连接芯片 OpenOCD需要配置cfg文件才能连接芯片,cfg需要根据使用环境进行配置,以stm32f103ZET6通过J-Link,按照SWD接线方式连接芯片,以下给出 jlink_swd_stm32f103_connect.cfg 配置。 1234567891011121314151617# jlink-swd-f103.cfg# J-Link调试器配置source [find interface/jlink.cfg]# 选择SWD传输模式transport select swd# 适配器速度设置(可根据需要调整)adapter speed 4000# STM32F103ZET6目标芯片配置source [find target/stm32f1x.cfg]# 复位配置reset_config srst_only# 或者使用# reset_config...
OpenOCD基础篇(一)——安装
OpenOCD基础篇(一)——安装前言: 本篇文章介绍OpenOCD及安装。 1 介绍 OpenOCD的全称是Open On-Chip Debugger,即开源片上调试器。它是一个开源的、功能强大的软件工具,主要用来提供调试、芯片编程(刷写固件)和边界扫描测试功能,专门针对嵌入式系统。简单来说,OpenOCD 是一个“翻译官”和“桥梁”,它连接了你的电脑(PC)和嵌入式目标板(通常是基于 ARM、RISC-V、MIPS 等架构的微控制器)。 OpenOCD核心功能如下。 调试 片上调试 : 利用芯片内置的调试模块(如 ARM CoreSight、RISC-V Debug Module),实现无需额外仿真器就能进行源代码级别的调试。 支持GDB : OpenOCD可以作为GDB 服务器,这意味着你可以使用功能强大的GNU调试器 来单步执行、设置断点、查看变量和寄存器等。几乎所有主流的嵌入式开发环境(如Eclipse、VS...
CMake进阶篇(一)——搭建stm32工程
CMake进阶篇(一)——搭建stm32工程前言: 本篇文章探讨通过CMake搭建一个stm32工程。 1 下载 本篇文章以STM32F10x芯片为例搭建CMake工程,现在芯片长官网下载标准库,以主流HAL库为例。登陆 STM32官网 ,在官网搜索框中输入 STM32CubeF1 来查找并下载完整的MCU固件包。这个压缩包内就包含了STM32F103ZE以及整个F1系列所有芯片的HAL库源码、示例项目和文档。 解压下载的 stm32cubef1.zip 包,目录结构如下。 搭建工程所需的文件就在 **stm32cubef1.zip里,或者也可以通过STM32Cube创建一个CMake工程的Demo,从Demo中获取搭建工程所需要的文件。 1.1 获取drv HAL库和CMSIS在 Drivers/STM32F1xx_HAL_Driver 路径下,将其拷贝到我们搭建的工程中,这里我放到 drv 目录中使用。CMSIS(Cortex...
GitKraken破解 2025
GitKraken破解 2025前言: 新的GitKraken用之前老的破解办法已经失败了,这篇文章更新一种新的破解方法,破解最新的GitKraken。 1 下载 在 官网 下载最新的GitKraken版本,比如目前下载的是v11.6.0版本,选择自己需要的平台版本,比如我是在linux环境下则下载deb文件。执行以下指令安装。 1sudo dpkg -i gitkraken-amd64-v11.6.0.deb 由于原破解工具仓库被和谐了,我将工具上传到了百度云盘 分享 ,可以获取到破解工具并解压。 2 破解 破解工具依赖yarn,执行以下指令安装yarn。 1sudo npm install --global yarn &esmp;如果报错提示不支持npm指令,则还需要安装node.js,且版本要求 >= 12。执行以下指令安装node.js。 12sudo curl -sL https://deb.nodesource.com/setup_20.x |...










