【STM32CubeIDE】Debug调试——FreeRTOS

前言

此篇文章是关于【STM32CubeIDE】Debug调试中相关于的FreeRTOS方面调试功能的基本教程。因此不适用于STM32的初学者或者不会FreeRTOS开发的。

教程内容包括:RTOS内核感知调试、FreeRTOS任务列表视图、FreeRTOS队列视图、FreeRTOS信号量视图、FreeRTOS定时器视图。

演示的STM32CubeIDE是汉化过的,没汉化的找对应英文就行。
演示版本STM32CubeIDE 1.15.0

在这里插入图片描述

【STM32CubeIDE】Debug调试基础的介绍(包含到不限于
工具栏、Debug 窗口介绍)
可看我的上一篇文章:【STM32CubeIDE】Debug调试——SWV
在这就不过多介绍,建议小白还是看一下。

基础配置

STM32CubeMX

在STM32CubeMX部分,要配置外设SYS。找到"Debug"设置将其更改为“Trace Asynchronous Sw”。
将 “TimeBase Source” 从 SysTick 更改为另一个 Timer

在这里插入图片描述

STM32CubeMX配置RTOS启用跟踪信息,如下图所示。
也可以在freeRTOSConfig.h 中将定义configUSE_TRACE_FACILITY设置为 1 来启用跟踪信息。

在这里插入图片描述

要验证 RTOS 运行时统计信息,应用程序必须设置额外的时基。建议它的运行速度至少比用于处理 RTOS 滴答中断的时钟频率快 10 倍。在本例中选择TIM1,如下图所示。

在这里插入图片描述

注意:可以启用任何计时器,但不能选择SysTick和HAL 驱动程序选择的时基源。
为应用程序添加必要的外设、任务、队列、信号量和计时器后,生成代码并转到代码编辑部分。

程序

需要添加一些代码片段来启用所需的运行时统计信息。在“Src”文件夹中的 freertos.c 文件,并将以下行代码添加到代码中。

/* Functions needed when configGENERATE_RUN_TIME_STATS is on */
__weak void configureTimerForRunTimeStats(void)
{
	HAL_TIM_Base_Start_IT(&htim1);//这里的定时器修改成上一步配置的定时器
}

extern volatile unsigned long ulHighFrequencyTimerTicks;
__weak unsigned long getRunTimeCounterValue(void)
{
return ulHighFrequencyTimerTicks;
}

如下图所示。

在这里插入图片描述

在 stm32f4xx_it.c 文件内使用选定的 IRQ 处理程序来执行,添加 ulHighFrequencyTimerTicks 来创建统计信息。如下图所示。

在这里插入图片描述

volatile unsigned long ulHighFrequencyTimerTicks = 0;

ulHighFrequencyTimerTicks++;

使用头文件 #include "queue.h" 调用 vQueueAddToRegistry() 函数,使队列和信号量视图能够显示对象。该函数将一个对象添加到队列注册表中,并采用两个参数。第一个参数是任务的句柄。第二个参数是任务的名称。如下图所示。

在这里插入图片描述

启用运行时统计信息的收集,文件 freeRTOSConfig.h 必须包含:
1、将定义configGENERATE_RUN_TIME_STATS值设置为 1。

2、定义 portCONFIGURE_TIMER_FOR_RUN_TIME_STATS() 以调用配置计时器的函数。计时器用于性能分析,并定义 portGET_RUN_TIME_COUNTER_VALUE() 以调用从性能分析计时器读取当前值的函数。
如下图所示。
在这里插入图片描述

/* USER CODE BEGIN 2 */
/* Definitions needed when configGENERATE_RUN_TIME_STATS is on */
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS    configureTimerForRunTimeStats
#define portGET_RUN_TIME_COUNTER_VALUE            getRunTimeCounterValue
/* USER CODE END 2 */

STM32CubeIDE

点击小虫子在这里插入图片描述边上的下三在这里插入图片描述
按图片选择。

在这里插入图片描述

选择在弹出窗口选择这个调试器,如下图。
进入调试器的设置。

在这里插入图片描述

如下图所示启用RTOS Proxy进行基础配置。

在这里插入图片描述

功能

在工程里点击这个在这里插入图片描述小虫子之后,就会进入Debug界面。下面教程默认已经进入到了Debug界面。

在这里插入图片描述

注意:进入Debug请确保stlink和单片机已正确与电脑相连。

RTOS内核感知调试

启用 RTOS 内核感知(这里的启动配置就是上一章节的STM32CubeIDE的配置)调试并启动调试后,所有线程都会显示在调试视图中。通过在调试视图中选择线程,线程的当前上下文将在各种视图中可视化。例如,变量、寄存器和编辑器视图反映了活动的堆栈帧。如下图所示。

在这里插入图片描述

FreeRTOS任务列表视图

打开FreeRTOS任务列表视图,如下图所示。

在这里插入图片描述

每种类型的任务参数都有一列,每个任务都有一行。默认情况下,由于性能原因,堆栈分析(“最小可用堆栈”列)处于禁用状态。要启用堆栈分析,请使用 FreeRTOS Task List view 工具栏中的 Toggle Stack Checking 按钮,如下图所示。

在这里插入图片描述

运行程序在这里插入图片描述

在这里插入图片描述

暂停程序在这里插入图片描述

在这里插入图片描述

如果调试运行了一段时间并且暂停了,可以看到FreeRTOS Task List窗口的任务信息,如下图所示。
在这里插入图片描述

如果项目是在 FreeRTOS.h 文件中定义了configRECORD_STACK_HIGH_ADDRESS来构建(大约在第 400 行附近),如下图所示。
列信息将从 Min Free Stack 更改为 Stack Usage,如下图2所示。

在这里插入图片描述

在这里插入图片描述

FreeRTOS队列视图

打开FreeRTOS Queue视图,如下图所示。

在这里插入图片描述

FreeRTOS Queue默认视图始终最完整地显示,如下图所示。

在这里插入图片描述

FreeRTOS信号量视图

打开FreeRTOS Semaphores视图,如下图所示。

在这里插入图片描述

FreeRTOS Semaphores默认视图始终最完整地显示,如下图所示。

在这里插入图片描述

FreeRTOS定时器视图

打开FreeRTOS Tiners视图,如下图所示。

在这里插入图片描述

FreeRTOS Tiners默认视图始终最完整地显示,如下图所示。

在这里插入图片描述

在这里插入图片描述

参考:
1.STM32CubeIDE-FreeRTOS
2.How to enable FreeRTOS™ Run Time and Stack Usage view

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值