我正在使用STR3240G主板上的FreeRTOS开发实时系统。
因此,我使用Profiler软件查看不同任务之间的情况 在奔跑期间。此探查器向我显示每个时刻(微秒)正在运行的任务以及已到达的中断。
这个分析器使我能够“标记”代码上的不同位置,所以我知道 当它在那里。所以我运行程序并做一个记录。
我查看了记录,我看到(例如)Ctrl任务介于两者之间 15毫秒的代码行(此时大小变化)没有任何代码 任务更改没有中断到达,此后系统根据记录和我的标记从这一点开始正常继续。
我尝试关闭禁用不同的中断而没有任何成功。 有谁知道它可能是什么?
答案 0 :(得分:0)
在评估板上,有一个支持ETM跟踪的MIPI连接器-与其他开发板相比,是相当豪华的! 如果您还有一个更昂贵的调试适配器之一,它也支持ETM跟踪(例如uTrace或J-Trace或 ULINKpro或I-jet Trace),您应该使用它来跟踪整个控制流,而不必检测任务和ISR。
否则,您应该重新检查是否确实在较低级别上检测了每个IRQ处理程序(归功于@RealtimeRik,他指出了这一点),以便探查器可以真正发现它。 尤其是如果您使用的是第三方库,则可能是某些IRQ由您(或探查器)没有代码的处理程序提供服务。 由于我必须自己做一次这种体验,因此建议您仔细检查NVIC设置,以重新检查是否存在您未意识到的ISR。
另一个问题是探查器在内部如何工作。 如果它基于ETM / TPIU或ITM / SWO跟踪,请参见上文。 如果它创建并计算了大量快照,则可能会出现一些系统性的情况,从而无法在软件的特定部分中创建快照:
难道非屏蔽中断或异常处理程序正在以无法被收集快照的机制中断的方式运行?
控制任务的定时是否可能与快照使用的定时信号相关(有些巧合)?
如果您在意外的“分析间隙”(例如,成百上千个NOP
)之前插入了一些耗时的额外代码,会发生什么情况?