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.

[参考译文] TMS320F28P650DK:[E0004]无法使用.define 重新定义现有操作码'EALLOW&#39。 汇编器忽略.define."

Guru**** 2609895 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1581263/tms320f28p650dk-e0004-cannot-redefine-existing-opcode-eallow-with-define-assembler-ignoring-define

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

您好、

我正在 C2000 器件上使用 CLA、遇到一个汇编器警告我不完全理解。

工程设置:

  • 我从 C2000Ware 示例开始cla_ex7_shared_resource_handling

  • 我删除(从编译中排除)原始.cla源文件。

  • 我添加了我自己的 CLA 任务文件,.asm而不是用汇编 () 编写的。

  • 工程会编译、链接和加载到器件、并且 CLA 代码会运行。

  • 但是、我在构建过程中收到以下警告:

    [E0004] Cannot redefine existing opcode 'EALLOW' with .define. Assembler ignoring .define.

我的问题:

  1. 导致此警告的原因是什么?
    (看起来已经定义为操作码EALLOW/指令、在工程中的某个位置或标头中、它也被定义为宏、但我不确定它们来自 CLA 上下文中的哪个位置。)

  2. 正确/建议的修复方法是什么?

  3. 是否有一个建议的模板用于以纯汇编.asm () 而不是使用提供的.cla文件格式编写 CLA 任务、以便避免类似这样的冲突?

更多详细信息:

  • 该警告仅在我.cla为我的文件交换文件后出现.asm。 当我构建未修改的示例(使用提供的源).cla时、我看不到警告。

  • 工具链:[CCS 20.3/C2000Ware 6.0.0.00/ti-CGT-C2000_22.6.2.LTS]

  • 器件:[F28P650DK]

我希望本示例中关于构建 CLA 汇编源代码的“右“方式的任何指导EALLOW,以便汇编器不会抱怨。

以下是压缩的完整项目:
cla_ex7_shared_resource_handling.zip 

谢谢!

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

    尊敬的 Sebastian:

     TMS320F280039C:在 CLA 后台或子内联函数中不允许 EALLOW/EDIS? 

    有关您的帖子中提到的操作码、请参阅上述 CLA 等效代码 (MEALLOW) 论坛帖子。

    此致、

    Ozino

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

    您好 Ozino—感谢指针。 只是要澄清一下:我是 不会 EALLOWEDIS在我的 CLA 代码中使用/(我知道 CLA 等效值为/)MEALLOWMEDIS。 我只想删除这个汇编器警告。
    从我可以看出,警告是触发的,因为 C 器件头(通过拉入).cdecls定义EALLOW/EDIS作为扩展到 CPU 指令的宏,并且汇编器抱怨,因为它EALLOW已经是一个指令助记符。 我不是在 CLA 中调用它们;宏定义本身就是什么原因[E0004] Cannot redefine existing opcode 'EALLOW'…
    如果有一个 TI 推荐的 CLA 模板(纯粹而不是).asm.cla可以避免这些宏冲突、我很乐意也切换到这种模板。 主要目标是保持编译干净、而不会在 CLA 编译中引入仅 CPU 宏。

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

    尊敬的 Sebastian:

    感谢您的澄清。 您能否确认哪个文件正在使用.cdecls

    通常有如下类似的代码片段、用于告诉编译器将哪个版本用于 EALLOW。

    //
    // Define to allow writes to protected registers
    //
    #ifndef EALLOW
    #ifndef __TMS320C28XX_CLA__
    #define EALLOW __eallow()
    #else
    #define EALLOW __meallow()
    #endif // __TMS320C28XX_CLA__
    #endif // EALLOW

    通过包含该代码、可以避免该问题。 我们尝试一下、看看它是否起作用。

    另一个问题是、您是否正在生成 C 编译的汇编代码并尝试在 CLA 上运行? 如果是这样、.cdecls 段将需要按与上述代码类似的方式进行修改。

    有关更多信息、请参阅此文档。  https://downloads.ti.com/docs/esd/SPRUI03/overview-of-the-cdecls-directive-stdz095556.html 

    此致、

    Ozino