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.

[参考译文] TMS320F280025:将 F2802x 迁移到 F280025时的 RPT |MOV 指令问题

Guru**** 2556940 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1134199/tms320f280025-rpt-mov-instruction-issue-when-migrate-f2802x-to-f280025

器件型号:TMS320F280025

您好、专家、

我的客户将下面的代码从 F2802x COFF 迁移到 F280025 eabi、将会出现错误、而且似乎 |MOV 指令已注释掉。

[E0800]     结构/联合 体定义中不允许使用指令

在 F2802x 中、使用相同的代码没有这个问题、对此有任何建议吗?  

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

    你好、很强、

    对迟交的反应表示真诚的道歉。 我刚刚调任 C28x 专家。 请在周一之前回复。

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

    强、

    这是手动编写的汇编代码还是编译器生成的代码? 您能否提供有关编译器将错误抛出到哪一行或哪一行的更具体的详细信息?

    我的理解是|MOV 实际上并不是"注释掉"的、即使它显示为绿色。

    谢谢、

    Sira

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

    很好、 我咨询了编译器团队的一些专家、他们请求了一个可重现的测试案例。 为此、您可以在图片中所示的仅预处理模式下构建项目。

    此外、如果您使用 EABI 进行编译、则汇编代码不应包含带有前导下划线的符号、例如_vac_offset_NEG。 您是否查阅过 C28x EABI 迁移指南?

    https://software-dl.ti.com/ccs/esd/documents/C2000_c28x_migration_from_coff_to_eabi.html

    谢谢、

    Sira

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

    您好, Sira,

    感谢你的帮助。

    该错误似乎与 |MOV 无关。

    [E0800]     结构体/联合 体定义中不允许使用指令

    通过删除代码、最后检查错误是否由以下代码引起、

    .cdecls C、 list、 "F28x_project.h"

    如果在上面注释掉代码、 则没有错误、f28x_project.h 的路径是正确的。

    对此有任何建议吗?

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

    您好, Sira,

    我们找到根本原因、在客户.h 文件中、它们按如下方式定义了错误、然后将出现错误。

    #define 错误0x11

    删除此定义、将不会出现此错误。

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

    强、

    我要求将此问题重新分配给合适的专家。

    谢谢、

    Sira

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

    cdecls 指令不支持与#define 名称相同的标识符以及结构、联合或枚举中字段的名称。  即使可以在 C 语言中执行该操作、情况也是如此。 在这种情况下、这种情况的发生方式并不明显。

    cdecls 指令引用头文件...

        .cdecls C, LIST, "f28x_project.h"

    头文件 f28x_project.h 包含以下行...

    #include "f28002x_device.h"         // f28002x Headerfile Include File
    #include "f28002x_examples.h"       // f28002x Examples Include File
    #define ERROR 0x11

    在 C 语言中、错误的定义对前几行中包含的头文件没有影响。  但是、当由.cdecls 处理时、它确实是这样。  请在 C28x 汇编工具手册中搜索 标题为 概述.cdecls 指令的子章节。  最后是短语...

    转换后的汇编代码与原始 C/C++源代码的显示顺序不同

    构建包含.cdecls 的汇编文件时、请使用选项-asm_listing。  这将创建与源文件同名的列表文件、扩展名更改为.lst。  检查列表文件。  这自动生成的行...

     A   286                         .define "0x11",ERROR 

    (笑声) 显示在文件的早期、与头文件中的结构定义相对应的行之前。   

    F28x_project.h 通过其他头文件包含的头文件之一是  f28002x_nmiintrupt.h  该头文件包含以下行...

    struct ERRORSTS_BITS {                  // bits description
        Uint16 ERROR:1;                     // 0 Error flag.
        Uint16 PINSTS:1;                    // 1 Error pin status.
        Uint16 rsvd1:14;                    // 15:2 Reserved
    };
    
    union ERRORSTS_REG {
        Uint16  all;
        struct  ERRORSTS_BITS  bit;
    };
    
    struct ERRORSTSCLR_BITS {               // bits description
        Uint16 ERROR:1;                     // 0 ERRORFLG.ERROR clear bit
        Uint16 rsvd1:15;                    // 15:1 Reserved
    };
    
    union ERRORSTSCLR_REG {
        Uint16  all;
        struct  ERRORSTSCLR_BITS  bit;
    };
    
    struct ERRORSTSFRC_BITS {               // bits description
        Uint16 ERROR:1;                     // 0 ERRORSTS.ERROR pin force.
        Uint16 rsvd1:15;                    // 15:1 Reserved
    };

    请注意错误如何显示为其中三个结构类型中的字段名称。  但因为...

    #define ERROR 0x11

    (笑声) 以及.cdecls 的工作方式、所有这些错误实例都被0x11取代。  这会形成无效的汇编代码。  因此,汇编器会发出错误诊断...

    结构体/联合体定义中不允许使用指令

    谢谢、此致、

    乔治

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

    乔治

    非常感谢您的澄清。 这很清楚。