Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yunke120
rt-thread
提交
0596a98c
R
rt-thread
项目概览
yunke120
/
rt-thread
与 Fork 源项目一致
Fork自
RT-Thread / rt-thread
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rt-thread
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0596a98c
编写于
8月 23, 2021
作者:
T
tyustli
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[add]kernel timer testcase
上级
a280fb8f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
528 addition
and
0 deletion
+528
-0
examples/utest/testcases/kernel/Kconfig
examples/utest/testcases/kernel/Kconfig
+4
-0
examples/utest/testcases/kernel/SConscript
examples/utest/testcases/kernel/SConscript
+3
-0
examples/utest/testcases/kernel/timer_tc.c
examples/utest/testcases/kernel/timer_tc.c
+521
-0
未找到文件。
examples/utest/testcases/kernel/Kconfig
浏览文件 @
0596a98c
...
...
@@ -19,4 +19,8 @@ config UTEST_EVENT_TC
default n
depends on RT_USING_EVENT
config UTEST_TIMER_TC
bool "timer test"
default n
endmenu
examples/utest/testcases/kernel/SConscript
浏览文件 @
0596a98c
...
...
@@ -17,6 +17,9 @@ if GetDepend(['UTEST_SEMAPHORE_TC']):
if
GetDepend
([
'UTEST_EVENT_TC'
]):
src
+=
[
'event_tc.c'
]
if
GetDepend
([
'UTEST_TIMER_TC'
]):
src
+=
[
'timer_tc.c'
]
CPPPATH
=
[
cwd
]
group
=
DefineGroup
(
'utestcases'
,
src
,
depend
=
[],
CPPPATH
=
CPPPATH
)
...
...
examples/utest/testcases/kernel/timer_tc.c
0 → 100644
浏览文件 @
0596a98c
/*
* Copyright (c) 2006-2019, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-08-12 luckyzjq the first version
*/
#include <rtthread.h>
#include <stdlib.h>
#include "utest.h"
static
rt_uint8_t
timer_flag_oneshot
[]
=
{
RT_TIMER_FLAG_ONE_SHOT
,
RT_TIMER_FLAG_ONE_SHOT
|
RT_TIMER_FLAG_HARD_TIMER
,
RT_TIMER_FLAG_ONE_SHOT
|
RT_TIMER_FLAG_SOFT_TIMER
,
};
static
rt_uint8_t
timer_flag_periodic
[]
=
{
RT_TIMER_FLAG_PERIODIC
,
RT_TIMER_FLAG_PERIODIC
|
RT_TIMER_FLAG_HARD_TIMER
,
RT_TIMER_FLAG_PERIODIC
|
RT_TIMER_FLAG_SOFT_TIMER
,
};
typedef
struct
test_timer_struct
{
struct
rt_timer
static_timer
;
/* static timer handler */
rt_timer_t
dynamic_timer
;
/* dynamic timer pointer */
rt_tick_t
expect_tick
;
/* expect tick */
rt_uint8_t
test_flag
;
/* timer callback done flag */
}
timer_struct
;
static
timer_struct
timer
;
#define test_static_timer_start test_static_timer_init
#define test_static_timer_stop test_static_timer_init
#define test_static_timer_detach test_static_timer_init
static
void
static_timer_oneshot
(
void
*
param
)
{
timer_struct
*
timer_call
;
timer_call
=
(
timer_struct
*
)
param
;
timer_call
->
test_flag
=
RT_TRUE
;
/* check expect tick */
if
(
rt_tick_get
()
-
timer_call
->
expect_tick
>
1
)
{
uassert_true
(
RT_FALSE
);
}
return
;
}
static
void
static_timer_periodic
(
void
*
param
)
{
rt_err_t
result
;
timer_struct
*
timer_call
;
timer_call
=
(
timer_struct
*
)
param
;
timer_call
->
test_flag
=
RT_TRUE
;
/* check expect tick */
if
(
rt_tick_get
()
-
timer_call
->
expect_tick
>
1
)
{
uassert_true
(
RT_FALSE
);
}
/* periodic timer can stop */
result
=
rt_timer_stop
(
&
timer_call
->
static_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
}
return
;
}
static
void
test_static_timer_init
(
void
)
{
rt_err_t
result
;
int
rand_num
=
rand
()
%
10
;
/* one shot timer test */
for
(
int
time_out
=
0
;
time_out
<
rand_num
;
time_out
++
)
{
for
(
int
i
=
0
;
i
<
sizeof
(
timer_flag_oneshot
);
i
++
)
{
rt_timer_init
(
&
timer
.
static_timer
,
"static_timer"
,
static_timer_oneshot
,
&
timer
,
time_out
,
timer_flag_oneshot
[
i
]);
/* calc expect tick */
timer
.
expect_tick
=
rt_tick_get
()
+
time_out
;
/* start timer */
result
=
rt_timer_start
(
&
timer
.
static_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
/* wait for timerout */
rt_thread_mdelay
(
time_out
+
5
);
/* detach timer */
result
=
rt_timer_detach
(
&
timer
.
static_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
if
(
timer
.
test_flag
!=
RT_TRUE
)
{
uassert_true
(
RT_FALSE
);
return
;
}
}
}
/* periodic timer test */
for
(
int
time_out
=
0
;
time_out
<
rand_num
;
time_out
++
)
{
for
(
int
i
=
0
;
i
<
sizeof
(
timer_flag_periodic
);
i
++
)
{
rt_timer_init
(
&
timer
.
static_timer
,
"static_timer"
,
static_timer_periodic
,
&
timer
,
time_out
,
timer_flag_periodic
[
i
]);
/* calc expect tick */
timer
.
expect_tick
=
rt_tick_get
()
+
time_out
;
/* start timer */
result
=
rt_timer_start
(
&
timer
.
static_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
/* wait for timerout */
rt_thread_mdelay
(
time_out
+
5
);
/* detach timer */
result
=
rt_timer_detach
(
&
timer
.
static_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
if
(
timer
.
test_flag
!=
RT_TRUE
)
{
uassert_true
(
RT_FALSE
);
return
;
}
}
}
timer
.
test_flag
=
RT_FALSE
;
uassert_true
(
RT_TRUE
);
return
;
}
static
void
static_timer_control
(
void
*
param
)
{
rt_err_t
result
;
timer_struct
*
timer_call
;
timer_call
=
(
timer_struct
*
)
param
;
timer_call
->
test_flag
=
RT_TRUE
;
/* check expect tick */
if
(
rt_tick_get
()
-
timer_call
->
expect_tick
>
1
)
{
uassert_true
(
RT_FALSE
);
}
/* periodic timer can stop */
result
=
rt_timer_stop
(
&
timer_call
->
static_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
}
return
;
}
static
void
test_static_timer_control
(
void
)
{
rt_err_t
result
;
int
rand_num
=
rand
()
%
10
;
int
set_data
;
int
get_data
;
rt_timer_init
(
&
timer
.
static_timer
,
"static_timer"
,
static_timer_control
,
&
timer
,
5
,
RT_TIMER_FLAG_PERIODIC
);
/* test set data */
set_data
=
rand_num
;
result
=
rt_timer_control
(
&
timer
.
static_timer
,
RT_TIMER_CTRL_SET_TIME
,
&
set_data
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
}
/* test get data */
result
=
rt_timer_control
(
&
timer
.
static_timer
,
RT_TIMER_CTRL_GET_TIME
,
&
get_data
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
}
/* a set of test */
if
(
set_data
!=
get_data
)
{
uassert_true
(
RT_FALSE
);
}
/* calc expect tick */
timer
.
expect_tick
=
rt_tick_get
()
+
set_data
;
/* start timer */
result
=
rt_timer_start
(
&
timer
.
static_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
rt_thread_mdelay
(
set_data
+
5
);
/* detach timer */
result
=
rt_timer_detach
(
&
timer
.
static_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
if
(
timer
.
test_flag
!=
RT_TRUE
)
{
uassert_true
(
RT_FALSE
);
return
;
}
timer
.
test_flag
=
RT_FALSE
;
uassert_true
(
RT_TRUE
);
}
#ifdef RT_USING_HEAP
#define test_dynamic_timer_start test_dynamic_timer_create
#define test_dynamic_timer_stop test_dynamic_timer_create
#define test_dynamic_timer_delete test_dynamic_timer_create
static
void
dynamic_timer_oneshot
(
void
*
param
)
{
timer_struct
*
timer_call
;
timer_call
=
(
timer_struct
*
)
param
;
timer_call
->
test_flag
=
RT_TRUE
;
/* check expect tick */
if
(
rt_tick_get
()
-
timer_call
->
expect_tick
>
1
)
{
uassert_true
(
RT_FALSE
);
}
return
;
}
static
void
dynamic_timer_periodic
(
void
*
param
)
{
rt_err_t
result
;
timer_struct
*
timer_call
;
timer_call
=
(
timer_struct
*
)
param
;
timer_call
->
test_flag
=
RT_TRUE
;
/* check expect tick */
if
(
rt_tick_get
()
-
timer_call
->
expect_tick
>
1
)
{
uassert_true
(
RT_FALSE
);
}
/* periodic timer can stop */
result
=
rt_timer_stop
(
timer_call
->
dynamic_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
}
return
;
}
static
void
test_dynamic_timer_create
(
void
)
{
rt_err_t
result
;
int
rand_num
=
rand
()
%
10
;
/* one shot timer test */
for
(
int
time_out
=
0
;
time_out
<
rand_num
;
time_out
++
)
{
for
(
int
i
=
0
;
i
<
sizeof
(
timer_flag_oneshot
);
i
++
)
{
timer
.
dynamic_timer
=
rt_timer_create
(
"dynamic_timer"
,
dynamic_timer_oneshot
,
&
timer
,
time_out
,
timer_flag_oneshot
[
i
]);
/* calc expect tick */
timer
.
expect_tick
=
rt_tick_get
()
+
time_out
;
/* start timer */
result
=
rt_timer_start
(
timer
.
dynamic_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
/* wait for timerout */
rt_thread_mdelay
(
time_out
+
5
);
/* detach timer */
result
=
rt_timer_delete
(
timer
.
dynamic_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
if
(
timer
.
test_flag
!=
RT_TRUE
)
{
uassert_true
(
RT_FALSE
);
return
;
}
}
}
/* periodic timer test */
for
(
int
time_out
=
0
;
time_out
<
rand_num
;
time_out
++
)
{
for
(
int
i
=
0
;
i
<
sizeof
(
timer_flag_periodic
);
i
++
)
{
timer
.
dynamic_timer
=
rt_timer_create
(
"dynamic_timer"
,
dynamic_timer_periodic
,
&
timer
,
time_out
,
timer_flag_periodic
[
i
]);
/* calc expect tick */
timer
.
expect_tick
=
rt_tick_get
()
+
time_out
;
/* start timer */
result
=
rt_timer_start
(
timer
.
dynamic_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
/* wait for timerout */
rt_thread_mdelay
(
time_out
+
5
);
/* detach timer */
result
=
rt_timer_delete
(
timer
.
dynamic_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
if
(
timer
.
test_flag
!=
RT_TRUE
)
{
uassert_true
(
RT_FALSE
);
return
;
}
}
}
timer
.
test_flag
=
RT_FALSE
;
uassert_true
(
RT_TRUE
);
return
;
}
static
void
dynamic_timer_control
(
void
*
param
)
{
rt_err_t
result
;
timer_struct
*
timer_call
;
timer_call
=
(
timer_struct
*
)
param
;
timer_call
->
test_flag
=
RT_TRUE
;
/* check expect tick */
if
(
rt_tick_get
()
-
timer_call
->
expect_tick
>
1
)
{
uassert_true
(
RT_FALSE
);
}
/* periodic timer can stop */
result
=
rt_timer_stop
(
timer_call
->
dynamic_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
}
return
;
}
static
void
test_dynamic_timer_control
(
void
)
{
rt_err_t
result
;
int
rand_num
=
rand
()
%
10
;
int
set_data
;
int
get_data
;
timer
.
dynamic_timer
=
rt_timer_create
(
"dynamic_timer"
,
dynamic_timer_control
,
&
timer
,
5
,
RT_TIMER_FLAG_PERIODIC
);
/* test set data */
set_data
=
rand_num
;
result
=
rt_timer_control
(
timer
.
dynamic_timer
,
RT_TIMER_CTRL_SET_TIME
,
&
set_data
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
}
/* test get data */
result
=
rt_timer_control
(
timer
.
dynamic_timer
,
RT_TIMER_CTRL_GET_TIME
,
&
get_data
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
}
/* a set of test */
if
(
set_data
!=
get_data
)
{
uassert_true
(
RT_FALSE
);
}
/* calc expect tick */
timer
.
expect_tick
=
rt_tick_get
()
+
set_data
;
/* start timer */
result
=
rt_timer_start
(
timer
.
dynamic_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
rt_thread_mdelay
(
set_data
+
5
);
/* detach timer */
result
=
rt_timer_delete
(
timer
.
dynamic_timer
);
if
(
RT_EOK
!=
result
)
{
uassert_true
(
RT_FALSE
);
return
;
}
if
(
timer
.
test_flag
!=
RT_TRUE
)
{
uassert_true
(
RT_FALSE
);
return
;
}
timer
.
test_flag
=
RT_FALSE
;
uassert_true
(
RT_TRUE
);
}
#endif
/* RT_USING_HEAP */
static
rt_err_t
utest_tc_init
(
void
)
{
timer
.
dynamic_timer
=
RT_NULL
;
timer
.
test_flag
=
RT_FALSE
;
return
RT_EOK
;
}
static
rt_err_t
utest_tc_cleanup
(
void
)
{
timer
.
dynamic_timer
=
RT_NULL
;
timer
.
test_flag
=
RT_FALSE
;
return
RT_EOK
;
}
static
void
testcase
(
void
)
{
UTEST_UNIT_RUN
(
test_static_timer_init
);
UTEST_UNIT_RUN
(
test_static_timer_start
);
UTEST_UNIT_RUN
(
test_static_timer_stop
);
UTEST_UNIT_RUN
(
test_static_timer_detach
);
UTEST_UNIT_RUN
(
test_static_timer_control
);
#ifdef RT_USING_HEAP
UTEST_UNIT_RUN
(
test_dynamic_timer_create
);
UTEST_UNIT_RUN
(
test_dynamic_timer_start
);
UTEST_UNIT_RUN
(
test_dynamic_timer_stop
);
UTEST_UNIT_RUN
(
test_dynamic_timer_delete
);
UTEST_UNIT_RUN
(
test_dynamic_timer_control
);
#endif
/* RT_USING_HEAP */
}
UTEST_TC_EXPORT
(
testcase
,
"testcases.kernel.timer_tc"
,
utest_tc_init
,
utest_tc_cleanup
,
1000
);
/*********************** end of file ****************************/
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录