RTT内核1—线程 2020-02-27
一. RT-Thread中,线程由3部分组成:线程代码(入口函数),线程控制块,线程堆栈
1.线程入口函数 有2种形式
1)无限循环结构
void thread_entry(void *parameter)
{
while(1)
{
/*等待事件的发生*/
.
.
/*处理事件*/
}
}
2)顺序执行结构
void thread_entry(void *parameter)
{
/*事务1处理*/
/*事务2处理*/
/*事务N处理*/
}
2.线程控制块
线程控制块是操作系统用于管理线程的一个数据结构,如:优先级 线程名 线程状态等,也包括线程与线程之间的连接用的链表结构,线程等待事件集合
struct rt_thread
struct rt_thread *rt_thread_t
3.线程栈
RT-Thread每个线程都具有独立的栈空间,当进行线程切换时,系统会将当前线程的上下文保存在线程栈中,当线程恢复运行时,再从线程栈中读取上下文的信息。
线程上下文是指线程执行的环境,具体来说就是各个变量和数据包括所有寄存器的变量,堆栈信息和内存信息等。
线程栈在形式上是一段连续的内存空间,我们可以通过定义一个数组或一段动态内存作为线程的栈。
二. 如何创建线程 动态线程和静态线程的创建
/*创建静态栈
rt_err_t rt_thread_init(struct_thread *thread,
const char *name,
void (*entry)(void *parameter),
void *parameter,
void *stack_start,
rt_uint32_t stack_size, //栈空间
rt_uint8_t priority, //优先级
rt_uint32_t tick //时间片轮询
)
/*创建动态线程
rt_thread_t rt_thread_create(const char *name,
void(*entry)(void *parameter),
void *parameter,
rt_uint32_t stack_size,
rt_uint8_priority,
rt_uint32_t tick
)
三. 启动线程
rt_err_t rt_thread_t_start_up(rt_thread_t thread)
调用此函数后创建的线程会被加入到线程的就绪队列,执行调度