官方资料:线程管理 (rt-thread.org)
1、线程的分类
系统线程:rtt系统创建的线程:main、idle空闲线程;
用户线程:我们自己写的,由rt_thread_init和rt_thread_create创建的线程;
2、线程的五种状态和切换
注:RT-Thread 中,实际上线程并不存在运行状态,就绪状态和运行状态是等同的。
3、创建线程
补充一下下面创建线程时有关的宏定义,可以在rt_config.h里查看和修改;
3.1、静态线程
静态线程是指线程控制块、线程运行栈一般都设置为全局变量,在编译时就被确定、被分配处理,内核不负责动态分配内存空间。
需要注意的是,用户提供的栈首地址需做系统对齐(例如 ARM 上需要做 4 字节对齐)。
rt_err_t rt_thread_init ( struct rt_thread * thread,
const char * name,
void(*)(void *parameter) entry,
void * parameter,
void * stack_start,
rt_uint32_t stack_size,
rt_uint8_t priority,
rt_uint32_t tick );
3.2、动态线程
系统会从动态堆内存中分配一个线程句柄以及按照参数中指定的栈大小从动态堆内存中分配相应的空间。
分配出来的栈空间是按照 rtconfig.h 中配置的 RT_ALIGN_SIZE 方式对齐。
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);
4、线程栈的大小
一开始,可设置为大一点的固定大小比如512,然后在系统运行的时候,利用msh的list_thread命令查看当前线程的信息,其中就包含栈的最大使用率max used,然后调整栈大小max used为70%比较合适。