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)

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



你可能感兴趣的:(RTT内核1—线程 2020-02-27)