1 /*
2 * 程序清单:动态线程
3 *
4 * 这个程序会初始化2个动态线程,它们拥有共同的入口函数,但参数不相同
5 */
6 #include <rtthread.h>
7 #include "tc_comm.h"
8
9 /* 指向线程控制块的指针 */
10 static rt_thread_t tid1 = RT_NULL;
11 static rt_thread_t tid2 = RT_NULL;
12 /* 线程入口 */
thread_entry(void * parameter)13 static void thread_entry(void* parameter)
14 {
15 rt_uint32_t count = 0;
16 rt_uint32_t no = (rt_uint32_t) parameter; /* 获得正确的入口参数 */
17
18 while (1)
19 {
20 /* 打印线程计数值输出 */
21 rt_kprintf("thread%d count: %d\n", no, count ++);
22
23 /* 休眠10个OS Tick */
24 rt_thread_delay(10);
25 }
26 }
27
thread_dynamic_simple_init()28 int thread_dynamic_simple_init()
29 {
30 /* 创建线程1 */
31 tid1 = rt_thread_create("t1",
32 thread_entry, (void*)1, /* 线程入口是thread_entry, 入口参数是1 */
33 THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
34 if (tid1 != RT_NULL)
35 rt_thread_startup(tid1);
36 else
37 tc_stat(TC_STAT_END | TC_STAT_FAILED);
38
39 /* 创建线程2 */
40 tid2 = rt_thread_create("t2",
41 thread_entry, (void*)2, /* 线程入口是thread_entry, 入口参数是2 */
42 THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE);
43 if (tid2 != RT_NULL)
44 rt_thread_startup(tid2);
45 else
46 tc_stat(TC_STAT_END | TC_STAT_FAILED);
47
48 return 0;
49 }
50
51 #ifdef RT_USING_TC
_tc_cleanup()52 static void _tc_cleanup()
53 {
54 /* 调度器上锁,上锁后,将不再切换到其他线程,仅响应中断 */
55 rt_enter_critical();
56
57 /* 删除线程 */
58 if (tid1 != RT_NULL && tid1->stat != RT_THREAD_CLOSE)
59 rt_thread_delete(tid1);
60 if (tid2 != RT_NULL && tid2->stat != RT_THREAD_CLOSE)
61 rt_thread_delete(tid2);
62
63 /* 调度器解锁 */
64 rt_exit_critical();
65
66 /* 设置TestCase状态 */
67 tc_done(TC_STAT_PASSED);
68 }
69
_tc_thread_dynamic_simple()70 int _tc_thread_dynamic_simple()
71 {
72 /* 设置TestCase清理回调函数 */
73 tc_cleanup(_tc_cleanup);
74 thread_dynamic_simple_init();
75
76 /* 返回TestCase运行的最长时间 */
77 return 100;
78 }
79 /* 输出函数命令到finsh shell中 */
80 FINSH_FUNCTION_EXPORT(_tc_thread_dynamic_simple, a dynamic thread example);
81 #else
82 /* 用户应用入口 */
rt_application_init()83 int rt_application_init()
84 {
85 thread_dynamic_simple_init();
86
87 return 0;
88 }
89 #endif
90