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.

[参考译文] TMS320F28388D:代码覆盖率分析结果中的不一致性(CSV 文件)

Guru**** 2524550 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1547251/tms320f28388d-inconsistencies-in-code-coverage-analysis-results-csv-files

器件型号:TMS320F28388D


工具/软件:

您好:

我正在使用 CCS v10.4 并使用 CGT 20.2.3.LTS 编译器编译 C 工程。

  • 我使用--gen_profile_info生成 pprofout.pdat 文件的选项编译 CCS 工程。
  • 我使用 pdd2000.exe 实用程序将此文件与可执行文件 (.out) 一同处理、以生成 pprofout.prf 文件
  • 我使用--analyze=codecov --analyze_only和将 pprofout.prf 传递到重建 CCS 项目 --use_profile_info、后者会生成一组包含覆盖信息的 CSV 文件。

我注意到 CSV 文件中分析的输出有两个问题:

  1. 在每个 CSV 文件中、行都会重复(这类似于  CC1312R:代码覆盖分析复制的 csv 数据)。 没有什么大不了的,我可以忍受。
  2. 在其中一个 CSV 文件中、我注意到所有行都没有非零频率计数。 这是预期的、因为相应翻译单元中的任何功能都不由程序执行。
    1. 但为什么这个文件具体? 还有其他源文件不包含在此特定构建中调用的任何代码、但该工具不会为它们生成任何 CSV 文件!
    2. 此外、我可以在链接信息文件中看到、该翻译单元中定义的任何函数实际上都不会在链接时保留。 它们都不会最终进入可执行目标代码中。

我进一步调查了链接信息文件、发现奇怪的是、该翻译单元的目标文件中列出了几个部分、但它们都不是我直接编写的代码。 经过一些挖掘,事实证明,如果我的源代码的任何部分调用以下函数之一(可能还有其他函数):__isnanf,__isinff-然后链接器认为它们是翻译单元的一部分,实际上并不是调用它们的地方。

这是一个错误吗?

此致、

Pierre

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

    您好、

    让我与专家一起了解更多信息。

    谢谢

    Aswin

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

    请按照 TI 编译器代码覆盖一文中所述的步骤操作。  请确保该部分 .ppdata 与堆栈或段分配到相同类型的存储器 .bss 。  确保系统可以支持中所示的 C I/O 操作 写入 。  这有什么用吗?

    谢谢。此致、

    -乔治

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

    您好、George、

    我担心这无益、因为您的建议无法解决我遇到的问题。

    我的消息从列出我成功遵循的步骤开始,并指出我的问题是在过程中填充的 CSV 文件的内容。

    当我写消息时、我添加了我的调查结果、这可能会造成一些混淆。 我实际被卡住的部分是最后一句:

    经过一些挖掘,事实证明,如果我的源代码的任何部分调用以下函数之一(可能还有其他函数): __isnanf__isinff -然后链接器认为它们是翻译单元的一部分,实际上并不是调用它们的地方。

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

    您是使用编译器选项构建的 -- abi=eabi –opt_level=0 还是更高?  如果没有、使用它们会更好吗?

    谢谢。此致、

    -乔治

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

    您好、George、

    我确实是用构建的--abi=eabi--opt_level、但已关闭、而不是 0。

    如果我打开--opt_level=0、内置函数__isnanf__isinff等将不再出现在由链接器生成的.map 文件中。 此外,查看映射文件,我还注意到链接器认为它们所属的翻译单元不再有已生成的.ppdata

    这种行为是已知的吗? 发布的软件仍将使用-Ooff、因此我想我不会永久启用-O0。 在任何情况下,只有 pdd2000 生成的一个额外的 CSV 文件是没有问题的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我打开--opt_level=0 内置函数__isnanf__isinff等、将不再出现在由链接器生成的.map 文件中。 此外,查看映射文件我还注意到链接器认为它们所属的翻译单元不再具有已生成的.ppdata

    假设您有包含此语句的 C 代码...

        if (isnan(float_variable))

    如果在构建时未进行优化、编译器会生成名为函数的静态副本  ___isnanf 然后调用它。  发生这种情况的每个源文件中都会重复此操作。   

    时钟树 –opt_level=0 或更高级的情况下会生成用于检查 NaN 的指令、并且未调用任何函数。   

    很抱歉、我们花了这么长时间才给出准确的答案。  我把注意力集中在错误的事情上。

    谢谢。此致、

    -乔治