前言
- 为了不再CTRL+C,CTRL+V,修改,我开始尝试手敲代码。
- RT-Thread线程可以静态初始化,也可以动态申请内存的方式创建
静态初始化线程
- 静态初始化线程时,线程结构体与线程的栈,必须是【全局变量】
- 我当时没在意,静态初始化线程时,线程结构体使用函数内的局部变量,编译通过了,运行就死机。
- 死机原因hardfault,bus fault,不过,经过耐心的分析,很快发现初始化的线程结构体数据不正确,原来是局部变量引起的。
- 线程的结构体,会作为内核线程对象,链入到链表。链表的每个节点,必须是全局的。
- 局部变量,会在函数调用结束后释放,造成链表节点数据损坏,线程无法正确调度。
问题代码
void pms_thread_init(void)
{
struct rt_thread tid; /* 这里使用局部变量,问题所在! */
rt_err_t ret = RT_EOK;
ret = rt_thread_init(&tid, "pms", pms_t