RT_Thread_线程的一些基本概念

本文详细介绍了RT-Thread操作系统的线程管理,包括系统线程与用户线程的区分,线程的五种状态及其切换。重点讲述了线程的创建,分为静态线程和动态线程两种,强调了栈大小的合理设置方法,并提供了创建线程的相关宏定义。此外,还提及了如何通过msh命令监控线程栈的使用情况来优化线程栈大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方资料:线程管理 (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%比较合适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值