工具/软件:
我无法在地图文件中打印静态全局变量。 我正在 CSS IDE 中使用链接器选项“--mapfile_contents=sym_defs",“,但、但它并未添加变量。 我尝试修改链接器 cmd 文件来添加.ebss > RAM 和.bss > RAM 等段、但祝您好运。 请为我建议一些链接器选项、以便在映射文件中添加变量。
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.
工具/软件:
我无法在地图文件中打印静态全局变量。 我正在 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>“
感谢您的测试用例。 它定义了几个从未在该文件中引用的静态变量。 由于它们是静态的、因此另一个文件无法引用这些变量。 这些变量在链接之前会进行优化。 链接器从不会看到它们。
考虑这个小示例。
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 说保留编译器生成的汇编文件。 第三个命令在汇编文件中搜索变量名 未使用 。 因为它被优化掉了、所以它不在那里。
静态变量也会发生同样的情况。
谢谢。此致、
-乔治
假设你写一些类似的东西...
/* not const */ static int static_variable = 100;
和 文件中有读取和写入的代码 static_variable 影响放大器性能。 在这种情况下、编译器不会进行优化 static_variable 离开。 因此、 static_variable 出现在映射文件中。 请确认这是您的体验。
谢谢。此致、
-乔治
回答您的问题我正在编译和打印映射文件时尝试这些选项。
代码文件中声明的原始变量为 “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 、然后在汇编代码中搜索感兴趣变量的名称。 请对静态变量不在映射文件中的每种情况进行该分析。
请注意、这种与静态变量相关的优化发生在编译器处理的早期。 无法禁用它。
谢谢。此致、
-乔治