-1

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

4

1 回答 1

3

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

您显然有受时间影响的错误代码。停止代码不一定会停止外围设备,当然也不会停止系统与之交互的外部世界。例如,当您在断点处停止时,世界继续,中断处于未决状态(可能有几个),因此当您恢复执行时,执行路径和线程调度顺序可能与自由运行时有很大不同这些挂起的中断被处理,然后发出事件,导致不同的任务成为挂起的准备运行,然后以与否则会发生的顺序不同的顺序运行。

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

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

于 2021-09-24T16:23:29.457 回答