📄 test_osapi_timer.c
字号:
/*****************************************************************************
******************************************************************************
** **
** Copyright (c) 2006 Videon Central, Inc. **
** All rights reserved. **
** **
** The computer program contained herein contains proprietary information **
** which is the property of Videon Central, Inc. The program may be used **
** and/or copied only with the written permission of Videon Central, Inc. **
** or in accordance with the terms and conditions stipulated in the **
** agreement/contract under which the programs have been supplied. **
** **
******************************************************************************
*****************************************************************************/
/**
* @file test_osapi_timer.c
*
* $Revision: 1.5 $
*
* Operating System API (OSAPI) test file.
*
*/
#include "vdvd_types.h"
#include "osapi.h"
#include "dbgprint.h"
#include "test_osapi.h"
#define OSAPI_TIMER_TEST_DELAY_SECONDS 5
#define OSAPI_TIMER_TEST_TIMEOUT_SECONDS 10
#define OSAPI_TIMER_TEST_TIMER5_TASK_DELAY_SECONDS 5
#define OSAPI_TIMER_TEST_TIMER6_TASK_DELAY_SECONDS 10
#define OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS 150
#define OSAPI_TIMER_TEST_TIMER1_PERIOD_MILLISECONDS 500
#define OSAPI_TIMER_TEST_TIMER2_PERIOD_MILLISECONDS 750
#define OSAPI_TIMER_TEST_TIMER3_PERIOD_MILLISECONDS 2000
#define OSAPI_TIMER_TEST_TIMER4_PERIOD1_MILLISECONDS 475
#define OSAPI_TIMER_TEST_TIMER4_PERIOD2_MILLISECONDS 1275
#define OSAPI_TIMER_TEST_TIMER5_PERIOD_MILLISECONDS 850
#define OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS 5*1000
#define OSAPI_TIMER_TEST_GET_TIME_REMAINING_TOLERANCE_MILLISECONDS 25
static int abs( int value )
{
if ( value < 0 )
return ( value * -1 );
return value;
}
static ULONG ElapsedTimeMilliseconds( ULONG startTime, ULONG endTime )
{
ULONG elapsedTimeMilliseconds;
if ( endTime >= startTime )
{
elapsedTimeMilliseconds = endTime - startTime;
}
else
{
elapsedTimeMilliseconds = (0xFFFFFFFF - startTime) + endTime + 1;
}
elapsedTimeMilliseconds = elapsedTimeMilliseconds / (OS_GetTicksPerSecond() / 1000);
return elapsedTimeMilliseconds;
}
static volatile int timer1Fired = FALSE;
static ULONG timer1FireTime = 0;
ULONG Timer1Function ( void )
{
timer1FireTime = OS_GetTicks();
timer1Fired = TRUE;
return 0;
}
static volatile int timer2Fired = FALSE;
static ULONG timer2FireTime = 0;
ULONG Timer2Function ( void )
{
timer2FireTime = OS_GetTicks();
timer2Fired = TRUE;
return 0;
}
static volatile int timer3Fired = FALSE;
static ULONG timer3FireTime = 0;
ULONG Timer3Function ( void )
{
timer3FireTime = OS_GetTicks();
timer3Fired = TRUE;
return 0;
}
static volatile int timer4Fired = FALSE;
static ULONG timer4FireTime = 0;
ULONG Timer4Function ( void )
{
timer4FireTime = OS_GetTicks();
timer4Fired = TRUE;
return 0;
}
static volatile int timer5Fired = FALSE;
static volatile int timer5Finished = FALSE;
static ULONG timer5FireTime = 0;
ULONG Timer5Function ( void )
{
timer5FireTime = OS_GetTicks();
timer5Fired = TRUE;
OS_TaskDelayMsec(OSAPI_TIMER_TEST_TIMER5_TASK_DELAY_SECONDS*1000);
timer5Finished = TRUE;
return 0;
}
static volatile int timer6Fired = FALSE;
static volatile int timer6Finished = FALSE;
static ULONG timer6FireTime = 0;
ULONG Timer6Function ( void )
{
timer6FireTime = OS_GetTicks();
timer6Fired = TRUE;
OS_TaskDelayMsec(OSAPI_TIMER_TEST_TIMER6_TASK_DELAY_SECONDS*1000);
timer6Finished = TRUE;
return 0;
}
void OSAPITimerTests( void )
{
ULONG startTime1;
ULONG endTime1;
ULONG startTime2;
ULONG startTime3;
ULONG startTime4;
ULONG startTime5;
ULONG startTime6;
int errorInMilliseconds;
int averageErrorInMilliseconds;
int maxErrorInMilliseconds;
ULONG elapsedTimeMilliseconds;
ULONG elapsedTimeTicks;
ULONG ticksPerSecond;
ULONG ulTimeRemainingMsec;
OS_STATUS status;
OS_TIMER_ID timer1Id;
OS_TIMER_ID timer2Id;
OS_TIMER_ID timer3Id;
OS_TIMER_ID timer4Id;
OS_TIMER_ID timer5Id;
OS_TIMER_ID timer6Id;
timer1Fired = FALSE;
timer1FireTime = 0;
timer2Fired = FALSE;
timer2FireTime = 0;
timer3Fired = FALSE;
timer3FireTime = 0;
timer4Fired = FALSE;
timer4FireTime = 0;
timer5Fired = FALSE;
timer5FireTime = 0;
timer5Finished = FALSE;
timer6Fired = FALSE;
timer6FireTime = 0;
timer6Finished = FALSE;
maxErrorInMilliseconds = 0;
errorInMilliseconds = 0;
averageErrorInMilliseconds = 0;
DbgPrint(("\n\nOSAPI TIMER TESTS\n"));
DbgPrint(("[running] Test 1: OS_GetTicksPerSecond: %lu", (ticksPerSecond = OS_GetTicksPerSecond())));
PassFail( (ticksPerSecond!=0) );
DbgPrint(("[running] Test 2: OS_GetTicks/OS_TaskDelay accuracy test (sleep for %d seconds)",OSAPI_TIMER_TEST_DELAY_SECONDS));
DbgPrint(("\n press <ENTER> to start %d second delay",OSAPI_TIMER_TEST_DELAY_SECONDS));
getchar();
DbgPrint((" sleeping for %d seconds",OSAPI_TIMER_TEST_DELAY_SECONDS));
startTime1 = OS_GetTicks();
OS_TaskDelayMsec(OSAPI_TIMER_TEST_DELAY_SECONDS*1000);
endTime1 = OS_GetTicks();
elapsedTimeMilliseconds = ElapsedTimeMilliseconds( startTime1, endTime1);
elapsedTimeTicks = endTime1 - startTime1;
PassFail( (elapsedTimeMilliseconds/100>=(OSAPI_TIMER_TEST_DELAY_SECONDS*10-1))&&(elapsedTimeMilliseconds/100<=(OSAPI_TIMER_TEST_DELAY_SECONDS*10+1)) );
if ( elapsedTimeTicks != OSAPI_TIMER_TEST_DELAY_SECONDS*OS_GetTickRate() )
{
DbgPrint(("OS_GetTickRate accuracy test failed"));
}
DbgPrint(("\n[running] Test 3: create timer1"));
status = OS_TimerCreate(&timer1Id, Timer1Function);
PassFail( (status==OS_OK) );
DbgPrint(("[running] Test 4: create timer2"));
status = OS_TimerCreate(&timer2Id, Timer2Function);
PassFail( (status==OS_OK) );
DbgPrint(("[running] Test 5: create timer3"));
status = OS_TimerCreate(&timer3Id, Timer3Function);
PassFail( (status==OS_OK) );
DbgPrint(("[running] Test 6: set timer1 (period = %dms)",OSAPI_TIMER_TEST_TIMER1_PERIOD_MILLISECONDS));
startTime1 = OS_GetTicks();
status = OS_TimerSetMsec(timer1Id, OSAPI_TIMER_TEST_TIMER1_PERIOD_MILLISECONDS );
PassFail( (status==OS_OK) );
DbgPrint(("[running] Test 7: set timer2 (period = %dms)",OSAPI_TIMER_TEST_TIMER2_PERIOD_MILLISECONDS));
startTime2 = OS_GetTicks();
status = OS_TimerSetMsec(timer2Id, OSAPI_TIMER_TEST_TIMER2_PERIOD_MILLISECONDS );
PassFail( (status==OS_OK) );
DbgPrint(("[running] Test 8: set timer3 (period = %dms)",OSAPI_TIMER_TEST_TIMER3_PERIOD_MILLISECONDS));
startTime3 = OS_GetTicks();
status = OS_TimerSetMsec(timer3Id, OSAPI_TIMER_TEST_TIMER3_PERIOD_MILLISECONDS );
PassFail( (status==OS_OK) );
DbgPrint(("[running] Test 9: Wait for timer1 to fire (period = %dms)",OSAPI_TIMER_TEST_TIMER1_PERIOD_MILLISECONDS));
do
{
elapsedTimeMilliseconds = ElapsedTimeMilliseconds( startTime1, OS_GetTicks());
} while (( timer1Fired == FALSE ) && ( elapsedTimeMilliseconds/1000 < OSAPI_TIMER_TEST_TIMEOUT_SECONDS ));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -