任务控制块结构体
2026/4/26大约 2 分钟结构体数据结构内核
任务控制块
📚 本节导读
用途: 描述和管理任务的核心数据结构
来源: kernel/include/os_dummy.h:36
一、概述
1.1 概念定义
任务控制块(Task Control Block, TCB)是 OneOS 中用于描述和管理任务的核心数据结构。
1.2 作用
- 保存任务的运行状态
- 管理任务栈
- 维护任务优先级
- 链接到调度队列
二、结构体定义
2.1 完整定义
struct dummy_task
{
/* begin: The order, position and content cannot be changed */
void *stack_top_dummy; /* Point to SP */
void *stack_begin_dummy; /* The begin address of task stack */
void *stack_end_dummy; /* The end address of task stack */
uint16_t state; /* Task state, refer to OS_TASK_STATE_INIT, OS_TASK_STATE_READY ... */
/* end: The order, position and content cannot be changed */
uint8_t current_priority_dummy; /* Current priority. */
uint8_t backup_priority_dummy; /* Backup priority. */
os_err_t err_code_dummy; /* Error code. */
os_err_t switch_retval_dummy; /* Task switch return value, defined in os_errno.h*/
uint8_t object_inited_dummy; /* If task object is inited, value is OS_KOBJ_INITED */
uint8_t object_alloc_type_dummy; /* Indicates whether memory is allocated dynamically or statically,
value is OS_KOBJ_ALLOC_TYPE_STATIC or OS_KOBJ_ALLOC_TYPE_DYNAMIC */
uint8_t pad[2];
os_list_node_t resource_node_dummy; /* Node in resource list */
os_list_node_t task_node_dummy; /* Node in ready queue or blocking queue */
os_list_node_t tick_node_dummy; /* Node in tick queue */
os_tick_t tick_timeout_dummy; /* Timeout */
os_tick_t tick_absolute_dummy; /* Absolute time of timeout */
os_tick_t time_slice_dummy; /* Task's slice time (unit: tick). */
os_tick_t remaining_time_slice_dummy; /* Task's remaining slice time (unit: tick). */
os_list_node_t *block_list_head_dummy; /* Where the task is blocked at */
os_bool_t is_wake_prio_dummy; /* The wake type to task at block_list_head, according to priority or not */
#if defined(OS_USING_EVENT)
uint32_t event_set_dummy;
uint32_t event_option_dummy;
#endif
#if defined(OS_USING_MUTEX)
os_list_node_t hold_mutex_list_head_dummy;
#endif
#if defined(OS_USING_SMP)
int32_t cpu_index_dummy; /* The number of the cpu that the task is running on.
-1 means the task is not running. */
int32_t cpu_affinity_dummy;
os_list_node_t join_node_dummy; /* Node in join queue */
#endif
os_ubase_t swap_data_dummy;
void (*cleanup_dummy)(void *user_data); /* The cleanup function is provided by the user */
void *user_data_dummy; /* Private user data beyond this task. */
char name_dummy[OS_NAME_MAX + 1]; /* Task name */
#if defined(OS_USING_CPU_MONITOR)
cpu_use_info_t usage_info_dummy;
#endif
};
typedef struct dummy_task dummy_task_t;
typedef dummy_task_t *os_task_id;三、关键字段说明
3.1 不可变字段(顺序和位置不能改变)
| 字段 | 类型 | 说明 |
|---|---|---|
stack_top_dummy | void * | 栈顶指针(SP) |
stack_begin_dummy | void * | 栈起始地址 |
stack_end_dummy | void * | 栈结束地址 |
state | uint16_t | 任务状态 |
3.2 优先级相关
| 字段 | 类型 | 说明 |
|---|---|---|
current_priority_dummy | uint8_t | 当前优先级 |
backup_priority_dummy | uint8_t | 备份优先级(用于优先级继承) |
3.3 链表节点
| 字段 | 类型 | 说明 |
|---|---|---|
resource_node_dummy | os_list_node_t | 资源列表节点 |
task_node_dummy | os_list_node_t | 就绪队列或阻塞队列节点 |
tick_node_dummy | os_list_node_t | 时间队列节点 |
3.4 时间相关
| 字段 | 类型 | 说明 |
|---|---|---|
tick_timeout_dummy | os_tick_t | 超时时间 |
tick_absolute_dummy | os_tick_t | 绝对超时时间 |
time_slice_dummy | os_tick_t | 任务时间片 |
remaining_time_slice_dummy | os_tick_t | 剩余时间片 |
3.5 用户相关
| 字段 | 类型 | 说明 |
|---|---|---|
cleanup_dummy | 函数指针 | 清理回调函数 |
user_data_dummy | void * | 用户私有数据 |
name_dummy | char[] | 任务名称 |
四、相关类型
4.1 os_task_id
typedef dummy_task_t *os_task_id;说明: 任务 ID 类型,实际上是任务控制块指针。