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的链表中。