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.

[参考译文] TMS320F28035:全局静态变量未出现在映射文件中。

Guru**** 2520130 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1554285/tms320f28035-global-static-variable-not-coming-in-the-map-file

器件型号:TMS320F28035


工具/软件:

我无法在地图文件中打印静态全局变量。 我正在 CSS IDE 中使用链接器选项“--mapfile_contents=sym_defs",“,但、但它并未添加变量。 我尝试修改链接器 cmd 文件来添加.ebss > RAM 和.bss > RAM 等段、但祝您好运。 请为我建议一些链接器选项、以便在映射文件中添加变量。

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

    对于定义了一个未出现在映射文件中的静态变量的源文件、 请遵循 如何提交编译器测试用例一文中的说明。   

    此外、请重新编译整个工程。 从构建日志中、捕获链接器命令的文本和所有系统响应。  不要使用屏幕截图。  忽略“Problems"视“视图。  将该文本粘贴到下一个帖子中。

    谢谢。此致、

    -乔治

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

    构建目标:“AmcFirmware.out"</s>“
    调用:C2000 链接器
    “c:/ti/ccs920/ccs/tools/compiler/ti-cgt-c2000_18.12.3.LTS/bin/cl2000 -v28 -mt -mt -O0 --opt_for_speed=5 --fp_mode=relaxed -fp_reassoc=off --define=BUILDCONFIG_disable_watchdog=1 ---define=ILDONF_enable_debug_outs=0 -g-c99 -diag_reassic=off /Sources/AmcMain.obj -/Sources/System/Watchdog.obj /Sources/System/Utilities.obj /Target/Amc_F28035_lnk.cmd /Target/DSP2803x_Headers_nonBIOS.cmd

    已完成构建目标:“AmcFirmware.out"</s>“

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

    e2e.ti.com/.../CyclicChecks.pp.txt

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

    感谢您的测试用例。  它定义了几个从未在该文件中引用的静态变量。  由于它们是静态的、因此另一个文件无法引用这些变量。  这些变量在链接之前会进行优化。  链接器从不会看到它们。   

    考虑这个小示例。

    C:\examples>type example.c
    const static int not_used = 10;
    
    C:\examples>cl2000 --keep_asm example.c
    "example.c", line 1: warning: variable "not_used" was declared but never referenced
    
    C:\examples>findstr not_used example.asm
    <no system response>

    第一个命令显示源文件。  第二个命令用于构建它。  选项 -- keep_asm 说保留编译器生成的汇编文件。  第三个命令在汇编文件中搜索变量名 未使用 。  因为它被优化掉了、所以它不在那里。

    静态变量也会发生同样的情况。

    谢谢。此致、

    -乔治

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

    您好 George、我已从预处理文件中删除了大部分函数调用。 文件中引用了这些静态变量。 我只是想问一下、如何使这些静态变量出现在映射文件中。  

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

    因为静态变量是 const 符合以下条件:

    const static int static_variable = 100;

    ...编译器优化它们。  作为仅编译实验、选择这些变量之一、删除 const 、并添加以非平凡方式更新变量的代码。  它是否显示映射文件?

    谢谢。此致、

    -乔治

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

    嗨、使用 const 关键字声明的变量没有问题。 仅当变量声明为静态时才会出现问题。 我尝试通过保持常量来移除静态。 会在映射文件中显示。 如果我放回 static 关键字、将再次删除映射文件。

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

    假设你写一些类似的东西...

    /* not const */ static int static_variable = 100;

    文件中有读取和写入的代码 static_variable 影响放大器性能。  在这种情况下、编译器不会进行优化  static_variable  离开。  因此、 static_variable 出现在映射文件中。  请确认这是您的体验。

    谢谢。此致、

    -乔治

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

    您好、George、我们可以通过电话连接一次吗? 请告诉我与您联系的可能方式。

    我对团队、Google Meeting、Zoom 都很满意。  

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

    回答您的问题我正在编译和打印映射文件时尝试这些选项。

    代码文件中声明的原始变量为 “static const fixed16_t cycle_checks_current_threshold = 262144L;

    选项 1

    我从变量中删除了 static 关键字并进行了编译。 它在映射文件中显示了该变量。

    const fixed16_t Cycline_checks_current_threshold = 262144L;

    选项 2

    我从变量中删除了 static 和 const 关键字并进行了编译。 它在映射文件中显示了该变量。

    fixed16_t Cycle_checks_current_threshold = 262144L;

    选项 3

    我将 static 关键字放回到变量中并进行编译。 它不显示在映射文件中。

    静态固定值 16_t Cycline_checks_current_threshold = 262144L;

     

    我在编译过程中使用以下编译器选项。 如果需要从编译器选项中删除任何内容、并且需要添加不会优化映射文件中的全局静态变量的编译器选项、请提出建议。

    生成文件:“.."/Sources/BuiltInTest/CyclicChecks.c“/Sources/BuiltInTest/CyclicChecks.c
    调用:C2000 编译器
    “c:/ti/ccs920/ccs/tools/compiler/ti-cgt-c2000_18.12.3.LTS/bin/cl2000 -v28 -mt -mt -O0 --opt_for_speed=5 --fp_mode=relaxed -fp_reassoc=off --include_path=“C:/Users/H307052/4GD_CPCS/4GD_CPCS_NC/Code ---define=BUILDCONFIG_disable_watchdog=1 --define=BUILDCONF_enable_debug /Sources/BuiltInTest/CyclicChecks.c
    完工建筑:“.."/Sources/BuiltInTest/CyclicChecks.c“/Sources/BuiltInTest/CyclicChecks.c

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

    我强烈怀疑、对于每种情况、静态变量不出现在映射文件中的原因是它被优化掉了。  这是一种验证我的猜测的方法。  回到我在这个主题的第二个帖子。  请注意我如何使用编译器选项 -- keep_asm 、然后在汇编代码中搜索感兴趣变量的名称。  请对静态变量不在映射文件中的每种情况进行该分析。   

    请注意、这种与静态变量相关的优化发生在编译器处理的早期。  无法禁用它。

    谢谢。此致、

    -乔治