《代码执行时间测试的两种方法比较》由会员分享,可在线阅读,更多相关《代码执行时间测试的两种方法比较(7页珍藏版)》请在金锄头文库上搜索。
1、 1代碼執時間測試的種方法比較代碼執時間測試的種方法比較 一调用函数的方式对同一段代码测试的时间:一调用函数的方式对同一段代码测试的时间: void tbv_PrgTimerPwrOnInit( void ) taa_Taa0Cfg( ); TAA0 初始化函数,初始化函数,TAA0 被初始化为被初始化为 64MHz 的时钟频率,计数模式为的时钟频率,计数模式为free-runuing. void tbv_PrgTimerStart( void ) tbv_PrgTimerEnFlag = TBV_TAA0_ENABLE_CONST; /* taao timer begin count*/ 代
2、码测试的起始函数,其实质的作用是使能代码测试的起始函数,其实质的作用是使能 TAA0 的计数操作。的计数操作。 void tbv_PrgTimerEnd( void ) /*1:read out current taao count value*/ tbv_StPrgTimerOut.uwCurCouCt = tbv_uwTAA0VALUE; /*disable the TAA0 work and clear taa0 cnt register to zero*/ tbv_PrgTimerEnFlag = TBV_TAA0_DISABLE_CONST; /*calculation the co
3、de implement time */ /*time result is zoom 100 UNIT:US */ tbv_StPrgTimerOut.ulImpTimSec = tbv_UlPrgTimerCal( 测试代码的测试时间值的读取,以及测试代码的测试时间值的读取,以及 disableTAA0 的计数操作。的计数操作。 static ULONG tbv_UlPrgTimerCal( TBV_TES_TIM_OUT_ST *P ) UWORD temp = 0U; temp = P-uwCurCouCt + 1U; temp = ( ( temp * 100U )6U ); retu
4、rn ( temp ); 对读取的计数值依据对读取的计数值依据 TAA0 和和 TB2 时钟频率的不同,进行相应的折算,并为了方便查看对其值扩大为原值的时钟频率的不同,进行相应的折算,并为了方便查看对其值扩大为原值的 100 倍。倍。 代码运行时间的测试方法:代码运行时间的测试方法: TB2 中的函数:中的函数: void tb2_voIsr( void ) 2tbv_PrgTimerStart( ); 待测试代码待测试代码 tbv_PrgTimerEnd( ); ) 通过外部变量通过外部变量 tbv_StPrgTimerOut. uwCurCouCt 可以看到其变化情况,以下可以看到其变化情
5、况,以下 pc_osc 看到的既是代码的运行时间,单位为看到的既是代码的运行时间,单位为 us。 图图 1 最短时间:最短时间:5.42us 图图 2 其中一段时间:其中一段时间:6.85us 3图图 3 最长时间:最长时间:6.95us 图图 4 在在 Pc_Osc 一直运行的前提下,对一直运行的前提下,对 ID850QB 进行“进行“开始执行开始执行?停止执行停止执行?开始执行开始执行?停止执行停止执行?开始执行开始执行?停止执行停止执行”时的曲线。”时的曲线。 二直接读计数器的值时对同一段代码测试的时间:二直接读计数器的值时对同一段代码测试的时间: void tbv_PrgTimerPw
6、rOnInit( void ) taa_Taa0Cfg( ); TAA0 初始化函数,初始化函数,TAA0 被初始化为被初始化为 64MHz 的时钟频率,计数模式为的时钟频率,计数模式为free-running,同时使能,同时使能 TAA0 的计数操作。的计数操作。 代码运行时间的测试方法:代码运行时间的测试方法: 图中所示为三种执行路径下的执行时间曲线, 对于蓝色线框部分的解释是:当 PC 停止发送变量地址信息后,程序持续以最短的路径(图 11)为执行路径,故可以看到此时执行时间为一恒定的值。 图中所示为三种执行路径下的执行时间曲线, 对于蓝色线框部分的解释是:当 PC 停止发送变量地址信息
7、后,程序持续以最短的路径(图 11)为执行路径,故可以看到此时执行时间为一恒定的值。 4TB2 中的函数:中的函数: void tb2_voIsr( void ) tbv_StPrgTimVauOut.uwCurFirstCnt = tbv_uwTAA0VALUE; 待测试代码待测试代码 tbv_StPrgTimVauOut.uwCurSecodeCnt = tbv_uwTAA0VALUE; tbv_StPrgTimVauOut.uwResultCnt = tbv_StPrgTimVauOut.uwCurSecodeCnt - tbv_StPrgTimVauOut.uwCurFirstCnt;
8、 通过外部变量通过外部变量 tbv_StPrgTimerOut. uwResultCnt可以看到其变化情况,以下可以看到其变化情况,以下 pc_osc 看到不是代码的实际运行时间,看到的值为看到不是代码的实际运行时间,看到的值为 TAA0 计数的计数值。计数的计数值。 其值其值/64=执行时间(执行时间(us) 图图 5 TAA0 计数值为计数值为 311 由图由图 5 可知代码执行的最少时间为可知代码执行的最少时间为311/64=4.859375us。 5图图 6 TAA0 计数值为计数值为 403 由图由图 6 可知代码执行的最少时间为可知代码执行的最少时间为403/64=6.292875
9、us。 图图 7 TAA0 计数值为计数值为 408 由图由图 7 可知代码执行的最少时间为可知代码执行的最少时间为408/64=6.375us。 6图图 8 在在 Pc_Osc 一直运行的前提下,对一直运行的前提下,对 ID850QB 进行“进行“开始执行开始执行?停止执行停止执行?开始执行开始执行?停止执行停止执行?开始执行开始执行?停止执行停止执行”时的曲线。”时的曲线。 对于以上两种方法中所出现的三个值的解释如下,分别见图对于以上两种方法中所出现的三个值的解释如下,分别见图 9图图 11: 对于两种方法图对于两种方法图 3 和图和图 7 出现最大的测试时间的原因是:此时代码执行了出现最
10、大的测试时间的原因是:此时代码执行了Receive、decode、transmission 三个部分。三个部分。 执行路径见图执行路径见图 9 所示。所示。 图图 9 最长执行时间的执行路径最长执行时间的执行路径 对于两种方法图对于两种方法图 2 和图和图 6 出现的测试时间的原因是:此时代码执行了只执行出现的测试时间的原因是:此时代码执行了只执行图中所示为三种执行路径下的执行时间曲线, 对于蓝色线框部分的解释是:当 PC 停止发送变量地址信息后,程序持续以最短的路径(图 11)为执行路径,故可以看到此时执行时间为一恒定的值。 图中所示为三种执行路径下的执行时间曲线, 对于蓝色线框部分的解释是:当 PC 停止发送变量地址信息后,程序持续以最短的路径(图 11)为执行路径,故可以看到此时执行时间为一恒定的值。 7了了 Receive 部分。部分。 执行路径见图执行路径见图 10 所示。所示。 图图 10 中间值执行时间的执行路径中间值执行时间的执行路径 对于两种方法图对于两种方法图 1 和图和图 5 出现最小的测试时间的原因是:此时代码执行了出现最小的测试时间的原因是:此时代码执行了Decode、transmission 两个部分。两个部分。 执行路径见图执行路径见图 11 所示。所示。 图图 11 最短执行时间的执行路径最短执行时间的执行路径