工具与软件:
当我执行我可以看到的代码覆盖率时、我收集时运行调试器、直到程序完成、然后分析并打开.csv、我可以看到返回频率= 1。 如果我再次运行分析、请参阅返回频率= 2.
但如果我收集运行调试器、模拟并再次运行调试器分析返回频率= 3。 如果我重新运行分析返回= 5。
需要注意的是、我在这些测试之间删除.prf pdat 和.csv 文件。
为什么会出现这种行为? 是否有办法获得.csv 文件而不运行/递增在另一次运行分析时收集到的内容? 我的期望是、如果您运行调试器2次、您应该返回= 2 (执行了程序2次)、并且分析将生成.csv。
编辑:
我还尝试了以下方法:
运行调试器直到程序完成、然后我转至工具配置文件 代码生成代码覆盖率。 查看.csv、其显示返回频率= 1。 我再次运行调试器、然后进行工具生成代码覆盖率并查看.csv、我看到频率=3。 为什么会这样呢? 不知道我究竟缺少什么。 任何帮助都会很棒。
编辑2:
我想我找到了问题的一部分。 如果您第二次运行调试器并删除.prf 和.csv、然后运行分析、则会显示返回2而不是3、这在我看来是正确的。
然后我试着做一个测试、并证明即使你改变代码、它也会累积变化。
我用名为 printf ("pass_1")的行运行了 debug analyze; 它在.csv 中显示频率为1、然后将行更改为 printf ("pass_2");并再次运行(删除.prf 和.csv)、显示 pass2 frequency = 2、而在.csv 中找不到 pass1。 我不确定它为什么会这样运行。 我的预期是 pass_1和 pass_2将会在第二次运行中同时出现并具有一定的频率。
#include <stdio.h> #include <msp430.h> volatile unsigned int i; volatile unsigned long j = 0; extern void _TI_stop_pprof_collection(void); extern void _TI_start_pprof_collection(void); int main(void) { //start code coverage data collection //TI_COVDIR = "C:\Users\eVelez\PreVeil-eric.velez@mnemonics-inc.com\Documents\code_composer_work_spaces\v12\hfx2"; //TI_COVDATA = "yeehaw"; // WDTCTL = WDTPW + WDTHOLD; // Stop WDT // // puts("Does this string get printed?"); // printf("hello world"); // return 0; printf("yeehaw"); 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; } //show branching if else if a =1 and a=0, switch statement//state machine //initalize a and b int a = 10; int b = 5; // more complicated if statement to test if (a == 10 && b == 5) { printf("a = 10 and b =5\n"); } else if (a == 5 && b == 10) { printf("a = 5 and b =10\n"); } // switch int switch_var = 1; switch (switch_var) { case 1: printf("switch_var = 1"); break; case 2: printf("switch_var = 2"); break; case 3: printf("switch_var = 3"); break; case 4: printf("switch_var = 4"); break; case 5: printf("switch_var = 4"); break; default: printf("not initialized.\n"); break; } //stop code coverage data collection _TI_stop_pprof_collection(); return 0; }