RT-Thread学习记录2 线程的创建

☆樱花仙子☆ 提交于 2020-10-24 08:12:11

看视频笔记如下。。。。

在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)
调用此函数后创建的线程会被加入到线程的就绪队列里,,执行调度。

静态线程和动态线程的区别:相关资源的分配形式上,静态线程的线程控制块和线程栈要先定义出来,但是动态线程则不必,动态线程的线程控制块和线程栈是在运行时动态分配的。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!