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.

[参考译文] TMS320F28377S:CL v18.1.8 中不可重现的十六进制文件

Guru**** 2782625 points

Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1611791/tms320f28377s-non-reproducible-hex-in-cl-v18-1-8

器件型号: TMS320F28377S
主题中讨论的其他器件: SYSBIOS

您好团队:

我一直在尝试让我们工程中的十六进制更具确定性。
然而,尽管项目不使用宏,如__DATE__, __FILE__等,而且大多数前提条件都是相同的,但仍存在一些差异。
当我比较地图文件时,我发现下面是可能的罪魁祸首
-0000c140     305 (0000c140)     _ti_sysbios_knl_Swi_Module_State_0_readyQ__A
+0000c140     305 (0000c140)     _ti_sysbios_knl_Task_Module_State_0_readyQ__A

-0000c180     306 (0000c180)     _ti_sysbios_knl_Task_Module_State_0_readyQ__A
+0000c180     306 (0000c180)     _ti_sysbios_knl_Swi_Module_State_0_readyQ__A

在进一步挖掘时、
~/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_18.1.8.LTS/bin/nm2000 path1/configPkg/package/cfg/app_p28FP.o28FP | grep -i "readyQ"
00000180 B _ti_sysbios_knl_Swi_Module_State_0_readyQ__A
000001c0 B _ti_sysbios_knl_Task_Module_State_0_readyQ__A

~/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_18.1.8.LTS/bin/nm2000 path2/configPkg/package/cfg/app_p28FP.o28FP | grep -i "readyQ"
000001c0 B _ti_sysbios_knl_Swi_Module_State_0_readyQ__A
00000180 B _ti_sysbios_knl_Task_Module_State_0_readyQ__A

但 app_p28fp.c 的唯一区别是
-xdc__META(__ASM__, "@(#)__ASM__ = /path1/configPkg/package/cfg/app_p28FP");
+xdc__META(__ASM__, "@(#)__ASM__ = /path2/configPkg/package/cfg/app_p28FP");

是否有办法使其更具确定性和可重现性?

## 系统信息
* SYS/BIOS - 6.52.0.12
* CCS - 10.4.0.00006.
*编译器 — v18.1.8

在满足所有先决条件的情况下、HEX 是否仍然不能像 这里所提到的那样实现

