RT-Thread 中,线程由三部分组成:线程代码(入口函数)、线程控制块、线程堆栈.
线程代码:
线程控制块 :
线程控制块是操作系统用于管理线程的一个数据结构, 它会存放线程的一些信息, 例如优先级、 线程名称、 线程状态等, 也包含线程与线程之间连接用的链表结构, 线程等待事件集合等。
struct rt_thread
struct rt_thread *rt_thread_t
线程堆栈:
RT-Thread 每个线程都具有独立的栈空间, 当进行线程切换时, 系统会将当前线程的上下文保存在线程栈中, 当线程要恢复运行时, 再从线程栈中读取上下文信息, 恢复线程的运行。 线程上下文是指线程执行时的环境,具体来说就是各个变量和数据包括所有寄存器变量、堆栈信息、内存信息等。 线程栈在形式上是一段连续的内存空间 ,我们可以通过定义一个数组或者申请一段动态内存来作为线程的栈。
rt_err_t rt_thread_init(struct rt_thread *thread, //线程Handle
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_t priority, //线程的优先级
rt_uint32_t tick) //线程时间片
创建动态线程
rt_err_t rt_thread_startup(rt_thread_t thread) //调用此函数后创建的线程会被加入到线程的就绪队列,执行调度