Thread 中讨论的其他器件: SYSBIOS
工具/软件:TI-RTOS
在定制板上运行 TI-RTOS 的 AM5728 DSP。 处理器速度为750 MHz。
PDK 1.0.5、IPC 3.44.0、XDC 3.2.1.22、BIOS 6.46.1.38
我一直在使用 Execution Graph 工具来研究我们项目的时间轴。 我们有一个硬实时要求、即每71微秒处理一次来自 FPGA 的采样数据中断。 我们使用通过 IPC 的 MessageQ 从 DSP 到 Linux ARM 主机进行通信。
系统运行正常、直到我们从 ARM 向 DSP 发送消息。 下面的图片显示了处理的时间线。 查看图片的左侧、Hwi.82633508 (顶部的蓝色条)是每71微秒一次的实时中断。 在 Hwi 之后、fpgaDataThread 必须运行到完成。 这通常需要7-8 uec 的时间来执行。 如您所见、fpgaDataThread 完成后、LogUtilThread 将运行、这是系统中优先级最低的线程。 这很好。
现在我们来看看 Hwi.82633508 (图片中间)的第二次执行、在 Hwi 之后、fpgaDataThread 开始运行、但随后它被 EventCombiner Hwi 中断、这必须是从主机到达的消息引起的中断。 X2-X1是 Hwi 时间或15微秒(对于 Hwi 来说、这似乎是一个巨大的时间)。
Hwi 运行后、RPMessage_swiFxn Swi 运行。 由于所有 Swi 的优先级高于所有任务、RPMessage_swifxn Swi 运行至完成。 这需要 X4-X3 + X6-X5或52微秒。 考虑到消息长度为4个32位字并且 Swi 本身没有实际处理、看来52微秒只是为了接收一个短消息而锁定处理器的时间太长了。 如果你为 Hwi 增加时间、我们为71 uec 中的67 uec、仅用于接收网格。
您还可以看到、在 RPMessage Swi 期间、我们会得到另一个 Hwi.82633508中断、因此我们基本上会错过实时数据中断、因为我们从未完成之前的处理。
希望我启用了一些不需要的日志记录或一些其他问题、或者我们可能需要放弃 MessageQ 以实现更精简的消息传递实现。
