xref: /nrf52832-nimble/rt-thread/examples/kernel/thread_same_priority.c (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero #include <rtthread.h>
2*10465441SEvalZero #include "tc_comm.h"
3*10465441SEvalZero 
4*10465441SEvalZero static struct rt_thread thread1;
5*10465441SEvalZero static struct rt_thread thread2;
6*10465441SEvalZero static char thread1_stack[THREAD_STACK_SIZE];
7*10465441SEvalZero static char thread2_stack[THREAD_STACK_SIZE];
8*10465441SEvalZero 
9*10465441SEvalZero volatile static rt_uint32_t t1_count = 0;
10*10465441SEvalZero volatile static rt_uint32_t t2_count = 0;
thread1_entry(void * parameter)11*10465441SEvalZero static void thread1_entry(void* parameter)
12*10465441SEvalZero {
13*10465441SEvalZero     while (1)
14*10465441SEvalZero     {
15*10465441SEvalZero         t1_count ++;
16*10465441SEvalZero     }
17*10465441SEvalZero }
18*10465441SEvalZero 
thread2_entry(void * parameter)19*10465441SEvalZero static void thread2_entry(void* parameter)
20*10465441SEvalZero {
21*10465441SEvalZero     while (1)
22*10465441SEvalZero     {
23*10465441SEvalZero         t2_count ++;
24*10465441SEvalZero     }
25*10465441SEvalZero }
26*10465441SEvalZero 
thread_same_priority_init()27*10465441SEvalZero rt_err_t thread_same_priority_init()
28*10465441SEvalZero {
29*10465441SEvalZero     rt_err_t result;
30*10465441SEvalZero 
31*10465441SEvalZero     result = rt_thread_init(&thread1,
32*10465441SEvalZero         "t1",
33*10465441SEvalZero         thread1_entry, RT_NULL,
34*10465441SEvalZero         &thread1_stack[0], sizeof(thread1_stack),
35*10465441SEvalZero         THREAD_PRIORITY, 10);
36*10465441SEvalZero     if (result == RT_EOK)
37*10465441SEvalZero         rt_thread_startup(&thread1);
38*10465441SEvalZero     else
39*10465441SEvalZero         tc_stat(TC_STAT_END | TC_STAT_FAILED);
40*10465441SEvalZero 
41*10465441SEvalZero     result = rt_thread_init(&thread2,
42*10465441SEvalZero         "t2",
43*10465441SEvalZero         thread2_entry, RT_NULL,
44*10465441SEvalZero         &thread2_stack[0], sizeof(thread2_stack),
45*10465441SEvalZero         THREAD_PRIORITY, 5);
46*10465441SEvalZero     if (result == RT_EOK)
47*10465441SEvalZero         rt_thread_startup(&thread2);
48*10465441SEvalZero     else
49*10465441SEvalZero         tc_stat(TC_STAT_END | TC_STAT_FAILED);
50*10465441SEvalZero 
51*10465441SEvalZero     return result;
52*10465441SEvalZero }
53*10465441SEvalZero 
54*10465441SEvalZero #ifdef RT_USING_TC
_tc_cleanup()55*10465441SEvalZero static void _tc_cleanup()
56*10465441SEvalZero {
57*10465441SEvalZero     /* lock scheduler */
58*10465441SEvalZero     rt_enter_critical();
59*10465441SEvalZero 
60*10465441SEvalZero     if (thread1.stat != RT_THREAD_CLOSE)
61*10465441SEvalZero         rt_thread_detach(&thread1);
62*10465441SEvalZero     if (thread2.stat != RT_THREAD_CLOSE)
63*10465441SEvalZero         rt_thread_detach(&thread2);
64*10465441SEvalZero 
65*10465441SEvalZero     /* unlock scheduler */
66*10465441SEvalZero     rt_exit_critical();
67*10465441SEvalZero 
68*10465441SEvalZero     rt_kprintf("t1_count=%d t2_count=%d\n",t1_count,t2_count);
69*10465441SEvalZero 
70*10465441SEvalZero     if (t1_count / t2_count != 2)
71*10465441SEvalZero         tc_stat(TC_STAT_END | TC_STAT_FAILED);
72*10465441SEvalZero     else
73*10465441SEvalZero         tc_done(TC_STAT_PASSED);
74*10465441SEvalZero }
75*10465441SEvalZero 
_tc_thread_same_priority()76*10465441SEvalZero int _tc_thread_same_priority()
77*10465441SEvalZero {
78*10465441SEvalZero     t1_count = 0;
79*10465441SEvalZero     t2_count = 0;
80*10465441SEvalZero 
81*10465441SEvalZero     /* set tc cleanup */
82*10465441SEvalZero     tc_cleanup(_tc_cleanup);
83*10465441SEvalZero 
84*10465441SEvalZero     thread_same_priority_init();
85*10465441SEvalZero 
86*10465441SEvalZero     return 100;
87*10465441SEvalZero }
88*10465441SEvalZero FINSH_FUNCTION_EXPORT(_tc_thread_same_priority, a same priority thread test);
89*10465441SEvalZero #else
rt_application_init()90*10465441SEvalZero int rt_application_init()
91*10465441SEvalZero {
92*10465441SEvalZero     thread_same_priority_init();
93*10465441SEvalZero 
94*10465441SEvalZero     return 0;
95*10465441SEvalZero }
96*10465441SEvalZero #endif
97