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.

[参考译文] 编译器/TMS570LS3137:编译器删除单元测试项目的死代码?

Guru**** 2563480 points
Other Parts Discussed in Thread: TMS570LS3137

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/593424/compiler-tms570ls3137-compiler-remove-dead-code-for-unit-test-project

部件号:TMS570LS3137
线程中讨论的其他部件:TMS320F2.8335万

工具/软件:TI C/C++编译器

大家好,

我的公司正在使用TMS570LS3137和TMS320F2.8335万上的跨平台项目(显然有一些特定于处理器的代码,但项目的大部分是一般性的)。  

我们正在使用6.1 5.2 v.0.0.0104万 和ARM编译器v..2

我们的项目构建和运行良好。 现在对于DO178,我们需要对上述项目的功能进行低级单元测试。

因此,我们的单元测试框架的设置如下所示:

ut_main.c 调用 ut_app.c, 必要时包括:

带  ut_a_code.c/h的a_code.c/h

带  ut_b_code.c/h的b_code.c/h

带  ut_b_code.c/h的c_code.c/h

...

z_code.c/h ,带 ut_z_code.c/h

我们的单元测试仍在开发中,但项目代码大小已膨胀,并且在硬件上难以运行。

显然,我们只需注释包含的内容,并排除我们目前不需要测试的文件。

但是,排除文件是一个非常手动的过程,我正在尝试找到一种更好的编程方法。

例如,我尝试使用“属性”>“构建”>“ARM编译器”>“高级选项”>“运行时模型选项”>“将每个函数放在单独的子节中”选项。

根据编译器用户指南,这应导致项目中不包括所有未链接的函数,并应减少最终代码大小(假定大多数函数未使用)。

由于我的单元测试项目除了一个代码/ut_code文件外,还从ut_app.c中注释掉了所有代码,我希望使用此选项可以大大减少我的代码大小。

然而,这种情况并没有发生。

成功减小项目大小的唯一方法是从项目中手动排除未使用的代码/ut_code文件。

那么,鉴于我的单元测试设置和我的目标是通过编程构建选项将项目减少到当前包含的代码,是否有人会提出任何建议?

非常感谢,

Neal

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

    [报价用户="ngohara1991"]

    例如,我尝试使用“属性”>“构建”>“ARM编译器”>“高级选项”>“运行时模型选项”>“将每个函数放在单独的子节中”选项。

    根据编译器用户指南,这应导致项目中不包括所有未链接的函数,并应减少最终代码大小(假定大多数函数未使用)。

    [/引述]

    假定代码在名为file.c的源文件中包含名为never被调用()的函数,并使用--gen_func_Subsects. 生成的file.obj具有Never被调用()的代码,该代码被隔离到名为.text:Never被调用的部分。  链接程序查找符号Never调用的任何使用。  请注意,它不必是典型的函数调用。  符号的任何使用都将计数。  如果找到符号Never调用的任何用法,则.text:Never调用部分将保留。  否则,它将被丢弃。

    我不完全理解您如何组织代码。  但我怀疑你会继续象征性地提到你不调用的函数,这就是为什么这些工具不会删除它们的原因。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢George的回复,
    关于您的示例,我已评论 了#include "never _called.h",
    而且我很肯定Never被调用()的所有实例都被注释掉或者在未使用的文件中,因为项目将在没有“隐式声明”警告的情况下生成。
    我的意思是项目没有使用,但显然仍是构建的一部分。

    你能建议用什么方法来跟踪never被调用()的符号用法,这样我就可以使--gen_func_subsection标志正确地减少我的代码大小吗?

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

    \n\n您能否建议使用正确的方法来跟踪never被调用()的符号用法,以便我可以使--gen_func_subsection标志正确地减小我的代码大小?
    [/引述]

    很遗憾,我不能。  这是因为我不了解您做得好的事情,无法再现。  

    请提交测试案例。  由于这是一种涉及链接器的情况,我需要一个有此问题的完整CCS项目。  您可以随意发送整个项目,或者您可能更喜欢创建一个单独的,较小的项目来演示问题。  请参阅Wiki文章 项目共享 ,了解如何打包项目。  然后将其附加到您的下一篇文章中。

    谢谢,此致,

    -George