我正在接管一个“遗留”嵌入式系统应用程序,不是很遗留,我首先担心的是我发现在开发过程中,在某些时候应用程序的时间限制在需求中丢失了的项目。现在,我的任务是重构它并使其按预期实时化。
该项目是为 C 和 C++ 中的 ATMEL UC3 完成的。它在 FreeRTOS 上运行,有 6 个任务。5 用于管理外部设备和另一个,以最低优先级和最重的任务为主程序。我做的第一件事是测量主要任务所花费的时间,有时它会脱离死线并不奇怪,因此完整的任务是在几个周期内执行的。
谁能建议我在这种情况下可能采取的主要观点是什么?
你会怎么做?我知道我应该遵循所有执行路径的流程并计算指令,然后选择最差的执行路径,并以芯片的频率给我实时执行。那是理论上的,是否有任何工具,技巧或程序可以让它更容易一些?
更新:
出于保密原因,我无法分享来源。此外,我一直在深入挖掘,发现主要延迟显然是由队列大小产生的。大多数队列是为保存 2 或 3 条消息而创建的。我需要做一些测试才能在此处提供更多信息。理论上,如果队列被填满,那么其余进程将无法再发送,直到再次有空闲空间来接收更多消息。然后进程暂停,导致连续重新调度。我的想法是将队列大小增加到 10,以查看它是否可以提高性能和时间。
更新 2 从建议开始,当我在黑暗中发现它们非常有帮助时,我遇到了一个名为“理解”的工具,它不是免费的,但可以帮助我获得分析和字符。您还可以看到复杂函数的字符流,因此您可以看到最长的执行路径。