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

📄 test_osapi_timer.c

📁 这是DVD中伺服部分的核心代码
💻 C
📖 第 1 页 / 共 2 页
字号:

    elapsedTimeMilliseconds = 0;
    if ( timer1Fired == TRUE )
    {
        elapsedTimeMilliseconds =  ElapsedTimeMilliseconds(startTime1, timer1FireTime);
    }

    PassFail( 
                (status==OS_OK) &&
                (timer1Fired==TRUE) &&
                (elapsedTimeMilliseconds>(ULONG)(OSAPI_TIMER_TEST_TIMER1_PERIOD_MILLISECONDS-OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS)) &&
                (elapsedTimeMilliseconds<(ULONG)(OSAPI_TIMER_TEST_TIMER1_PERIOD_MILLISECONDS+OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS))
             );
    errorInMilliseconds = abs((int)elapsedTimeMilliseconds-OSAPI_TIMER_TEST_TIMER1_PERIOD_MILLISECONDS);
    if ( errorInMilliseconds > maxErrorInMilliseconds ) 
    {
        maxErrorInMilliseconds = errorInMilliseconds;
    }
    DbgPrint(("                   timer1 elasped time = %dms (error=%dms)\n",elapsedTimeMilliseconds, errorInMilliseconds));    
    averageErrorInMilliseconds += errorInMilliseconds;

    DbgPrint(("[running] Test 10: Wait for timer2 to fire (period = %dms)",OSAPI_TIMER_TEST_TIMER2_PERIOD_MILLISECONDS));
    do 
    { 
        elapsedTimeMilliseconds = ElapsedTimeMilliseconds( startTime2, OS_GetTicks());
    } while (( timer2Fired == FALSE ) && ( elapsedTimeMilliseconds/1000 < OSAPI_TIMER_TEST_TIMEOUT_SECONDS ));

    elapsedTimeMilliseconds = 0;
    if ( timer2Fired == TRUE )
    {
        elapsedTimeMilliseconds =  ElapsedTimeMilliseconds(startTime2, timer2FireTime);
    }

    PassFail( 
                (status==OS_OK) &&
                (timer2Fired==TRUE) &&
                (elapsedTimeMilliseconds>(ULONG)(OSAPI_TIMER_TEST_TIMER2_PERIOD_MILLISECONDS-OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS)) &&
                (elapsedTimeMilliseconds<(ULONG)(OSAPI_TIMER_TEST_TIMER2_PERIOD_MILLISECONDS+OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS))
             );
    errorInMilliseconds = abs((int)elapsedTimeMilliseconds-OSAPI_TIMER_TEST_TIMER2_PERIOD_MILLISECONDS);
    if ( errorInMilliseconds > maxErrorInMilliseconds ) 
    {
        maxErrorInMilliseconds = errorInMilliseconds;
    }
    DbgPrint(("                   timer2 elasped time = %dms (error=%dms)\n",elapsedTimeMilliseconds, errorInMilliseconds));    
    averageErrorInMilliseconds += errorInMilliseconds;



    DbgPrint(("[running] Test 11: Wait for timer3 to fire (period = %dms)",OSAPI_TIMER_TEST_TIMER3_PERIOD_MILLISECONDS));
    do 
    { 
        elapsedTimeMilliseconds = ElapsedTimeMilliseconds( startTime3, OS_GetTicks());
    } while (( timer3Fired == FALSE ) && ( elapsedTimeMilliseconds/1000 < OSAPI_TIMER_TEST_TIMEOUT_SECONDS ));

    elapsedTimeMilliseconds = 0;
    if ( timer3Fired == TRUE )
    {
        elapsedTimeMilliseconds =  ElapsedTimeMilliseconds(startTime3, timer3FireTime);

    }

    PassFail( 
                (status==OS_OK) &&
                (timer3Fired==TRUE) &&
                (elapsedTimeMilliseconds>(ULONG)(OSAPI_TIMER_TEST_TIMER3_PERIOD_MILLISECONDS-OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS)) &&
                (elapsedTimeMilliseconds<(ULONG)(OSAPI_TIMER_TEST_TIMER3_PERIOD_MILLISECONDS+OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS))
             );
    errorInMilliseconds = abs((int)elapsedTimeMilliseconds-OSAPI_TIMER_TEST_TIMER3_PERIOD_MILLISECONDS);
    if ( errorInMilliseconds > maxErrorInMilliseconds ) 
    {
        maxErrorInMilliseconds = errorInMilliseconds;
    }
    DbgPrint(("                   timer3 elasped time = %dms (error=%dms)\n",elapsedTimeMilliseconds, errorInMilliseconds));    
    averageErrorInMilliseconds += errorInMilliseconds;


    DbgPrint(("\n[running] Test 12: create timer4"));
    status = OS_TimerCreate(&timer4Id, Timer4Function);
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 13: set timer4 (period = %dms)",OSAPI_TIMER_TEST_TIMER4_PERIOD1_MILLISECONDS));
    startTime4 = OS_GetTicks();
    status = OS_TimerSetMsec(timer4Id, OSAPI_TIMER_TEST_TIMER4_PERIOD1_MILLISECONDS );
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 14: stop timer4"));
    status = OS_TimerStop(timer4Id);
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 15: set timer4 (period = %dms)",OSAPI_TIMER_TEST_TIMER4_PERIOD2_MILLISECONDS));
    startTime4 = OS_GetTicks();
    status = OS_TimerSetMsec(timer4Id, OSAPI_TIMER_TEST_TIMER4_PERIOD2_MILLISECONDS );
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 16: Wait for timer4 to fire (period = %dms)",OSAPI_TIMER_TEST_TIMER4_PERIOD2_MILLISECONDS));
    do 
    { 
        elapsedTimeMilliseconds =  ElapsedTimeMilliseconds(startTime4, OS_GetTicks());
    } while (( timer4Fired == FALSE ) && ( elapsedTimeMilliseconds/1000 < (ULONG)OSAPI_TIMER_TEST_TIMEOUT_SECONDS ));

    elapsedTimeMilliseconds = 0;
    if ( timer4Fired == TRUE )
    {
        elapsedTimeMilliseconds =  ElapsedTimeMilliseconds(startTime4, timer4FireTime);
    }

    PassFail( 
                (status==OS_OK) &&
                (timer4Fired==TRUE) &&
                (elapsedTimeMilliseconds>(ULONG)(OSAPI_TIMER_TEST_TIMER4_PERIOD2_MILLISECONDS-OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS)) &&
                (elapsedTimeMilliseconds<(ULONG)(OSAPI_TIMER_TEST_TIMER4_PERIOD2_MILLISECONDS+OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS))
             );
    errorInMilliseconds = abs((int)elapsedTimeMilliseconds-OSAPI_TIMER_TEST_TIMER4_PERIOD2_MILLISECONDS);
    if ( errorInMilliseconds > maxErrorInMilliseconds ) 
    {
        maxErrorInMilliseconds = errorInMilliseconds;
    }
    DbgPrint(("                   timer4 elasped time = %dms (error=%dms)\n",elapsedTimeMilliseconds, errorInMilliseconds));    
    averageErrorInMilliseconds += errorInMilliseconds;


    DbgPrint(("\n[running] Test 17: create timer5"));
    status = OS_TimerCreate(&timer5Id, Timer5Function);
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 18: set timer5 (period = %dms)",OSAPI_TIMER_TEST_TIMER5_PERIOD_MILLISECONDS));
    startTime5 = OS_GetTicks();
    status = OS_TimerSetMsec(timer5Id, OSAPI_TIMER_TEST_TIMER5_PERIOD_MILLISECONDS );
    PassFail( (status==OS_OK) );


    DbgPrint(("[running] Test 19: Wait for timer5 to fire (period = %dms)",OSAPI_TIMER_TEST_TIMER5_PERIOD_MILLISECONDS));
    do 
    { 
        elapsedTimeMilliseconds = ElapsedTimeMilliseconds( startTime5, OS_GetTicks());
    } while (( timer5Fired == FALSE ) && ( elapsedTimeMilliseconds/1000 < OSAPI_TIMER_TEST_TIMEOUT_SECONDS ));

    elapsedTimeMilliseconds = 0;
    if ( timer5Fired == TRUE )
    {
        elapsedTimeMilliseconds = (timer5FireTime - startTime5)/(OS_GetTicksPerSecond()/1000);     // in milliseconds
    }

    PassFail( 
                (status==OS_OK) &&
                (timer5Fired==TRUE) &&
                (elapsedTimeMilliseconds>(ULONG)(OSAPI_TIMER_TEST_TIMER5_PERIOD_MILLISECONDS-OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS)) &&
                (elapsedTimeMilliseconds<(ULONG)(OSAPI_TIMER_TEST_TIMER5_PERIOD_MILLISECONDS+OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS))
             );
    errorInMilliseconds = abs((int)elapsedTimeMilliseconds-OSAPI_TIMER_TEST_TIMER5_PERIOD_MILLISECONDS);
    if ( errorInMilliseconds > maxErrorInMilliseconds ) 
    {
        maxErrorInMilliseconds = errorInMilliseconds;
    }
    DbgPrint(("                   timer5 elasped time = %dms (error=%dms)\n",elapsedTimeMilliseconds, errorInMilliseconds));    
    averageErrorInMilliseconds += errorInMilliseconds;


    DbgPrint(("[running] Test 20: delete timer5"));
    status = OS_TimerDelete( timer5Id );
    timer5Id = 0;
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 21: Wait for timer5 function to end (delay = %ds)",OSAPI_TIMER_TEST_TIMER5_TASK_DELAY_SECONDS));
    do 
    { 
        elapsedTimeMilliseconds =  ElapsedTimeMilliseconds(startTime5, timer5FireTime);
    } while (( timer5Finished == FALSE ) && ( elapsedTimeMilliseconds/1000 < OSAPI_TIMER_TEST_TIMER5_TASK_DELAY_SECONDS + OSAPI_TIMER_TEST_TIMEOUT_SECONDS ));

    PassFail( timer5Finished == TRUE );


    DbgPrint(("[running] Test 21: delete timer4"));
    status = OS_TimerDelete( timer4Id );
    timer4Id = 0;
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 22: delete timer1"));
    status = OS_TimerDelete( timer1Id );
    timer1Id = 0;
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 23: delete timer2"));
    status = OS_TimerDelete( timer2Id );
    timer2Id = 0;
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 24: delete timer3"));
    status = OS_TimerDelete( timer3Id );
    timer3Id = 0;    
    PassFail( (status==OS_OK) );


    DbgPrint(("\n[running] Test  25: create timer6"));
    status = OS_TimerCreate(&timer6Id, Timer6Function);
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test  26: set timer6 (period = %dms)",OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS));
    startTime6 = OS_GetTicks();
    status = OS_TimerSetMsec(timer6Id, OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS );
    PassFail( (status==OS_OK) );

    DbgPrint(("[running] Test 27: Wait for timer6 to fire, checking GetTimeRemaining  (period = %dms)",OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS));
    do 
    { 
        elapsedTimeMilliseconds = ElapsedTimeMilliseconds( startTime6, OS_GetTicks());

        status = OS_TimerGetTime(timer6Id, &ulTimeRemainingMsec);
        if (status == OS_OK ) 
        {   
            if ( !
                ( ulTimeRemainingMsec >= ((OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS - elapsedTimeMilliseconds) - MIN(OSAPI_TIMER_TEST_GET_TIME_REMAINING_TOLERANCE_MILLISECONDS, (OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS - elapsedTimeMilliseconds)))  ) &&
                ( ulTimeRemainingMsec < ((OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS - elapsedTimeMilliseconds) + OSAPI_TIMER_TEST_GET_TIME_REMAINING_TOLERANCE_MILLISECONDS)  )
               )
            {
                DbgPrint(("Timer6: GetTimeRemaining (FAILED): %ums, (actual %ums)\n",ulTimeRemainingMsec, (OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS - elapsedTimeMilliseconds) ));
                status = OS_FAILURE;
            }
        }

    } while (( timer6Fired == FALSE ) && ( elapsedTimeMilliseconds/1000 < OSAPI_TIMER_TEST_TIMEOUT_SECONDS ));

    elapsedTimeMilliseconds = 0;
    if ( timer6Fired == TRUE )
    {
        elapsedTimeMilliseconds = (timer6FireTime - startTime6)/(OS_GetTicksPerSecond()/1000);     // in milliseconds
    }

    PassFail( 
                (status==OS_OK) &&
                (timer6Fired==TRUE) &&
                (elapsedTimeMilliseconds>(ULONG)(OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS-OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS)) &&
                (elapsedTimeMilliseconds<(ULONG)(OSAPI_TIMER_TEST_TIMER6_PERIOD_MILLISECONDS+OSAPI_TIMER_TEST_TIMER_TOLERANCE_MILLISECONDS))
             );


    DbgPrint(("[running] Test 28: delete timer6"));
    status = OS_TimerDelete( timer6Id );
    timer6Id = 0;    
    PassFail( (status==OS_OK) );


    DbgPrint(("\n\nstatistics:  Average Timer Error: %dms\n",averageErrorInMilliseconds/5));
    DbgPrint(("                 Max Timer Error: %dms\n",maxErrorInMilliseconds));

    DbgPrint(("\nOSAPI TIMER TEST FINISHED\n"));
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -