看视频笔记如下。。。。
在RT-Thread中,与上述小任务对应的程序实体就叫做“线程”(或任务) ,RT-Thread就是一个能对这些小“线程”进行管理和调度的多“线程”操作系统。
线程是实现任务的载体,它是RT-Thread中最基本的调度单位,它描述了一个任务执行的运行环境,也描述 了这个任务所处的优先等级。
RT_Thread中,线程有三部分组成:线程代码(入口函数),线程控制块,线程堆栈。
线程代码如下:
1.无限循环模式
void thread_entry(void *parameter)
{
while(1)
{
/*等待事件的发生*/
/*处理事件*/
}
}
2.顺序执行模式
void thread_entry(void *parameter)
{
/*事务1处理*/
/*事务2处理*/
/*事务3处理*/
}
线程控制块
线程控制块是操作系统用于管理线程的一个数据结构,它会存放线程的一些信息,例如优先级、线程名称、线程状态等,也包括线程与线程之间连接用的链表结构,线程等待事件集 合等。
struct_thread
struct_thread *rt_thread_t //线程控制块记录线程的一些信息
线程栈
RT-Thread每个线程都具有独立的栈空间,当进 行线程切换时,系统 会将当前线程的上下文保存在线程栈中,当线程要恢复运行时,再从线程栈中读取上下文信息,恢复线程的运行。
线程上下文是指线程执行时的环境,具体来说就是各个变量和数据包括所有寄存器变量、堆栈信息、内存信息等。
线程栈在形式上是-段连续的内存空间,我们可以通过定义一个数组或者申请- -段动态内存来作为线程的栈。
线程的创建
1 创建线程
创建静态线程
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)(viod *parameter),
void *parameter,
rt_uint32_t stack_size,
rt_uint8_t priority,
rt_uint32_t tick)
2 启动线程
rt_err_t rt_thread_startup(rt_thread_t thread)
调用此函数后创建的线程会被加入到线程的就绪队列里,,执行调度。
静态线程和动态线程的区别:相关资源的分配形式上,静态线程的线程控制块和线程栈要先定义出来,但是动态线程则不必,动态线程的线程控制块和线程栈是在运行时动态分配的。
来源:oschina
链接:https://my.oschina.net/u/4383219/blog/4300414