工具与软件:
您好、专家!
我正在开发 PRU RPMsg 应用、但遇到问题。
*适用于 AM64X 08_06_00_42 (Linux 内核5.10)的 Processor SDK Linux
* PSSP 6.1.
* Code Composer Studio 版本: 12.8.1.00005.
我正在使用 PRU_ICSSG0的 pru0和 pru1。 并使用 rpmsg_pru30、rpmsg_pru31。 当 pru0的 RPMsg (rpmsg_pru30)和 pru1的 RPMsg (rpmsg_pru31)同时并行使用时、一侧的数据偶尔会被覆盖。 仅使用 pru0或 pru1时不会产生这种干扰。
我正在调查原因、并使用下面的 PSSP 回声示例发现了重现性。
* pru-software-support-package-6.1.0\examples\am64x\pru_3580 Msg_Echo_Interrupt
* pru-software-support-package-6.1.0\examples\am64x\pru_3871 Msg_Echo_Interrupt
本文档演示了这两个 PRU RPmsg echo 示例。
加载上述每个 PRU 的固件并启动它、然后出现 RPMsg 字符器件。 然后测试回波。
此示例暂时没问题、但当两个 PRU RPMsg 同时重复多次时会发生干扰。 重复时间戳和回显下面的 Shell 命令循环是如何重现干扰的方法。 要同时执行这些命令、请在另一个 ssh 进程中运行每个命令。 并运行一段时间并记录结果。
# pru0
while true; do echo -n "$(date -Ins):";echo "test30">/dev/rpmsg_pru30;timeout 0.05 cat /dev/rpmsg_pru30;done
# pru1
while true; do echo -n "$(date -Ins):";echo "test31">/dev/rpmsg_pru31;timeout 0.053 cat /dev/rpmsg_pru31;done
超时命令参数用于 调整同步执行的时序。
查看结果,大多数都很好,但你可以看到交换"test30"和"test31"。
pru0: 结果应仅为"test30"、但有些"test31"
pru1: 结果应仅为"test31"、但有一些"test30"
交换的时间戳非常接近另一个 PRU RPmsg 通信时间戳。 这让我怀疑某种种族状况。
您能否告诉我此问题的原因、如何解决此问题以及如何解决此问题?