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.

[参考译文] AM2434:AM2434:在 64 位原子写入共享 MSRAM 期间、ldrexd 上数据中止

Guru**** 2847390 points

Other Parts Discussed in Thread: AM2434

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1631107/am2434-am2434-data-abort-on-ldrexd-during-64-bit-atomic-write-to-shared-msram

器件型号: AM2434

您好、

我正在使用 AM2434 (FreeRTOS) 开发多核应用、遇到有关原子存储器访问的硬件异常。

架构:

  • CORE-1(服务器): 将 64 位变量写入共享的 MSRAM 区域。

  • 其他内核(客户端): 不断轮询/读取这个完全相同的 64 位存储器地址。

内存配置: 共享 MSRAM 区域在 MPU 中配置为具有以下属性:

存储器类型: 正常

高速缓存策略: 不可缓存、不可缓冲 (,) TEX=001C=0B=0

可共享性: 可共享 () S=1

权限: 主管 RW、用户 RW、执行从不

问题: 为了防止内核之间的读取中断、我使用标准ATOMIC_STORE宏进行 64 位写入。 编译器正确生成 ldrexd了 ANDstrexd 指令。

但是、在 Code Composer Studio 中逐步执行反汇编时、CPU 在尝试在ldrexd该共享存储器指针上执行命令的确切时刻抛出数据中止异常。

我的问题:

AM2434 互连/AXI 总线是否支持共享 MSRAM 区域的全局专用监视器以允许ldrexd/strexd指令?

如果此处不支持专用监视器、那么用于锁定共享内存或在内核之间安全传递 64 位变量而不拆分读取的 TI 推荐解决方案是什么?  

谢谢、  

此致、

Eli

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

    尊敬的 Eli:

    请留出一些时间在内部检查 AM2434 互连/AXI 总线是否支持 MSRAM 的全局专用监视器。

    此致、

    会面。

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

    尊敬的 Eli:

    我在我的最后测试了这个,我能够在我的最后复制这个 因此、 AM2434 InterConnect /AXI 总线似乎不支持全局专用监视器、因此只有 Cortex-R5 内核的本地专用监视器可用于 am243。

    由于 R5 内核上存在本地监视器、这些 ldrexd 和 strexd 指令将对 R5 内部存储器(如 TCM 和高速缓存)有效、但对 MSRAM 无效。

    您也可以使用 Spinlock 模块来执行此操作: https://software-dl.ti.com/mcu-plus-sdk/esd/AM243X/11_02_00_24/exports/docs/api_guide_am243x/DRIVERS_SPINLOCK_PAGE.html

    此致、

    会面。

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

    谢谢、
    此致、

    Eli