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.

[参考译文] RTOS/TMS320C6678:如何立即更新 MSMCSRAM 数据?

Guru**** 2563550 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/593776/rtos-tms320c6678-how-to-update-msmcsram-data-immediately

器件型号:TMS320C6678

工具/软件:TI-RTOS

您好!

两个内核通过 MSMCSRAM 共享状态和命令。 应用程序软件 会加载每个本地 L2SRAM。

Core1通过 L2SRAM 处理本地缓冲区上的命令、然后通过 MSMCSRAM 将状态和结果写入共享缓冲区。 然后 core2检查共享缓冲区的前2个字节、然后将所有数据复制到其本地缓冲区。

问题是、当 core2检查时、头2个字节更新非常缓慢、因此 core2会丢失许多命令。

有时、当 core2检查第一个字节时、第一个字节会更新、但第二个字节不会更新。 当前2个字节被更新时、我没有检查所有数据是否被很好地更新。

共享缓冲区通过 #pragma DATA_ALIGN (GlobalDataBuf、128)与128对齐;

缓存也会在 core1 由 cache_invL2 (((void *)&GlobalDataBuf、sizeof (GlobalDataBuf)、cache_wait)写入之前失效;

我需要知道如何将数据直接写入 MSMCSRAM。

我是否可以选择一些通过缓存的数据进程和一些直接 MSMCSRAM 的数据进程?

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

    我已将此内容转发给软件专家。 他们的反馈应发布在此处。

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

    如果数据到达、则使用 core2读取共享存储器时、需要在内核2上执行缓存无效操作。

    MAR12至 MAR15对应于 MSMC 存储器。 这些是只读寄存器、PC 始终读为1。 这使得 MSMC 存储器在通过其主地址范围访问时始终可在 L1D 中高速缓存。 如果要将 MSMC 拆分为多个区域、则需要缓存和取消缓存。 然后、您需要使用 MPAX 将 MSMC 映射到其他地址、然后将其设置为未缓存。 请参阅 e2e.ti.com/.../164833

    此致、Eric
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的共享缓冲区对齐和来自 core2策略的缓存无效似乎是正确的。 您能否确认内核在每次写入后执行 CacheWbInv、在每次读取状态和命令存储器之前执行 Inv。 您能否提供有关如何设置 MSMC 的高速缓存的详细信息? 我的意思是提供有关如何设置该区域的 MAR 寄存器以及如何在 MPAX 寄存器中对 MSMC 进行分区的详细信息?

    此外、如何确保 Core1在 Core2访问标志和状态之前完成写入。 您是否有一个在写入完成后发布的信标、以便另一个内核能够知道写入已完成。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在我的代码上发现了一个错误并修复了它。

    数据似乎更新良好、但仍然每1000次丢失1或2次命令。

    我可以在内核之间使用信标吗?

    实际上、core1在处理结束时发布信标、但 core2未发布 semaphore_pend 状态。 信标类型 wa Binary (FIFO)。

    我以同样的方式布置信标、这在同一个内核上的任务之间运行良好。

    您能告诉我如何将信标正确发布到不同的内核吗?