⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_osapi_timer.c

📁 这是DVD中伺服部分的核心代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
******************************************************************************
**                                                                          **
**  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 + -