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.
您好!
我将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:
谢谢。 如果您找到有关该主题的一些文档、请告诉我。
此致、
加布里埃尔