Skip to content

Commit 0e9f195

Browse files
committed
add thread event test code
1 parent 18f37c3 commit 0e9f195

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
/*
2+
* Copyright (c) 2006-2025, RT-Thread Development Team
3+
*
4+
* SPDX-License-Identifier: Apache-2.0
5+
*
6+
* Change Logs:
7+
* Date Author Notes
8+
* 2025-07-03 rcitach test case for event
9+
*/
10+
11+
#include <rtthread.h>
12+
#include <rthw.h>
13+
#include <rtdevice.h>
14+
#include <utest.h>
15+
#include <utest_assert.h>
16+
#include <perf_tc.h>
17+
18+
#define EVENT_FLAG (1 << 0)
19+
static rt_event_t perf_thread_event = RT_NULL;
20+
static rt_sem_t sem1 = RT_NULL;
21+
static rt_sem_t complete_sem = RT_NULL;
22+
23+
static void perf_thread_event1(void *parameter)
24+
{
25+
rt_err_t ret = RT_EOK;
26+
rt_uint32_t recv = 0;
27+
rt_perf_t *perf = (rt_perf_t *)parameter;
28+
while (1)
29+
{
30+
ret = rt_event_recv(perf_thread_event, EVENT_FLAG,
31+
(RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR),
32+
RT_WAITING_FOREVER, &recv);
33+
rt_perf_stop(perf);
34+
if (ret != RT_EOK)
35+
{
36+
LOG_E("event recv error!");
37+
rt_event_delete(perf_thread_event);
38+
return;
39+
}
40+
41+
if (perf->count >= UTEST_SYS_PERF_TC_COUNT)
42+
{
43+
rt_event_delete(perf_thread_event);
44+
rt_sem_delete(sem1);
45+
return;
46+
}
47+
rt_sem_release(sem1);
48+
}
49+
}
50+
51+
static void perf_thread_event2(void *parameter)
52+
{
53+
rt_perf_t *perf = (rt_perf_t *)parameter;
54+
while (1)
55+
{
56+
if (perf->count >= UTEST_SYS_PERF_TC_COUNT)
57+
{
58+
rt_sem_release(complete_sem);
59+
return;
60+
}
61+
rt_sem_take(sem1, RT_WAITING_FOREVER);
62+
rt_perf_start(perf);
63+
rt_event_send(perf_thread_event, EVENT_FLAG);
64+
}
65+
}
66+
67+
rt_err_t rt_perf_thread_event(rt_perf_t *perf)
68+
{
69+
rt_thread_t thread1 = RT_NULL;
70+
rt_thread_t thread2 = RT_NULL;
71+
72+
# if __STDC_VERSION__ >= 199901L
73+
rt_strcpy(perf->name,__func__);
74+
#else
75+
rt_strcpy(perf->name,"rt_perf_thread_event");
76+
#endif
77+
78+
perf_thread_event = rt_event_create("perf_thread_event", RT_IPC_FLAG_PRIO);
79+
if (perf_thread_event == RT_NULL)
80+
{
81+
LOG_E("perf_thread_event create failed.");
82+
return -RT_ERROR;
83+
}
84+
85+
sem1 = rt_sem_create("sem1", 1, RT_IPC_FLAG_FIFO);
86+
complete_sem = rt_sem_create("complete", 0, RT_IPC_FLAG_FIFO);
87+
88+
thread1 = rt_thread_create("perf_thread_event1", perf_thread_event1, perf,
89+
THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
90+
if (thread1 == RT_NULL)
91+
{
92+
LOG_E("perf_thread_event1 create failed.");
93+
return -RT_ERROR;
94+
}
95+
96+
thread2 = rt_thread_create("perf_thread_event2", perf_thread_event2, perf,
97+
THREAD_STACK_SIZE, THREAD_PRIORITY + 1, THREAD_TIMESLICE);
98+
if (thread2 == RT_NULL)
99+
{
100+
LOG_E("perf_thread_event2 create failed.");
101+
return -RT_ERROR;
102+
}
103+
104+
rt_thread_startup(thread1);
105+
rt_thread_startup(thread2);
106+
107+
rt_sem_take(complete_sem, RT_WAITING_FOREVER);
108+
rt_perf_dump(perf);
109+
rt_sem_delete(complete_sem);
110+
return RT_EOK;
111+
}
112+

0 commit comments

Comments
 (0)