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.

[参考译文] MSP430F2619:如何生成代码覆盖率报告

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1364058/msp430f2619-how-to-generate-code-coverage-report

器件型号:MSP430F2619

我 在编译器选项中使用了-gen_profile_info (在"properties (属性)"链接器下、然后编辑标志和添加生成配置文件信息)。生成一个运行没有错误但没有警告的构建。

描述资源路径位置类型
#10247-D 在没有段规范的情况下创建输出段".ppdata" hfx2_project C/C++ problem

我成功运行调试器并检查工作空间、没有.pdat 文件。

我还尝试将 --use_profile_info=file.prf 添加到不生成.prf 的编译器选项中。

不知道我做错了什么、任何见解都很好。

我正在使用 MSP-ts430m64评估板和 MSP430 USB 调试接口 MSP-feet430uif。 我使用的是 Code Composer Studio 版本12.7.1.00001

提前感谢

编辑:

好消息是、

好的、所以我能够更新 Get .dat 报告、但我无法获取.prf 文件。 我尝试使用的 TI_PROFDATA 不起作用。 我还尝试了 TI_PROFDATA 与 TI_PROFDATA 一起 —分析=codecov 和 ——分析=codecov 一起使用,但两者都不起作用。 我到底在做什么错了? 我还试图将 TI_COVDIR 和 COVDATA 设置为一个位置和一个名称、但两者都无法正常工作。 任何建议都很好。

编辑2:

我找到并遵循(https://software-dl.ti.com/ccs/esd/documents/application_notes/appnote-code_coverage_compiler.html)。  当我显然可以看到 LED 闪烁时、生成的 csv 显示所有内容的频率均为0。 我将  在代码中使用_TI_start_pprof_collection ();和_TI_stop_pprof_collection ();。 我在生成 Collect 时收到错误、但指南显示这是预期结果、我确实生成了.csv 文件。  如果我看到 LED 闪烁、为什么所有内容的频率都要如此、这样代码显然在做些什么呢? 任何见解都将是惊人的。 谢谢

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

    您好!

    我已将此主题提请编译器专家注意。 他们将能够进一步提供帮助。

    谢谢

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

    我想你已经修好了。。。

    Unknown 说:
    #10247-D 创建输出节".ppdata"而不使用节规范

    请尝试运行只能执行的简单程序...

        puts("Does this string get printed?");

    发生什么情况?  如果不起作用、请尝试以下 有关使用 printf 的提示

    谢谢。此致、

    -乔治

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

    是的、我能够获得.pdat 文件、.prf 和 csv 文件。 但.csv 文件对所有内容都显示频率为0。 当我尝试使用分析配置进行编译时、失败了。 调试器也会失败。 我尝试了放入

      puts ("是否打印此字符串?");

    并且在我尝试构建分析配置时能够将其视为 csv 中的条目。 但频率是0。在.csv 中所有内容都是0。 在收集配置中、当我尝试放入或 printf 时、我看不到它打印到控制台。   

    我还尝试了代码本身(尝试打印到控制台)、但没有尝试任何操作。 打印。 在我的代码中、我可以物理看到评估板的 LED 启动、因此我可以确认代码在工作/使 LED 闪烁。

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

    请创建一个新的程序,完全独立于当前的程序,其中所有的代码是...

    #include <stdio.h>
    
    int main()
    {
        puts("Does this string get printed?");
        return 0;
    }    

    当它正常工作时、该字符串会出现在"Console"视图中。  如果没有出现这种情况、请尝试 使用 printf 的提示

    谢谢。此致、

    -乔治

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

    我能够通过将堆和堆栈大小更改为300将其打印到控制台。 然后、我将收集和分析配置堆和堆栈大小设置为300、并使用我的原始代码重新运行(闪烁 LED、_TI_start_pprof_collection ();和_TI_stop_pprof_collection ();调用)、并且仍然看到.csv 的  每个条目的频率为0 (条目与代码匹配)。

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

    以下是我获取的代码

    #include <stdio.h>
    #include <msp430.h>
    
    volatile unsigned int i;
    volatile unsigned long j = 0;
    
    int main(void)
    {
    
    
    //    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
    //
    //    puts("Does this string get printed?");
    //    printf("hello world");
    //    return 0;
    
      _TI_start_pprof_collection();
    
      WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
    
      P5DIR |= 0x10;                            // P5.4= output direction
      P5SEL |= 0x10;                            // P5.4= MCLK option select
      P1DIR |= 0x01;                            // P1.0 = output direction
      //P1DIR |= 0x02;                            // P1.1 = output direction
    
      BCSCTL1 &= ~XT2OFF;                       // Activate XT2 high freq xtal
      BCSCTL3 |= XT2S_2;                        // 3   16MHz crystal or resonator
      do
      {
        IFG1 &= ~OFIFG;                         // Clear OSCFault flag
        for (i = 0xFF; i > 0; i--);             // Time for flag to set
      }
      while (IFG1 & OFIFG);                     // OSCFault flag still set?
    
      BCSCTL2 |= SELM_2;                        // MCLK = XT2 HF XTAL (safe)
    
      P1OUT |= 0x01;                          // P1.1 = 1
    
      //initalize variable
      int loop_count = 0;
    
      for (;;)                                  // Infinite loop
      {
        for(j = 0xFFFFF; j > 0; j--);
    
        //P1OUT |= 0x02;                          // P1.1 = 1
        P1OUT ^= 0x01;                         // P1.1 = 0
        //P1OUT &= ~0x02;                         // P1.1 = 0
    
        //break out of for loop after 5 times
        if (loop_count == 5)
        {
            break;
        }
    
        loop_count = loop_count + 1;
    
      }
    
      //stop code coverage data collection
      _TI_stop_pprof_collection();
    
        return 0;
    }

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

    请使堆栈和堆尽可能大。  虽然我无法保证它可以解决问题、但很容易尝试。

    请使用链接器映射文件确定段在哪个位置 .ppdata 磁场。  在执行代码之前和之后检查该内存范围。  有什么变化吗?

    谢谢。此致、

    -乔治

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

    我想了想。 我必须删除.csv 并重新运行分析配置、这样会正确显示所有代码行的频率。 很奇怪,但这才是成功的哈哈