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.

[参考译文] CODECOMPOSER:CCS10.2.0 (20.2.2LTS)无法再编译 HALCoGen 04.07.01生成的源

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

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/993701/codecomposer-ccs10-2-0-20-2-2lts-cannot-compile-halcogen-04-07-01-generated-sources-anymore

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

我在这里被重定向、因为我的问题在处理器论坛中无法得到解答(原始问题 CCStudio 的链接:CCS10.2.0 (20.2.2LTS)无法编译 HALCoGen 04.07.01生成的源代码-处理器论坛-处理器- TI E2E 支持论坛)

基本上、问题是对于 CCS 10.1.1 (ti-cgt-arm_20.2.1.LTS)、HALCoGen 生成的源代码会使用超严格的设置进行编译(与此相关的是 -strict_ansi、-diag_error=2142和-diag_warnes_as 错误)、并且由于 CCS 10.2.0 (ti-cgt-arm_20.2.LTS 不再编译某些文件)。

您可以使用  我原始问题中发布的示例 QJ Wang、并按如下方式进行编译:

为了获得错误、编译器现在为  ti-cgt-arm_20.2.LTS 和 ti-cgt-arm_20.2.4.LTS 生成、只需运行(#2142-D:有符号和无符号操作数之间的比较):

C:\ti\ccs1030\ccs\tools\compiler\ti-cgt-arm_20.2.4.sps\bin\armcl.exe --silicon_version=7R5 --code_state=32 --float_support=vfpv3D16 -g --diag_emit=off --display_error_type=hl-code_null-ccs_ex=102g=-cn_ex-ccs_examples\cominfl_ex-combe.com_warnes\comning_deces\comines\comines\comines=1.1023\cmag_ines\cmag_ines\cmag_ines\cmos\comines\comines\comines\comines=1.1023\cmos_ex-ines\comines\comines\comines\comines\comines\comines\comp.pr-ines\comines\comines\comines\comines\comines\c

我们怀疑枚举处理必须已更改、并且在上次更新中引入了回归。

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

    我将与 QJ Wang 一起处理这个问题。  现在,说对它可能采取的行动还为时过早。   

    谢谢、此致、

    乔治

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

    这似乎是编译器的问题。  我提交了 EXT_EP-10334条目  以进行调查。  欢迎您访问该链接。

    谢谢、此致、

    乔治

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

    是的、更改是 EXT_EP-9853的修复、行为更改是故意的;早期的行为是错误。

    首先、请注意、在 C 语言中、这些枚举常量初始化程序上的"u"后缀不会影响枚举常量的类型或枚举的底层类型。  

    为了使一个很长的故事变得简短、20.2.1.LTS 为枚举类型选择了"纯字符"、20.2.LTS 和更高版本将按照预期选择"签名字符"。  请注意、枚举类型的选择取决于严格的 ANSI 模式、文件是 C 还是 C++、--enum_type 命令行选项的值以及枚举常量的值范围。

    如果希望枚举为"unsigned char"、请添加一个值为 UCHAR_MAX 的虚拟枚举常量:

    #include
    enum e{a=1、b=2、c=3、dummy=UCHAR_MAX};
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您提供详细信息。

    我们的问题如下:我们将使用 HALCoGen 即时生成 HAL、作为构建过程的第一步、并且不会更改输出源。 然后编译开始。

    因此,我们的问题是:Shoulnd’t HALCoGen 为使用--strict_ansi、--diag_error=2142和--emit_warnings_as 错误的设置创建有效源,即 HALCoGen 是否应该创建无警告代码?

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

    理想情况下是的、但生成的代码运行时出现了编译器错误、而编译器错误不是它准备处理的(EXT_EP-9853)。  生成的代码假定旧行为正确、创建了依赖于该行为的代码以在没有警告的情况下进行编译、并将该警告的严重性级别拖至错误。  回想一下、这是错误的做法;我们应该已经注意到枚举类型的问题并在编译器中修复它、并让 HALCoGen 生成预期目标枚举类型的枚举。  在这种情况下、警告是虚假的;即使存在警告、代码也能正常运行、因此将该警告拖至错误级别是毫无意义的、至少对于该特定代码行而言是如此。  针对此问题的精确修复方法是修改 HALCoGen 以发出代码、该代码可与20.2.LTS 和更高版本(如果可能、还可与20.2.1.LTS 一起正常工作)、但我不认为很快就会更新 HALCoGen。  那么、解决方法是什么?  使用--emit_warning_as _errors 可以很方便地确保您不会忽略潜在的问题,但在这种情况下,潜在的问题不是实际的问题,因此应该放宽。  删除--emit_warnings_as 错误和--diag_error=2142。  如果你不想这么做、恐怕唯一的补救办法就是修改源代码、最小的改动就是添加虚拟变量、如上所述。

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

    感谢考古学家

    我们没有更新 HALCoGen 的计划。 但我可以在版本说明中添加权变措施。

    在哪里放置上一帖子中提到的变通办法?

    我添加了枚举 e{..} sys_dma.c、但我遇到了相同的编译错误。 我不知道我错过了什么。

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

    您是否已验证接收诊断的源代码行是否使用以黄色突出显示的枚举类型?  我怀疑他们使用不同的枚举类型。

    谢谢、此致、

    乔治

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

    尊敬的 乔治:

    我根据 考古学家建议的变通办法向 dmaMPURegion 添加了一个虚拟常量、错误消失了。

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

    感谢您的详细回答。 对于  这两个文件、我认为我们删除了--emit_warnings_as 错误和--diag_error=2142。

    再次感谢您关注这一问题!