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.

[参考译文] 编译器/TMS570LC4357:编译器开关 HET_V2在来自 HALCOGEN 和 hetp.exe 的自动生成文件中设置不同

Guru**** 2475160 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/683149/compiler-tms570lc4357-compiler-switch-het_v2-set-different-in-autogenerated-files-from-halcogen-and-hetp-exe

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

工具/软件:TI C/C++编译器

你(们)好

 

HalcogGen 04.07.00创建:

hL_het.c、包括 std_nhet.h、未事先设置 HET_V2

结果:std_nhet.h 中的默认设置 HET_V2 = 0

 

 

HETASM / hetp.exe 创建

xxx.c、包含 std_nhet.h、未预先设置 HET_V2、也未包含 xxx.h

xxx.h、其中包含 std_nhet.h并预先设置 HET_V2

结果:如果 std_nhet.h 之前包含 xxx.h、则预期设置 HET_V2 = 1

 

 

包括 xxx.h 和 std_nhet.h 在内的文件将在 HET_V2 = 1 (正确)的情况下进行编译、

但是、在 std_nhet.h 之前包含 std_nhet.h 但不包含 xxx.h 的文件将在 HET_V2 = 0时进行编译(错误)。

 

lint 检测:

警告547:重新定义符号'HET_v2'与....冲突

错误18:重新声明符号"br_format::branch_condition"(精度)

错误114:标签"br_format"的结构声明不一致

错误38:符号"br_format::10006"的偏移不一致

 

如果禁用了 MISRA C2 2004中的所有内置检查、TI 编译器 ti-cgt-arm_16.9.3.LTS 仅检测到问题!!!!!

我们无法轻松地更改编译器,因为它是由外部公司验证的。 (限制不要使用内置 MISRA 校验器)

#48不兼容的宏"HET_v2"重新定义(在"D:/yyy/TICore/include/std_nhet.h "的第57行声明)  xxx.h               /yyy/TICore/include      第4行    C/C++问题

 

我当前的脏污权变措施是:

手动显式在 xxx.c 中包含 xxx.h (两者均由 hetp.exe 自动生成)

手动显式更改 hl_het.c 中包含文件的顺序(从 HalcogGen 自动生成)

 

您能否确认行为、或者我是否错过了 HalcogGen 中的相关设置?

提前感谢

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

    您好!

    std_nhet.h 定义了 NHET 指令。 该头文件不包含在通过 HALCoGen 生成的任何其他文件中。 可能我错过了一些设置。

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


    您好 QJ Wang
    我同意没有人包含 std_NHET.h、而在 HalcogGen 中禁用 HET 高级配置模式。 (在另一个项目中签入)
    如果两个 HET 都在高级配置模式下使用、我们有5个自动生成的文件、包括 std_NHET.h   

    搜索"\#include。*\"std_NHET.h\"(5个文件中有5个点击)
     D:\MyProject\TIICore\include\autogenHET0.h (1 HIT)   // HET_V2 = 1 -自动生成但从 c:\ti\Hercules \bin\hetp.exe -v2 -hc32 -x -n0 autogenHET0.het 手动复制
       第7行:#include "std_NHET.h"
     D:\MyProject\TIICore\include\autogenHET1.h (1 HIT)   // HET_V2 = 1 -自动生成但从 c:\ti\Hercules \bin\hetp.exe -v2 -hc32 -x -n1 autogenHET1.het 手动复制
       第7行:#include "std_NHET.h"
     D:\MyProject\TICOore\source\HL_het.c (1 HIT)         // HET_V2 = 0 -通过 HALCOGEN 04.07.00自动生成、同时启用 HET 高级配置模式并选择文件
       第48行:#include "std_NHET.h"
     D:\MyProject\TICORE\SOURCE\autogenHET0.c (1次点击)    // HET_V2 = 0 -自动生成,但从 c:\ti\hercules\bin\hetp.exe -v2 -hc32 -x -n0 autogenHET0.het 手动复制
       第4行:#include "std_NHET.h"  
     D:\MyProject\TICORE\SOURCE\autogenHET1.c (1次点击)    // HET_V2 = 0 -自动生成但从 c:\ti\hercules\bin\hetp.exe -v2 -hc32 -x -n1 autogenHET1.het 手动复制
       第4行:#include "std_NHET.h"  
       

    有3个独立问题:
    a.) hetp.exe 创建 autogenHET0.h autogenHET1.h autogenHET0.c autogenHET1.c,但不在相应的*.c 文件中包含*.h    
    b.) Halcogen 创建 hL_het.c、但在 std_nhet.h 之后而不是之前包含 hetp 头文件。
    c.)如果启用了内置 MISRA 检查、编译器/链接器工具链不会检测冲突的编译器开关

    如果选择了器件 TMS570LC4357ZWT (而不是更改包含文件的顺序)、b)的替代解决方案可以是在 std_nhet.h 中设置默认 HET_V2 1。

    此致
    OLAF

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

    PS:

    HET_v2似乎是自2013年以来的已知问题:
    e2e.ti.com/support/microcontrollers/hercules/f/312/t/284661
    变通方法:在 "Properties"-"CCS Build"-"ARM Compiler"-"Predefined symbols"中定义 HET_v2=1

    这个解决方法部分解决了问题。
    但编译器应该会抱怨其他问题


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

    您好 Olaf、

    感谢您提供的有用信息。

    我刚刚进行了测试。 我使用 HET IDE 来生成一个 Test.c 和 Test.h Test.h 包含"std_NHET.h"、并在其前面定义了"HET_v2=1 ":