This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM625:FreeRTOS + SPI 竞态条件错误

Guru**** 2489685 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1557049/am625-freertos-spi-race-condition-bug

器件型号:AM625


工具/软件:

在 FreeRTOS 环境中使用 SPI 时、我发现一个奇怪的竞态条件错误。 通过启用跟踪、我注意到如果 ClockP_timerTickISR 被 UDMA_eventIsrFxn 中断、则一些存储器似乎已损坏、例如 FreeRTOS 任务名称已清零。

我起初怀疑堆栈溢出、但我尝试增加所有任务(包括 IDLE 和 TIMER Svc)的堆栈大小、但似乎没有帮助。

我还尝试在 FreeRTOS 任务名称上启用数据断点、但无法达到要求(我发现很奇怪 — 我通过观察另一个全局变量来验证它是否有效,通过读取该位置的存储器可以看到该断点为 0(不过,我可能在某个地方犯了一个错误))。

更改 UDMA 中断优先级(已硬编码(!) 在 source/drivers/UDMA/UDMA_event.c 中、从 1 到 10 可修复问题(因为计时器中断硬编码为 9)。 这很有趣、因为这意味着 UDMA_eventIsrFxn 可能会被 ClockP_timerTickISR 中断、但反过来不会中断。 显然不是一个很好的解决方案。。。

在我们的代码中、SPI 充当从器件、我们将 48 个 3k 字节的块来回传输@ 50MHz、我们使用回调模式并从 ISR 开始下一次传输(通过调用 MCSPI_TRANSFER)。 我们为收到的每个块发布一个信标。 通过反复这样做,我们能够在几分钟内跳起来。  如果作为主器件运行、我预计会得到相同的结果、因此希望它很容易重现。

此致、

结束

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    这很有趣、因为它意味着 UDMA_eventIsrFxn 可能会被 ClockP_timerTickISR 中断、但反过来不会中断。 显然不是一个很好的解决方案。

    您能否分享一个可以帮助我实现/重现此问题的应用程序?

    此致、

    Vaibhav