前言从裸机编码分析其处理问题的局限以及不足,引入了RTOS,本节主要说明RTOS任务是如何管理调度的。
韦东山老师视频学习链接
嵌入式软件架构一
嵌入式软件架构二
嵌入式软件架构三
嵌入式软件架构四
嵌入式软件架构五
RT-Thread线程管理的主要功能是对线程进行管理和调度,系统中总共存在两类线程,分别是系统线程和用户线程,系统线程是由RTT内核创建的线程,用户线程是由应用程序创建的线程,这两类线程都会从内核对象容器中分配线程对象,当线程被删除时,也会从对象容器中删除,而每个线程都有重要的属性,线程控制块、线程栈、入口函数等。
- 线程控制块由结构体 struct rt_thread 表示,线程控制块是操作系统用于管理线程的一个数据结构,它会存放线程的一些信息,例如优先级、线程名称、线程状态等,也包含线程与线程之间连接用的链表结构,线程等待事件集合等,详细定义如下:
/* 线 程 控 制 块 */
struct rt_thread
{
/* rt 对 象 */
char name[RT_NAME_MAX]; /* 线 程 名 称 */
rt_uint8_t type; /* 对 象 类 型 */
rt_uint8_t flags; /* 标 志 位 */
rt_list_t list; /* 对 象 列 表 */
rt_list_t tlist; /* 线 程 列 表 */
/* 栈 指 针 与 入 口 指 针 */
void *sp; /* 栈 指 针 */
void *entry; /* 入 口 函 数 指 针 */
void *parameter; /* 参 数 */
void *stack_addr; /* 栈 地 址 指 针 */
rt_uint32_t stack_size; /* 栈 大 小 */
/* 错 误 代 码 */
rt_err_t error; /* 线 程 错 误 代 码 */
rt_uint8_t stat; /* 线 程 状 态 */
/* 优 先 级 */
rt_uint8_t current_priority; /* 当 前 优 先 级 */
rt_uint8_t init_priority; /* 初 始 优 先 级 */
rt_uint32_t number_mask;
......
rt_ubase_t init_tick; /* 线 程 初 始 化 计 数 值 */
rt_ubase_t remaining_tick; /* 线 程 剩 余 计 数 值 */
struct rt_timer thread_timer; /* 内 置 线 程 定 时 器 */
void (*cleanup)(struct rt_thread *tid); /* 线 程 退 出 清 除 函 数 */
rt_uint32_t user_data; /* 用 户 数 据 */
};
- 线程栈:RTT线程具有独立的栈,当进行线程切换时,会将当前线程的上下文存在栈中,当线程要恢复运行时,再从栈中读取上下文信息,进行恢复。
- 线程控制块中的 entry 是线程的入口函数,它是线程实现预期功能的函数。