美文网首页
RTT内核1—线程 2020-02-27

RTT内核1—线程 2020-02-27

作者: 宜居远控 | 来源:发表于2020-02-27 15:22 被阅读0次

    一. 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)

    调用此函数后创建的线程会被加入到线程的就绪队列,执行调度


    相关文章

      网友评论

          本文标题:RTT内核1—线程 2020-02-27

          本文链接:https://www.haomeiwen.com/subject/vcithhtx.html