RT-Thread 读后感3 —— 实现就绪列表 (定义就绪列表,将线程插入到就绪列表)

1. 定义就绪列表

线程创建好后,需要将线程添加到就绪列表里面,表示线程已经就绪,系统随时可以调度。RT-Thread定义的就绪列表如下:

/*  线程就绪列表如下 
**  RT_THREAD_PRIORITY_MAX 在rtconfig.h中默认定义为32  决定最大线程优先级
*/

rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];

2. 将线程插入到就绪列表

将线程插入到就绪列表就是通过线程控制块tlist这个节点插入到就绪列表来实现的。在初始化线程代码中添加 将线程插入到就绪列表的操作如下:

 /* 初始化线程*/
	 rt_thread_init(&rt_flag1_thread,                /* 线程控制块*/
	                flag1_thread_entry ,             /* 线程入口参数*/
	                RT_NULL,                         /* 线程形参*/
	                &rt_flag1_thread_stack[0],       /* 线程栈起始地址*/
	                sizeof(rt_flag1_thread_stack));  /*线程栈大小,单位为字节*/

	 /* 将线程插入到就绪列表中 */
	 rt_list_insert_before(&(rt_thread_priority_table[0]),&(rt_flag1_thread.tlist));
	 
     rt_thread_init(&rt_flag2_thread,                /* 线程控制块*/
	                flag2_thread_entry ,             /* 线程入口参数*/
	                RT_NULL,                         /* 线程形参*/
	                &rt_flag2_thread_stack[0],       /* 线程栈起始地址*/
	                sizeof(rt_flag2_thread_stack));  /*线程栈大小,单位为字节*/
	 
     /* 将线程插入到就绪列表中 */
	 rt_list_insert_before(&(rt_thread_priority_table[1]),&(rt_flag2_thread.tlist));

就绪列表的下标对应的是线程的优先级,目前线程还不支持优先级,选择flag1 线程插入到就绪列表为0的链表中,选择flag2插入到就绪列表为1的链表中。

猜你喜欢

转载自blog.csdn.net/qq_27762895/article/details/83386132