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.
器件型号:LAUNCHXL-F28377S
工具/软件:TI C/C++编译器
具体而言、我不使用 stdout printf 函数。 (实际上、stdout 根本不包括在内)。 然而、我注意到在映射文件中 、_printfi.obj 显示在/ccsv7/tools/compiler/ti-cgt-C2000-16.9.1.sps/lib/rts2800_fpu32.lib 下。 它占用3094字节、这并不是总使用数的一小部分。
但是、我不确定如何跟踪可能导致这种情况的原因。
谢谢! 尽管编译器标志从未出现、但 CCS 中的语言选项(在 C2000编译器下)确实具有" printf 支持级别"。 遗憾的是、无法选择空白选项。 最小选项确实会显著减少浪费的空间。 但是、当我不调用任何函数时、我很好奇为什么 RTS 库会自动包含这么多内容。
[报价用户="Adam Jones"]但我不确定如何跟踪导致这种情况的原因。
printfi.obj 中的函数由 printf 系列的所有成员使用。 我建议您搜索链接器映射文件以查看它是哪一个。 在 CCS 工程中、映射文件位于名为 Debug 或 Release (或任何当前编译配置)的文件夹中、称为 project.map。 知道函数的名称后、请搜索所有源代码以找到该函数。 头文件也是如此。
虽然我很确定这项建议是否可行、但不能保证。 如果它不能解决问题、请告诉我们您发现了什么。 我相信我们会跟踪它。
谢谢、此致、
乔治
谢谢 你、George、再次与我联系。
我已使用我包含的所有标题(甚至是在同一文件夹中关联的标题)完成了全文搜索。 有两个 IQmath 头文件引用了 printf -我现在已将其删除。 现在、在 ccsv7/tools/compiler/ti-cgt-C2000-16.9.1.sps/include 中有大量 printf 引用。 但是、我没有在我自己的代码中包含这些头文件中的任何一个。 我也不调用 printf 或它的任何相关函数。
我应该补充的是、我正在使用一个类似 printf 的实现、该实现是从 GitHub (xformatc、适用于感兴趣的人)获得的、然后我将其打包到名为 printf 的函数中(只是为了熟悉)。 但是、我不会在任何地方调用 stdio。
我一直在使用映射文件执行许多操作、因此我知道如何导航它 (我希望我在本周早些时候能想到、当我跟踪一个错误时、CLA 无法从我在 pragma DATA_SECTION 中输入错误的变量中读取)。 任何方式。 有52个 obj 正在从 rts2800_Fpu.lib 进行编译(使用6k)、但我无法分辨为什么选择它们。 我刚才引用了这些内容、如下所示:
00014e38 00000014 rts2800_fpu32.lib:_printfi_min.obj (.econst:.string)
00014e4c 00000014 :strtod.obj (.econst:_digits)
此时、可能是因为它仅使用6k、我应该保留它。 我真的很好奇为什么所有这些代码都包含在其中、我不会直接调用这些代码
下面是另一种查看_printfi*.obj 中函数调用情况的方法。 此命令从 Windows 命令行运行。 它应用于由您的项目创建的最终链接.out 文件。
C:\path\to \project>nm2000 file.out |查找"print"
命令 nm2000转储可执行文件中的所有符号。 Windows 命令"查找"筛选包含文本"打印"的所有符号。 这将向您展示哪个 printf 变体正在使用_printfi 函数。
有关 nm2000的更多背景信息... 这是名称实用程序。 它是编译器工具提供的另一个可执行文件。 请在 C2000汇编工具手册中阅读有关该工具的更多信息。
很抱歉、我没有早点想到这个想法。
谢谢、此致、
乔治
乔治
谢谢你。 输出文件显示的结果与映射文件相同、_ _TI_printfi_minimal 和 _fprintf 都位于编译的文件中(以及 _ fputc、 _fputs 和我的代码未调用的数十个其他函数)。 查看 rts2800_fpu32.lib 的文档以及它提到可以编译自己的版本这一事实、我认为链接器会自动包括库中的所有内容、无论它是否从源代码调用。 这似乎是一个巨大的浪费、就像 printf-minimal 一样、这是我没有调用的~6k 函数。
-Adam
[报价用户="Adam Jones"] __TI_printfi_minimal 和 _fprintf 都位于编译的文件中
这意味着您的代码会调用 fprintf。 搜索您的所有源代码和头文件、查找 fprintf。
如果没有结果显示任何内容、则下面将介绍如何展开搜索。 使用 --gen_preprocessor_listing 重新生成所有内容。 这会为每个 C 文件生成预处理器列表文件。 文件扩展名从.c (或.cpp)更改为.rl。 在 C2000编译器手册中阅读有关--gen_preprocessor_listing 选项的更多信息。 在所有.RL 文件中搜索 fprintf。 这将显示呼叫的来源。
谢谢、此致、
乔治