AVR C語句運(yùn)行時(shí)間測試程序源代碼
http://www.rayfile.com/zh-cn/files/b8f67659-d773-11df-b350-0015c55db73d/f0ec1fdf/
核心代碼:
/********** AVR 運(yùn)行時(shí)間測試程序 **********
* 版本.........: 1.0
* 作者.........: 陳利棟
* 目標(biāo).........: ATmega128
* 文件名.......: main.c
* 編譯器.......: IAR for AVR V5.5
* 創(chuàng)建時(shí)間.....: 2010.10.14
* 最后修改.....: 2010.10.14
******************************************/
#include "main.h"
intputchar(intc)
{
returnuart_putchar(c);
}
volatileunsignedintTimerOverflowCount=0;
intmain(void)
{
unsignedlongTimerCount=0;
UART_Init();
printf("*********** 運(yùn)行時(shí)間測試 ***********rn");
printf("Build: %s %srn",__DATE__,__TIME__);
printf("時(shí)鐘頻率: %fMHzrn",(float)F_CPU/1000000);
TCCR1B_CS10=1;// 定時(shí)器1使能計(jì)數(shù),無分頻
TIMSK_TOIE1=1;// 定時(shí)器1使能溢出中斷
__enable_interrupt();// 總中斷使能
TimerOverflowCount=0;// 溢出計(jì)數(shù)清零
TCNT1=0;// 計(jì)數(shù)器清零
/* 此處插入要運(yùn)行的代碼 */
/* 代碼開始 */
_delay_us(123456);
/* 代碼結(jié)束 */
TCCR1B_CS10=0;// 定時(shí)器1停止計(jì)數(shù) 花費(fèi)3個(gè)時(shí)鐘周期
TimerCount=TCNT1;
TimerCount|=((unsignedlong)TimerOverflowCount<<16);
TimerCount-=3;// 關(guān)閉定時(shí)器的時(shí)間
TimerCount-=(50*TimerOverflowCount);// 溢出中斷花費(fèi)的時(shí)間
printf("消耗時(shí)鐘周期數(shù)...: %ld 0x%lxrn",TimerCount,TimerCount);
printf("消耗時(shí)間(單位: s): %lfrn",(double)1*TimerCount/F_CPU);
printf("消耗時(shí)間(單位:ms): %lfrn",(double)1000*TimerCount/F_CPU);
printf("消耗時(shí)間(單位:us): %lfrn",(double)1000000*TimerCount/F_CPU);
printf("消耗時(shí)間(單位:ns): %lfrn",(double)1000000000*TimerCount/F_CPU);
while(1);
}
#pragma vector = TIMER1_OVF_vect
__interruptvoidTimer1_Overflow(void)
{
TimerOverflowCount++;
}
* 版本.........: 1.0
* 作者.........: 陳利棟
* 目標(biāo).........: ATmega128
* 文件名.......: main.c
* 編譯器.......: IAR for AVR V5.5
* 創(chuàng)建時(shí)間.....: 2010.10.14
* 最后修改.....: 2010.10.14
******************************************/
#include "main.h"
intputchar(intc)
{
returnuart_putchar(c);
}
volatileunsignedintTimerOverflowCount=0;
intmain(void)
{
unsignedlongTimerCount=0;
UART_Init();
printf("*********** 運(yùn)行時(shí)間測試 ***********rn");
printf("Build: %s %srn",__DATE__,__TIME__);
printf("時(shí)鐘頻率: %fMHzrn",(float)F_CPU/1000000);
TCCR1B_CS10=1;// 定時(shí)器1使能計(jì)數(shù),無分頻
TIMSK_TOIE1=1;// 定時(shí)器1使能溢出中斷
__enable_interrupt();// 總中斷使能
TimerOverflowCount=0;// 溢出計(jì)數(shù)清零
TCNT1=0;// 計(jì)數(shù)器清零
/* 此處插入要運(yùn)行的代碼 */
/* 代碼開始 */
_delay_us(123456);
/* 代碼結(jié)束 */
TCCR1B_CS10=0;// 定時(shí)器1停止計(jì)數(shù) 花費(fèi)3個(gè)時(shí)鐘周期
TimerCount=TCNT1;
TimerCount|=((unsignedlong)TimerOverflowCount<<16);
TimerCount-=3;// 關(guān)閉定時(shí)器的時(shí)間
TimerCount-=(50*TimerOverflowCount);// 溢出中斷花費(fèi)的時(shí)間
printf("消耗時(shí)鐘周期數(shù)...: %ld 0x%lxrn",TimerCount,TimerCount);
printf("消耗時(shí)間(單位: s): %lfrn",(double)1*TimerCount/F_CPU);
printf("消耗時(shí)間(單位:ms): %lfrn",(double)1000*TimerCount/F_CPU);
printf("消耗時(shí)間(單位:us): %lfrn",(double)1000000*TimerCount/F_CPU);
printf("消耗時(shí)間(單位:ns): %lfrn",(double)1000000000*TimerCount/F_CPU);
while(1);
}
#pragma vector = TIMER1_OVF_vect
__interruptvoidTimer1_Overflow(void)
{
TimerOverflowCount++;
}
測試效果:
評(píng)論