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.

[参考译文] TMS320F28075:C28x <->CLA:共享结构上的易失性关键字

Guru**** 2796425 points

Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1113099/tms320f28075-c28x---cla-volatile-keyword-on-shared-structures

器件型号:TMS320F28075
主题中讨论的其他器件:C2000WARE

您好!

我一直在使用基于 FCL 代码库的 C28x 和 CLA。  在示例项目中、两个处理器之间共享的数据都不会声明为易失性。  这是故意的吗?  当我查看其他示例(c2000ware_motorcontrol_sdk_3_02_00_00/c2000ware/driverlib/f2807x/examples/cpu1/cla)时、它们也不使用 volatile 关键字。

我想、声明它为易失性应该是必要的、因为底层内容可由任一处理器更改。  但是、我是否缺少 CLA 编译器的实现方式?

谢谢、

-科林

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

    我们仅在发现有必要时才尝试使用易失性、因为使用易失性会对性能产生影响。 根据我的经验、使用 CLA 和 C28x 之间共享的变量似乎没有必要、但我将与我们的编译器团队的某个人联系以获取解释。

    惠特尼

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

    我只是再看一下一些 FCL 代码、我认为答案是、没有一点可以让另一个处理器中函数更改变量。 例如、在 CLA 上计算 pangle、但 C28x 代码在确认 CLA 任务已完成之前不会读取 pangle、因此除了函数调用的第一个外、不需要额外的存储器访问。

    因此、仍有一些场景需要使共享变量变得易变、但我们显然在这些示例中避免了它们

    惠特尼

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

    谢谢 Whitney。

    如果 CLA 优化器  没有看到.CLA 代码中设置的变量、它是否会完全删除变量读取?  或者 是否有保证在任务开始时始终读取它一次的保证?

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

    我将执行我昨天提到的操作、并与编译器团队的某个人联系、为您提供更准确的答案。

    惠特尼

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="54433" URL"~/support/microcontrollers/C2000-microcontrollers-group/C2000/f/C2000-microcontrollers-forum/1113099/tms320f28075-C28x--cla-volatile-keyword-on"共享结构体/4126390#4126390"] CLA 优化器是否  会完全删除变量/引用]

    这很有可能。  考虑以下示例...

    extern int global;
    
    int fxn(int arg1, int arg2)
    {
       /* All of this statement is optimized away */
       int never_used = global;
    
       return arg1 + arg2;
    }

    但是、该示例可能不是实际代码的典型示例。  如果变量读取是导致写入全局变量、传递给函数调用的值或返回的值等的计算的一部分、则不会立即进行优化。   

    有关易失性的更多信息、请参阅 《C28x 优化指南》中有关易失性的这一子章。

    谢谢、此致、

    乔治

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

    谢谢 George。  下面一行是我希望看到的验证。

    " 如果变量读取是导致写入全局变量、传递给函数调用的值或返回的值等的计算的一部分、则不会立即优化。 "