RT-Thread API参考手册  3.1.1
嵌入式实时操作系统
线程管理

线程管理接口 更多...

结构体

struct  rt_thread
 线程控制块 更多...
 

宏定义

#define RT_THREAD_INIT   0x00
 初始化完成状态
 
#define RT_THREAD_READY   0x01
 就绪状态
 
#define RT_THREAD_SUSPEND   0x02
 挂起状态
 
#define RT_THREAD_RUNNING   0x03
 运行状态
 
#define RT_THREAD_BLOCK   RT_THREAD_SUSPEND
 阻塞状态
 
#define RT_THREAD_CLOSE   0x04
 关闭状态
 
#define RT_THREAD_CTRL_STARTUP   0x00
 启动线程命令.
 
#define RT_THREAD_CTRL_CLOSE   0x01
 关闭线程命令.
 
#define RT_THREAD_CTRL_CHANGE_PRIORITY   0x02
 改变线程优先级命令.
 
#define RT_THREAD_CTRL_INFO   0x03
 获取线程信息命令.
 

类型定义

typedef struct rt_threadrt_thread_t
 线程类型指针定义
 

函数

void rt_thread_idle_excute (void)
 系统空闲线程执行函数 更多...
 
rt_thread_t rt_thread_idle_gethandler (void)
 获取空闲线程处理函数 该函数将获取空闲线程的处理程序。
 
void rt_schedule (void)
 线程调度函数 更多...
 
void rt_enter_critical (void)
 调度器上锁 更多...
 
void rt_exit_critical (void)
 调度器解锁 更多...
 
rt_uint16_t rt_critical_level (void)
 获取调度锁深度 更多...
 
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_thread_t rt_thread_self (void)
 获得当前线程 更多...
 
rt_err_t rt_thread_startup (rt_thread_t thread)
 启动线程 更多...
 
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_yield (void)
 使线程让出处理器资源 更多...
 
rt_err_t rt_thread_sleep (rt_tick_t tick)
 线程睡眠 更多...
 
rt_err_t rt_thread_delay (rt_tick_t 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_resume (rt_thread_t thread)
 使线程恢复运行 更多...
 

详细描述

线程管理接口

RT-Thread操作系统是基于线程调度的多任务系统。

函数说明

void rt_thread_idle_excute ( void  )

系统空闲线程执行函数

当系统空闲时将运行空闲线程并执行该函数。

void rt_schedule ( void  )

线程调度函数

该函数将执行一次调度。它将选择一个具有最高优先级的线程,然后切换运行。

void rt_enter_critical ( void  )

调度器上锁

该函数将把调度器上锁。

示例:
idlehook_sample.c.
void rt_exit_critical ( void  )

调度器解锁

该函数将解锁调度器

示例:
idlehook_sample.c.
rt_uint16_t rt_critical_level ( void  )

获取调度锁深度

获取调度器锁的深度。

返回
调度器锁的深度。 0代表未上锁。
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 
)

初始化线程

此函数将初始化一个线程,通常用于初始化一个静态线程对象。

参数
thread线程句柄。线程句柄由用户提供出来,并指向对应的线程控制块内存地址。
name线程的名称;线程名称的最大长度由 rtconfig.h 中定义的 RT_NAME_MAX 宏指定,多余部分会被自动截掉。
entry线程的入口函数
parameter入口函数的传入参数
stack_start线程堆栈的起始地址
stack_size线程栈大小,单位是字节。在大多数系统中需要做栈空间地址对齐(例如 ARM 体系结构中需要向 4 字节地址对齐)。
priority线程的优先级。优先级范围根据系统配置情况(rtconfig.h 中的 RT_THREAD_PRIORITY_MAX 宏定义),如果支持的是 256 级优先级,那么范围是从 0 ~ 255,数值越小优先级越高,0 代表最高优先级。
tick线程的时间片大小。当系统中存在相同优先级线程时,这个参数指定线程一次调度能够运行的最大时间长度。
返回
成功返回 RT_EOK, 失败则返回 -RT_ERROR
示例:
event_sample.c, mailbox_sample.c, msgq_sample.c, mutex_sample.c, semaphore_sample.c , 以及 thread_sample.c.
rt_thread_t rt_thread_self ( void  )

获得当前线程

该函数将返回当前线程的线程对象句柄

