[STM32F1] 在Nucleo板上调试FreeRTOS应用程序如何逐步观察表达式?

[复制链接]
359|10
SocialButterfly 发表于 2025-9-25 22:22 | 显示全部楼层 |阅读模式

在STM32CUBEIDE中想逐步调试FreeRTOS应用程序,但遇到一个问题:每次在调试模式下尝试单步执行时,GUI中的执行指针都会跳转到TIM8_TRG_COM_TIM14_IRQHandler。对于FreeRTOS,我使用TIM14作为系统节拍定时器(已在CubeMX中初始化)。如何解决这个调试问题,以便能逐步调试正在运行的线程?

我有两个正常优先级的任务在运行,通过观察实时表达式和两个计数器可以确认它们正在以时间片轮转调度方式运行。但我希望进行单步调试时,每次点击下一步指针都会跳转到TIM8_TRG_COM_TIM14_IRQHandler。

公羊子丹 发表于 2025-9-26 07:23 | 显示全部楼层
你这个现象很正常,因为FreeRTOS靠SysTick或者TIM14产生系统节拍中断,单步的时候自然就会跳进去。
周半梅 发表于 2025-9-26 07:23 | 显示全部楼层
如果你只是想跟踪任务里的逻辑,可以考虑在CubeIDE里关闭中断步入,调试设置里有选项的。
帛灿灿 发表于 2025-9-26 07:24 | 显示全部楼层
FreeRTOS调试最好不要用单步,建议用断点观察任务切换时的状态。
童雨竹 发表于 2025-9-26 07:25 | 显示全部楼层
你用的TIM14作为tick source,那每步都会触发节拍中断,所以调试器才会一直跳到TIM14_IRQHandler。
万图 发表于 2025-9-26 07:26 | 显示全部楼层
可以在debug配置里勾选“Skip all interrupts”,这样就不会再每次单步都跳进中断服务函数了。
Wordsworth 发表于 2025-9-26 07:28 | 显示全部楼层
其实更推荐你用Live Expressions或者FreeRTOS Task Aware Debugging插件,看任务堆栈和调度情况。
Bblythe 发表于 2025-9-26 07:29 | 显示全部楼层
如果非要单步,可以在进入任务代码之前临时屏蔽tick中断,调试完再打开。
Pulitzer 发表于 2025-9-26 07:30 | 显示全部楼层
换用SysTick作为系统时钟也会遇到一样的问题,本质上是RTOS调度离不开中断。
Uriah 发表于 2025-9-26 07:31 | 显示全部楼层
我之前调FreeRTOS都是打log或者用SWV trace来跟踪,比单步调试更直观。
Clyde011 发表于 2025-9-26 07:32 | 显示全部楼层
简单说就是:不要和RTOS抢中断,学会用断点+任务感知调试工具才是正解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

55

主题

55

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部