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.

[参考译文] C11原子运行权衡

Guru**** 2201270 points
Other Parts Discussed in Thread: ARM-CGT
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1277320/c11-atomic-operation-tradeoff

主题中讨论的其他器件:ARM-CGT

您好!

我将2.1.3.LTS ARM TI 编译器与 TI RM46搭配使用、使用 CCS 12.4。

我想构建一个需要支持多个线程的性能敏感型数据结构(FreeRTOS)。
据我了解,我有两个选项来保证原子性:

1.类似于 TI Hercules FreeRTOS 端口、它会禁用 ISR 以创建"关键部分"  

2.使用 C11标题`#包含 `μ A (RM46内核似乎受支持:Cortex-R4F)

为了更好地了解这些选择之间的权衡、我想更好地了解 C11原子操作在 ARM TI 编译器中的工作方式:
 原子变量锁定是否免费?
与禁用 ISR 相比,原子操作的成本是多少?

此致、
加布里埃尔

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

    尊敬的  Gabriel:

    我将把您的问题转发给 TI 编译器 e2e 论坛。 C11原子操作受 TI ARM-CGT 编译器和 TI ARM-Clang 编译器支持。 我不知道原子操作是如何在编译器内部工作的。

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

    您好、QJ:

    一如既往、感谢您的回答。
    也许我有点困惑、但我认为这是 TI 编译器的 e2e 论坛(Code Composer Studio > Code Composer Studio 论坛)。

    如果不是这样、从哪里可以找到它? 它不会出现在 https://e2e.ti.com/ 目录中。

    此致!
    加布里埃尔

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

    尊敬的  Gabriel:

    正如 ARM Cortex-R TRM 说的 L1存储器(RM46上的 TCM)有一个内部专用的监视器。 它是一个两状态(开放和专用)状态机、用于管理加载/存储独占访问。

    当执行一个下载专用访问(LDREX)时、内部监控器专用监控器移动到专用状态。  当存储独占访问时、它将返回到打开状态。

    内部专用监控器仅保持 Cortex-R4处理器的排他性状态。 当状态为"打开"时执行的任何存储专有访问都将失败。 如果状态是独占的、则访问将传递给非共享存储器、但如果是共享存储器、则必须使用 L2存储器接口执行独占访问。 共享存储专有访问是否通过取决于外部专有监控器的状态、该监控器可以跟踪系统中其他处理器的访问。

    由于 RM46x 只有一个处理器和一个 L1内存、我不是很清楚此器件上的 LDREX 和 STREX 指令。 让我来看看 LDREX 和 STREX 如何与 RM46上的不同 MPU 设置一起工作  

    编译器专家告诉我、原子操作没有在多线程程序中进行测试。   

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

    尊敬的  Gabriel:

    我需要更多的时间进行测试、并将在本星期五(10月13日)之前让您了解我的测试结果。

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

    谢谢 QJ。
    我期待您的最新动态。

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

    谢谢、我会  

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

    尊敬的 Gabriel:

    试图以原子操作将数据存储到 MCU TCM 中,调用内部函数_atomic_store(),并使用 LDREXD 和 STREXD 指令来访问存储器位置(在 MPU 设置中是共享还是非共享)。

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

    大家好,QJ!  

    感谢您的回答。 如果我们可以 LDREX  STREX 使用、那么我们应该最好使用原子。
    是否知道 这些指令是如何与中断和 DMA 交互的?
    我似乎找不到任何 有关此主题的资源。

    此致、

    加布里埃尔

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

    尊敬的 Gabriel:

    我不知道如何 LDREX 和  STREX interacts with INT and DMA.

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

    您好、QJ:  

    谢谢。 如果您找到有关该主题的一些文档、请告诉我。

    此致、
    加布里埃尔