返回
成功则返回当前线程对象句柄,如果调度器还未启动,则返回RT_NULL。
rt_err_t rt_thread_startup ( rt_thread_t  thread)

启动线程

此函数将启动一个线程并将其放入系统就绪队列

参数
thread被要被启动的线程句柄
返回
成功返回 RT_EOK, 失败则返回 -RT_ERROR
示例:
dynmem_sample.c, event_sample.c, idlehook_sample.c, interrupt_sample.c, led_blink_sample.c, mailbox_sample.c, memp_sample.c, msgq_sample.c, mutex_sample.c, priority_inversion.c, producer_consumer.c, scheduler_hook.c, semaphore_sample.c, signal_sample.c, thread_sample.c, timeslice_sample.c , 以及 uart_sample.c.
rt_err_t rt_thread_detach ( rt_thread_t  thread)

脱离线程

该函数将脱离一个线程。 线程对象将从线程队列中删除,并从系统对象管理中脱离/删除。

参数
thread线程句柄,它应该是由 rt_thread_init 进行初始化的线程句柄。
返回
成功返回 RT_EOK, 失败则返回 -RT_ERROR
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 
)

创建线程

该函数将创建一个线程对象并分配线程对象内存和堆栈。

参数
name线程的名称;线程名称的最大长度由 rtconfig.h 中的宏RT_NAME_MAX 指定,多余部分会被自动截掉。
entry线程的入口函数
parameter入口函数的传入参数
stack_size线程堆栈的大小
priority线程的优先级
tick线程的时间片大小。当系统中存在相同优先级线程时,这个参数指定线程一次调度能够运行的最大时间长度。
返回
被创建的线程对象句柄
示例:
dynmem_sample.c, idlehook_sample.c, interrupt_sample.c, led_blink_sample.c, memp_sample.c, priority_inversion.c, producer_consumer.c, scheduler_hook.c, signal_sample.c, thread_sample.c, timeslice_sample.c , 以及 uart_sample.c.
rt_err_t rt_thread_delete ( rt_thread_t  thread)

删除线程

该函数将删除一个线程。 线程对象将从线程队列中删除,并从空闲线程中的系统对象管理中删除。

参数
thread要删除的线程句柄
返回
成功返回 RT_EOK, 失败则返回 -RT_ERROR
rt_err_t rt_thread_yield ( void  )

使线程让出处理器资源

该函数将使当前线程出让处理器资源,它将不再占有处理器,调度器会选择相同优先级的下一个线程执行。 线程调用这个接口后,这个线程仍然在就绪队列中。

返回
RT_EOK
rt_err_t rt_thread_sleep ( rt_tick_t  tick)

线程睡眠

该函数将使当前线程睡眠几个系统始终节拍的时间

参数
tick线程睡眠的时间
返回
RT_EOK
rt_err_t rt_thread_delay ( rt_tick_t  tick)

线程延时

该函数将使当前线程延时几个系统始终节拍的时间。

参数
tick延时的系统节拍数
返回
RT_EOK
示例:
udpclient_sample.c.
rt_err_t rt_thread_control ( rt_thread_t  thread,
int  cmd,
void *  arg 
)

控制线程

该函数将根据命令修改线程的一些配置参数。

参数
thread被指定控制的线程
cmd控制命令, 包含以下参数: RT_THREAD_CTRL_CHANGE_PRIORITY 改变线程的优先级 RT_THREAD_CTRL_STARTUP 启动线程 RT_THREAD_CTRL_CLOSE 删除线程
arg控制命令相关的参数
返回
RT_EOK
rt_err_t rt_thread_suspend ( rt_thread_t  thread)

挂起线程

该函数将挂起指定的线程。

参数
thread要被挂起的线程
返回
成功返回 RT_EOK, 失败则返回 -RT_ERROR
注解
如果挂起的是当前线程,该函数运行之后必须调用rt_schedule()函数。 用户只需要了解该接口的作用,不推荐使用该接口。
rt_err_t rt_thread_resume ( rt_thread_t  thread)

使线程恢复运行

线程恢复就是让挂起的线程重新进入就绪状态,并将线程放入系统的就绪队列中; 如果被恢复线程在所有就绪态线程中,位于最高优先级链表的第一位,那么系统 将进行线程上下文的切换。

参数
thread将要被恢复的线程
返回
成功返回 RT_EOK, 失败则返回 -RT_ERROR