xiuos3/kernel/kernel_test/test_timer.c

117 lines
3.2 KiB
C

/*
* Copyright (c) 2020 AIIT XUOS Lab
* XiUOS is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* @file test_timer.c
* @brief support to test timer function
* @version 1.0
* @author AIIT XUOS Lab
* @date 2021-04-24
*/
#include <xiuos.h>
extern long ShowTimer(void);
/*****************************************************************************************************************/
/***********************************test create timer with dynamic style *****************************************/
static int32 dynamic_timer1;
static int32 dynamic_timer2;
static int dynamic_cnt = 0;
static void DynamicTimeout1Entry(void *parameter)
{
KPrintf("periodic timer is timeout %d\n", dynamic_cnt);
if (dynamic_cnt++>= 9){
KTimerQuitRun(dynamic_timer1);
KPrintf("periodic timer was stopped! \n");
}
}
static void DynamicTimeout2Entry(void *parameter)
{
KPrintf("one shot timer is timeout\n");
}
int TestDynamicTimer(void)
{
dynamic_timer1 = KCreateTimer("d_tmr1", DynamicTimeout1Entry,
NONE, 10,
TIMER_TRIGGER_PERIODIC);
if (dynamic_timer1 != NONE) KTimerStartRun(dynamic_timer1);
dynamic_timer2 = KCreateTimer("d_tmr2", DynamicTimeout2Entry,
NONE, 30,
TIMER_TRIGGER_ONCE);
if (dynamic_timer2 != NONE) KTimerStartRun(dynamic_timer2);
ShowTimer();
return 0;
}
int TestTmrD(void)
{
KPrintf("test dynamic timer\n");
TestDynamicTimer();
return 0;
}
/*******************************test mixed timers with dynamic and static style **********************************/
static int32 mixed_timer_d;
static int32 test_delete_timer;
static int num = 0;
static void MexedTimeout2Entry(void *parameter)
{
KPrintf("mixed\n");
KTimerQuitRun(mixed_timer_d);
}
int TimerMix(void)
{
mixed_timer_d = KCreateTimer("mix_t2", MexedTimeout2Entry, NONE, 30, TIMER_TRIGGER_ONCE);
if (mixed_timer_d != NONE) KTimerStartRun(mixed_timer_d);
test_delete_timer = KCreateTimer("del_t3", MexedTimeout2Entry, NONE, 30, TIMER_TRIGGER_ONCE);
ShowTimer();
if(test_delete_timer != NONE)
KDeleteTimer(test_delete_timer);
return 0;
}
int TestTmrM(void)
{
KPrintf("test mixed timer\n");
TimerMix();
return 0;
}
int TestTmr(int argc, char*argv[]) {
KPrintf("/******************************************** START **************************************************/\n");
TestTmrD();
MdelayKTask(4000);
KPrintf("/******************************************* boundary ************************************************/\n");
TestTmrM();
MdelayKTask(4000);
KPrintf("/********************************************* END **************************************************/\n");
return 0;
}