为什么 FreeRTOS 需要在断点停止一次到 运行 好?

Why FreeRTOS requires stop once in a breakpoint to run well?

我有一个使用 FreeRTOS V10.3.0 以 C++ 编写的 Zynq MPSoC (Vitis 2020.2) 应用程序。如果在断点处停止一次,这个应用程序运行得很好。如果我禁用所有断点程序运行错误?可能是什么问题?

这有多少种可能?!它是一个实时操作系统,大概也是一个实时应用程序。如果停止协处理器,则会影响时序。在不知道硬件、软件、断点所在的位置以及 free-运行ning 时出现的错误的情况下,无法回答您的具体问题。 IE。您需要对其进行调试 - 对于为什么停止处理器的侵入性操作“修复”您的 系统没有通用的解释。

您显然有受时序影响的错误代码。停止代码并不一定会停止外围设备,当然也不会停止您的系统与之交互的外部世界。比如你停在断点上,世界还在继续,中断变成pending(可能有好几个),这样当你恢复执行的时候,执行路径和线程调度顺序很可能和free时有很大的不同-运行 因为所有这些挂起的中断都得到处理,并依次发出事件,这些事件导致不同的任务成为挂起的准备就绪-运行,然后 运行 以与否则发生的顺序不同的顺序。

最终你问错了问题;断点并没有神奇地“修复”您的代码,而是显着改变了它 运行 的方式,从而隐藏或避免了一些现有的错误(或错误)。 Bug 依然存在,所以问题最好侧重于寻找 Bug,而不是“魔术思维”。

错误可能在任何级别,但最有可能是与不适当的任务分区、优先级分配、IPC、任务同步或资源保护有关的设计问题。通常可能太宽泛,无法在单个 SO 问题中处理。