谢谢。此致、
1 月

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

    您好、Jan、

    我们已将此线程移至编译器团队以进行正确分配。 请留出一些时间让团队审核并提供回复。 感谢您的耐心。

    此致、

    Zackary Fleenor

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

    您是正确的、要关注两者的原因 _ti_sysbios 具有不同的地址。  该地址差异可能会导致构建中其他地方存在其他差异。

    、其中 app_p28fp.c 的唯一区别是
    -xdc__META(__ASM__, "@(#)__ASM__ = /path1/configPkg/package/cfg/app_p28FP");
    +xdc__META(__ASM__, "@(#)__ASM__ = /path2/configPkg/package/cfg/app_p28FP");[/报价]

    这会忽略所包含头文件的差异 app_p28fp.c 。   

    要考虑这些差异、请添加编译器选项  -- gen_preprocessor_listing 、然后构建两种方式。  通过在 C28x 编译器手册中搜索来了解此选项。  除其他效果外、它会创建一个名为的列表文件 APP_p28FP.RL 。  比较这些列表文件。  我不知道你会看到什么。  但它很可能有用。

    谢谢。此致、

    -乔治

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

    您好、

    感谢您的信息。
    我尝试使用常规`.rl`文件、方法是在 C2000 编译器的“Supplemental Information“部分中将其启用。
    但不幸的是、它不会产生结果 APP_p28FP.RL  其他源文件也是如此。
    我看了看 app_p28fp.mak 发现 n ü` -- gen_preprocessor_listing `选项未在其中生成。(是否有不同的方法来执行此操作)

    尽管如此、我还是手动调用了编译器命令  

    /home/jan/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_18.1.8.LTS/bin/cl2000 -c \
      --gen_preprocessor_listing \
      -g --optimize_with_debug -qq -pdsw225 -Dfar= -mo -v28 -DLARGE_MODEL=1 -ml \
      --float_support=fpu32 -eo.o28FP -ea.s28FP \
      -Dxdc_cfg__xheader__='"configPkg/package/cfg/app_p28FP.h"' \
      -Dxdc_target_name__=C28_float \
      -Dxdc_target_types__=ti/targets/std.h \
      -Dxdc_bld__profile_release \
      -Dxdc_bld__vers_1_0_18_1_8 \
      -O2 \
      -I. \
      -I/home/jan/ti/bios_6_52_00_12/packages \
      -I/home/jan/ti/ccs1040/ccs/ccs_base \
      -I/home/jan/ti/xdctools_3_50_08_24_core/packages \
      -I.. \
      -I/home/jan/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_18.1.8.LTS/include \
      -fs=./package/cfg \
      -fr=./package/cfg \
      -fc package/cfg/app_p28FP.c


    两者之间的唯一区别 APP_p28FP.RL 在下面添加。
    < Nxdc__META(__ASM__, "@(#)__ASM__ = /path1/configPkg/package/cfg/app_p28FP");
    < X_Pragma("DATA_SECTION(__ASM__, \"xdc.meta\")") const char (__ASM__)[] = {("@(#)__ASM__ = /path1/configPkg/package/cfg/app_p28FP")};
    ---
    > Nxdc__META(__ASM__, "@(#)__ASM__ = /path2/configPkg/package/cfg/app_p28FP");
    > X_Pragma("DATA_SECTION(__ASM__, \"xdc.meta\")") const char (__ASM__)[] = {("@(#)__ASM__ = /path2/configPkg/package/cfg/app_p28FP")};


    我怀疑这会引起问题。
    所以下一个怀疑是在编译过程中重新排序。

    (仅供参考:我再次检查了手动生成的目标文件中数组的存储器,它们仍然被翻转) 。

    使用生成的 nfo 文件 -- gen_opt_info 完全相同。

    你能建议,如果有其他一些方法来进一步调查这一点吗?

    谢谢。此致、

    1 月

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

    对于文件 app_p28fp.c、请按照 如何提交编译器测试用例一文中的说明进行操作。  但执行两次。 一旦它导致这个结果...

    [quote userid=“681980" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1611791/tms320f28377s-non-reproducible-hex-in-cl-v18-1-8 ~/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_18.1.8.LTS/bin/nm2000 path1/configPkg/package/cfg/app_p28FP.o28FP | grep -i "readyQ"
    00000180 B _ti_sysbios_knl_Swi_Module_State_0_readyQ__A
    000001c0 B _ti_sysbios_knl_Task_Module_State_0_readyQ__A[/报价]

    当它导致这个结果...

    [quote userid=“681980" url="“ url="~“~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1611791/tms320f28377s-non-reproducible-hex-in-cl-v18-1-8 ~/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_18.1.8.LTS/bin/nm2000 path2/configPkg/package/cfg/app_p28FP.o28FP | grep -i "readyQ"
    000001c0 B _ti_sysbios_knl_Swi_Module_State_0_readyQ__A
    00000180 B _ti_sysbios_knl_Task_Module_State_0_readyQ__A[/报价]

    在命令行中工作可能最简单。   

    这将允许我重现问题、然后进行调查。

    谢谢。此致

    -乔治

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

    您好、

    请查找附加的文件。

    两者的编译器命令实际上是相同的。

    /home/jan/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_18.1.8.LTS/bin/cl2000 -c  -g --optimize_with_debug --preproc_with_comment --preproc_with_compile -qq -pdsw225 -Dfar=  -mo -v28 -DLARGE_MODEL=1 -ml --float_support=fpu32 -eo.o28FP -ea.s28FP   -Dxdc_cfg__xheader__='"configPkg/package/cfg/app_p28FP.h"'  -Dxdc_target_name__=C28_float -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_18_1_8 -O2  -I. -I/home/jan/ti/bios_6_52_00_12/packages -I/home/jan/ti/ccs1040/ccs/ccs_base -I/home/jan/ti/xdctools_3_50_08_24_core/packages -I.. -I/home/jan/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_18.1.8.LTS/include -fs=./package/cfg -fr=./package/cfg -fc package/cfg/app_p28FP.c
    /home/jan/ti/xdctools_3_50_08_24_core/bin/mkdep -a package/cfg/app_p28FP.o28FP.dep -p package/cfg -s o28FP package/cfg/app_p28FP.c -C   -g --optimize_with_debug -qq -pdsw225 -Dfar=  -mo -v28 -DLARGE_MODEL=1 -ml --float_support=fpu32 -eo.o28FP -ea.s28FP   -Dxdc_cfg__xheader__='"configPkg/package/cfg/app_p28FP.h"'  -Dxdc_target_name__=C28_float -Dxdc_target_types__=ti/targets/std.h -Dxdc_bld__profile_release -Dxdc_bld__vers_1_0_18_1_8 -O2  -I. -I/home/jan/ti/bios_6_52_00_12/packages -I/home/jan/ti/ccs1040/ccs/ccs_base -I/home/jan/ti/xdctools_3_50_08_24_core/packages -I.. -I/home/jan/ti/ccs1040/ccs/tools/compiler/ti-cgt-c2000_18.1.8.LTS/include -fs=./package/cfg -fr=./package/cfg

    编译器版本 —  C2000_18.1.8.LTS

    app_p28FP_1.pp.txt 对应于以下响应。

    00000180 B _ti_sysbios_knl_Swi_Module_State_0_readyQ__A
    000001c0 B _ti_sysbios_knl_Task_Module_State_0_readyQ__A

    app_p28FP_2.pp.txt 对应于以下响应。

    000001c0 B _ti_sysbios_knl_Swi_Module_State_0_readyQ__A
    00000180 B _ti_sysbios_knl_Task_Module_State_0_readyQ__A

    如果缺少任何信息、请告诉我。

    谢谢。此致、

    1 月

    e2e.ti.com/.../app_5F00_p28FP_5F00_1.c

    e2e.ti.com/.../app_5F00_p28FP_5F00_1.pp.txt

    e2e.ti.com/.../app_5F00_p28FP_5F00_1.o28FP.txt

    e2e.ti.com/.../app_5F00_p28FP_5F00_2.c

    e2e.ti.com/.../app_5F00_p28FP_5F00_2.pp.txt

    e2e.ti.com/.../app_5F00_p28FP_5F00_2.o28FP.txt

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

    我可以部分地解释差异。  我无法找到解决方法。

    感谢您提交所有文件。  我重新命名了 pp.txt 发送到的文件 f1 F2.c 。  我像您一样构建它们、但我添加了选项 -- keep_asm 编译器生成的汇编文件会保留下来。  此命令总结了差异。

    % findstr Module_State_0_readyQ__A *.asm | findstr ebss
    f1.asm:_ti_sysbios_knl_Swi_Module_State_0_readyQ__A:    .usect  ".ebss",64,1,1
    f1.asm:_ti_sysbios_knl_Task_Module_State_0_readyQ__A:   .usect  ".ebss",64,1,1
    f2.asm:_ti_sysbios_knl_Task_Module_State_0_readyQ__A:   .usect  ".ebss",64,1,1
    f2.asm:_ti_sysbios_knl_Swi_Module_State_0_readyQ__A:    .usect  ".ebss",64,1,1

    这表明编译器会以不同顺序发出定义这些变量的行。  我不知道为什么。  我无法找到解决方法。

    编译器的最新版本为 25.11.0.LTS。  它不会有这种行为。  我怀疑您升级到该版本是实用的。  旧版本的 SYS/BIOS 生成的代码可能会出现问题。  话虽如此、欢迎大家试试。

    我可以向编译器提出问题。  但这对您没有帮助。  不再支持版本 18.1.x.LTS。    

    谢谢。此致、

    -乔治

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

    您好、

    这是非常不幸的。

    请您确认编译器版本 20.2.7 是否显示出 25.11.0 的一致行为。

    感谢您的支持!

    此致、

    1 月

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    确认编译器版本 20.2.7 是否显示为 25.11.0 的一致行为。

    确实如此!  因此、使用该版本是您的另一种可能性。

    我想到了一种权变措施、用于性能不佳的编译器版本(如 18.1.8.LTS)。  我只能从概念上告诉你该怎么做。  我缺乏具体的 SYS/BIOS 专业知识。

    下面是编译器发出的在中创建变量的行的示例 .ebss 章节...

    _ti_sysbios_knl_Swi_Module_State_0_readyQ__A:    .usect  ".ebss",64,1,1

    它会发出所有这些信号 .ebss 按大小顺序排列的行、从最小到最大。  当多个对象大小相同时、它仍应以一致的顺序发出它们。  不良行为是、在某些情况下、此顺序可能会发生变化。  因此、强制问题变量为不同的大小。  在这种情况下、请更改 SYS/BIOS 设置、以便...

    _ti_sysbios_knl_Swi_Module_State_0_readyQ__A:   .usect  ".ebss",64,1,1
    _ti_sysbios_knl_Task_Module_State_0_readyQ__A:  .usect  ".ebss",64,1,1

    ...有一个不同的大小。  让其中一个更大。  很抱歉我不知道要更改哪个 SYS/BIOS 设置。  我怀疑这对你来说是显而易见的。

    谢谢。此致、

    -乔治

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

    您好、

    这确实是一个很好的解决方法,它有效!

    谢谢。此致、

    1 月