线程控制模块提供线程生命周期管理和调度控制功能
更多...
|
rt_err_t | rt_thread_init (struct rt_thread *thread, 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_err_t | rt_thread_detach (rt_thread_t thread) |
| 脱离线程 更多...
|
|
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_delete (rt_thread_t thread) |
| 删除动态线程对象 更多...
|
|
rt_err_t | rt_thread_close (rt_thread_t thread) |
| 关闭线程 更多...
|
|
rt_thread_t | rt_thread_self (void) |
| 获取当前正在运行的线程对象 更多...
|
|
rt_thread_t | rt_thread_find (char *name) |
| 查找指定名称的线程对象 更多...
|
|
rt_err_t | rt_thread_startup (rt_thread_t thread) |
| 将线程加入就绪队列中启动 更多...
|
|
rt_err_t | rt_thread_yield (void) |
| 使当前线程主动让出处理器 更多...
|
|
rt_err_t | rt_thread_delay (rt_tick_t tick) |
| 当前线程延时指定的系统节拍数 更多...
|
|
rt_err_t | rt_thread_delay_until (rt_tick_t *tick, rt_tick_t inc_tick) |
| 使当前线程延迟直到 (*tick + inc_tick) 指定的系统节拍时间点 更多...
|
|
rt_err_t | rt_thread_mdelay (rt_int32_t ms) |
| 当前线程延迟指定的毫秒数 更多...
|
|
rt_err_t | rt_thread_control (rt_thread_t thread, int cmd, void *arg) |
| 控制线程行为 更多...
|
|
rt_err_t | rt_thread_suspend (rt_thread_t thread) |
| 挂起指定线程 更多...
|
|
rt_err_t | rt_thread_suspend_with_flag (rt_thread_t thread, int suspend_flag) |
| 挂起指定线程并设置挂起标志 更多...
|
|
rt_err_t | rt_thread_resume (rt_thread_t thread) |
| 恢复指定线程的执行 更多...
|
|
rt_err_t | rt_thread_get_name (rt_thread_t thread, char *name, rt_uint8_t name_size) |
| 获取指定线程的名称 更多...
|
|
rt_err_t | rt_thread_idle_sethook (void(*hook)(void)) |
| 设置空闲线程钩子函数 更多...
|
|
rt_err_t | rt_thread_idle_delhook (void(*hook)(void)) |
| 删除指定的空闲线程钩子函数 更多...
|
|
线程控制模块提供线程生命周期管理和调度控制功能
◆ rt_thread_init()
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 |
|
) |
| |
初始化线程对象
初始化线程,静态线程的线程句柄(或者说线程控制块指针)、线程栈由用户提供。 静态线程是指线程控制块、线程运行栈一般都设置为全局变量,在编译时就被确定、 被分配处理,内核不负责动态分配内存空间
- 参数
-
[in] | thread | 线程控制块指针 |
[in] | name | 线程名称 |
[in] | entry | 线程入口函数 |
[in] | parameter | 入口函数参数 |
[in] | stack_start | 栈起始地址 |
[in] | stack_size | 线程栈大小,单位是字节 |
[in] | priority | 线程的优先级,数值越小优先级越高,0 代表最高优先级 |
[in] | tick | 线程的时间片 tick 大小 |
- 返回值
-
- 警告
- 用户提供的栈首地址需做架构要求对齐,例如 ARM 上需要做 4 字节对齐
- 注解
- 线程名称的最大长度由 rtconfig.h 中定义的 RT_NAME_MAX 宏指定, 多余部分会被自动截掉
- 优先级范围根据系统配置由 rtconfig.h 中的 RT_THREAD_PRIORITY_MAX 宏定义, 如果支持的是256 级优先级,那么范围是从 0 ~ 255
◆ rt_thread_detach()
◆ rt_thread_create()
rt_thread_t rt_thread_create |
( |
const char * |
name, |
|
|
void(*)(void *parameter) |
entry, |
|
|
void * |
parameter, |
|
|
rt_uint32_t |
stack_size, |
|
|
rt_uint8_t |
priority, |
|
|
rt_uint32_t |
tick |
|
) |
| |
动态创建线程
使用该函数创建的线程属于动态线程,线程控制块和栈空间均由系统在堆中自动分配。 创建完成后线程处于初始化状态
- 参数
-
[in] | name | 线程名称 |
[in] | entry | 线程入口函数 |
[in] | parameter | 入口函数参数 |
[in] | stack_size | 线程栈大小,单位是字节 |
[in] | priority | 线程的优先级,数值越小优先级越高,0 代表最高优先级 |
[in] | tick | 线程的时间片 tick 大小 |
- 返回值
-
- 注解
- 线程名称的最大长度由 rtconfig.h 中定义的 RT_NAME_MAX 宏指定, 多余部分会被自动截掉。
- 优先级范围根据系统配置由 rtconfig.h 中的 RT_THREAD_PRIORITY_MAX 宏定义, 如果支持的是 256 级优先级,那么范围是从 0 ~ 255
◆ rt_thread_delete()
删除动态线程对象
使用该函数删除通过 rt_thread_create() 创建的线程。线程将从调度队列中移除, 并由空闲线程回收其占用的内存资源
- 参数
-
- 返回值
-
- 警告
- 需要删除的线程必须是由 rt_thread_create() 创建
- 用 rt_thread_delete() 函数删除线程接口,仅仅是把相应的线程状态更改为 RT_THREAD_CLOSE 状态,然后放入到 rt_thread_defunct 队列中,而真正的 删除动作(释放线程控制块和释放线程栈)需要到下一次执行 idle 线程时, 由 idle 线程完成最后的线程删除动作,所以请保证 idle 线程有机会得到执行
◆ rt_thread_close()
◆ rt_thread_self()
获取当前正在运行的线程对象
此函数用于返回当前 CPU 正在执行的线程对象指针,通常用于线程内部获取自身句柄, 可用于线程自管理、调试或日志标识用途
- 返回值
-
- 警告
- 请不要在中断服务程序中调用此函数,中断环境下它并不能准确获得当前的执行线程
- 注解
-
◆ rt_thread_find()
查找指定名称的线程对象
该函数在系统对象管理中搜索具有指定名称的线程对象,并返回其线程控制块指针。 可用于运行时动态获取线程句柄,用于调试、控制或跨模块访问线程。搜索过程中 对比线程名时会自动处理 RT_NAME_MAX 限制
- 参数
-
- 返回值
-
线程指针 | 成功 |
RT_NULL | 未找到对应名称的线程对象 |
- 警告
-
- 注解
-
◆ rt_thread_startup()
◆ rt_thread_yield()
rt_err_t rt_thread_yield |
( |
void |
| ) |
|
使当前线程主动让出处理器
该函数会使当前线程让出处理器资源,它将不再占有处理器,调度器会选择满足 运行条件下一个线程执行。线程调用这个接口后,这个线程仍然在就绪队列中
- 返回值
-
- 警告
-
◆ rt_thread_delay()
rt_err_t rt_thread_delay |
( |
rt_tick_t |
tick | ) |
|
当前线程延时指定的系统节拍数
当前线程调用该函数后将进入挂起状态,直到延时时间到达再次进入就绪状态。 延时时间以操作系统的节拍(tick)为单位。适用于线程主动等待某段时间再 继续运行的场景
- 参数
-
- 返回值
-
- 警告
- 本函数仅适用于线程上下文,且不能在中断服务例程中调用
◆ rt_thread_delay_until()
rt_err_t rt_thread_delay_until |
( |
rt_tick_t * |
tick, |
|
|
rt_tick_t |
inc_tick |
|
) |
| |
使当前线程延迟直到 (*tick + inc_tick) 指定的系统节拍时间点
该函数常用于周期性线程任务中,通过传入上次唤醒时间 tick 和周期增量 inc_tick,来实现相对于固定时间基准的精确延时调度。调用成功后,*tick 将被更新为新的目标唤醒时间点。当线程运行慢于目标周期时将不会延时, 线程将立即返回
- 参数
-
| [IN,OUT] | tick 传入上次唤醒时间,返回更新后的当前唤醒时间 |
[in] | inc_tick | 本次延迟周期,单位为系统节拍(tick) |
- 返回值
-
- 警告
- 本函数仅适用于线程上下文,且不能在中断服务例程中调用
◆ rt_thread_mdelay()
rt_err_t rt_thread_mdelay |
( |
rt_int32_t |
ms | ) |
|
当前线程延迟指定的毫秒数
该函数将毫秒数 ms 转换为系统节拍(tick),并使当前线程进入延迟状态, 在此期间线程将被挂起,由调度器切换其他线程运行。延迟时间受系统 tick 精度影响,实际延迟时间可能略大于指定毫秒数。
- 参数
-
- 返回值
-
- 警告
- 本函数仅适用于线程上下文,且不能在中断服务例程中调用
◆ rt_thread_control()
rt_err_t rt_thread_control |
( |
rt_thread_t |
thread, |
|
|
int |
cmd, |
|
|
void * |
arg |
|
) |
| |
控制线程行为
该函数用于根据传入的控制命令 cmd 控制指定线程的行为,不同的命令会触发不 同的操作:
- 参数
-
[in] | thread | 指定要控制的线程句柄 |
[in] | cmd | 控制命令 |
[in] | arg | 控制命令参数,根据不同命令传入不同类型指针 |
- 返回值
-
- 警告
-
◆ rt_thread_suspend()
挂起指定线程
该函数会将指定线程从就绪队列中移除并将其状态设置为挂起,被挂起的线程不 会被调度执行,直到被显式唤醒为止(如调用 rt_thread_resume() 函数)
- 参数
-
- 返回值
-
- 警告
- 非必要请应用开发者不要使用该接口进行功能开发
- 不建议线程本身挂起自己,如果确实需要采用 rt_thread_suspend() 挂起当前任务, 需要在调用rt_thread_suspend()函数后立刻调用 rt_schedule() 函数进行手动的 线程上下文切换
◆ rt_thread_suspend_with_flag()
rt_err_t rt_thread_suspend_with_flag |
( |
rt_thread_t |
thread, |
|
|
int |
suspend_flag |
|
) |
| |
挂起指定线程并设置挂起标志
此函数将指定线程设置为挂起状态,并通过 suspend_flag 标识线程被挂起的原因 该函数只能用于挂起当前线程自身,如调用方式:
- rt_thread_suspend_with_flag(rt_thread_self(), flag); 不建议用于挂起其他线程,因为无法保证其所处的执行上下文,若该线程正在占 用共享资源,将导致资源长期占用甚至死锁等问题
- 参数
-
[in] | thread | 要挂起的线程句柄(应为当前线程) |
[in] | suspend_flag | 挂起状态标志,用于标识线程被挂起的原因 |
- 返回值
-
- 警告
- 非必要请应用开发者不要使用该接口进行功能开发
- 该函数应仅在当前线程中调用,不可挂起其他线程
◆ rt_thread_resume()
恢复指定线程的执行
此函数将挂起状态的线程恢复至就绪状态,并将其加入就绪队列中,等待系统调度器 调度执行。通常用于解除线程因等待资源而挂起的状态
- 参数
-
- 返回值
-
- 警告
-
◆ rt_thread_get_name()
rt_err_t rt_thread_get_name |
( |
rt_thread_t |
thread, |
|
|
char * |
name, |
|
|
rt_uint8_t |
name_size |
|
) |
| |
获取指定线程的名称
此函数用于获取线程的名称字符串,并将其复制到用户提供的缓冲区中。 通常用于调试或日志记录等场景,用于识别线程
- 参数
-
[in] | thread | 要获取名称的线程句柄 |
[out] | name | 存储线程名称的缓冲区指针 |
[in] | name_size | 缓冲区大小 |
- 返回值
-
RT_EOK | 成功 |
-RT_EINVAL | 参数无效或获取失败 |
- 警告
-
- 注解
- 获取线程名称时应确保传入的缓冲区具有足够的空间,需要包括结尾的 '\0'
◆ rt_thread_idle_sethook()
rt_err_t rt_thread_idle_sethook |
( |
void(*)(void) |
hook | ) |
|
设置空闲线程钩子函数
当空闲线程运行时会自动执行设置的钩子函数,由于空闲线程具有系统的最低优先级, 所以只有在空闲的时候才会执行此钩子函数。空闲线程是一个线程状态永远为 就绪态的线程,因此设置的钩子函数必须保证空闲线程在任何时刻都不会处于 挂起状态,例如:rt_thread_delay(),rt_sem_take() 等可能会导致线程挂起的函数 都不能使用
- 参数
-
- 返回值
-
RT_EOK | 成功 |
-RT_EFULL | 钩子列表已满,无法设置更多钩子 |
- 警告
- 钩子函数必须尽量简单,且不能包含任何阻塞或挂起的操作,否则可能影响 系统的实时性
◆ rt_thread_idle_delhook()
rt_err_t rt_thread_idle_delhook |
( |
void(*)(void) |
hook | ) |
|
删除指定的空闲线程钩子函数
此函数用于从空闲线程钩子函数列表中删除指定的钩子函数,一旦删除成功 空闲线程将不再调用该钩子。
- 参数
-
- 返回值
-
RT_EOK | 成功 |
-RT_ENOSYS | 指定的钩子函数未找到 |
- 注解
-