![]() |
RT-Thread API参考手册
4.0.3
嵌入式实时操作系统
|
线程管理接口 更多...
结构体 | |
| 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_thread * | rt_thread_t |
| 线程类型指针定义 | |
线程管理接口
RT-Thread操作系统是基于线程调度的多任务系统。
| 状态 | 描述 |
|---|---|
| 初始状态 | 当线程刚开始创建还没开始运行时就处于初始状态;在初始状态下,线程不参与调度。 |
| 就绪状态 | 在就绪状态下,线程按照优先级排队,等待被执行;一旦当前线程运行完毕让出处理器,操作系统会马上寻找最高优先级的就绪态线程运行。 |
| 运行状态 | 线程当前正在运行。 |
| 挂起状态 | 也称阻塞态。它可能因为资源不可用而挂起等待,或线程主动延时一段时间而挂起。在挂起状态下,线程不参与调度。 |
| 关闭状态 | 当线程运行结束时将处于关闭状态。关闭状态的线程不参与线程的调度。 |
| void rt_thread_idle_excute | ( | 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(*)(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_thread_t rt_thread_self | ( | void | ) |
获得当前线程
该函数将返回当前线程的线程对象句柄
| rt_err_t rt_thread_startup | ( | rt_thread_t | thread | ) |
启动线程
此函数将启动一个线程并将其放入系统就绪队列
| thread | 被要被启动的线程句柄 |
| rt_err_t rt_thread_detach | ( | rt_thread_t | thread | ) |
脱离线程
该函数将脱离一个线程。 线程对象将从线程队列中删除,并从系统对象管理中脱离/删除。
| thread | 线程句柄,它应该是由 rt_thread_init 进行初始化的线程句柄。 |
| 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 | 线程的时间片大小。当系统中存在相同优先级线程时,这个参数指定线程一次调度能够运行的最大时间长度。 |
| rt_err_t rt_thread_delete | ( | rt_thread_t | thread | ) |
删除线程
该函数将删除一个线程。 线程对象将从线程队列中删除,并从空闲线程中的系统对象管理中删除。
| thread | 要删除的线程句柄 |
| rt_err_t rt_thread_yield | ( | void | ) |
使线程让出处理器资源
该函数将使当前线程出让处理器资源,它将不再占有处理器,调度器会选择相同优先级的下一个线程执行。 线程调用这个接口后,这个线程仍然在就绪队列中。
| rt_err_t rt_thread_mdelay | ( | rt_int32_t | ms | ) |
线程毫秒延时
此函数将使当前线程延迟几毫秒。
| ms | 延时时间 |
| 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_err_t rt_thread_suspend | ( | rt_thread_t | thread | ) |
挂起线程
该函数将挂起指定的线程。
| thread | 要被挂起的线程 |
| rt_err_t rt_thread_resume | ( | rt_thread_t | thread | ) |
使线程恢复运行
线程恢复就是让挂起的线程重新进入就绪状态,并将线程放入系统的就绪队列中; 如果被恢复线程在所有就绪态线程中,位于最高优先级链表的第一位,那么系统 将进行线程上下文的切换。
| thread | 将要被恢复的线程 |