os_dummy.h 源码
2026/7/20大约 3 分钟源码参考内核结构体头文件
os_dummy.h — 内核对象结构体定义
源文件路径: kernel/include/os_dummy.h
引用章节: 4.2 任务管理
完整源码
此文件定义了所有内核对象的用户可见结构体,包括任务控制块(TCB)、互斥锁、信号量、事件、消息队列、邮箱、定时器、内存池、堆内存、工作队列的 dummy 结构体。
#ifndef __OS_DUMMY_H__
#define __OS_DUMMY_H__
#include <oneos_config.h>
#include <os_types.h>
#include <os_stddef.h>
#include <os_list.h>
#include <os_spinlock.h>
/* ==================== 任务控制块 (TCB) ==================== */
struct dummy_task
{
/* begin: 顺序、位置和内容不可更改(与内核内部结构体对齐) */
void *stack_top_dummy; /* 当前栈顶指针 (SP) */
void *stack_begin_dummy; /* 任务栈起始地址 */
void *stack_end_dummy; /* 任务栈结束地址 */
uint16_t state; /* 任务状态 */
/* end: 顺序、位置和内容不可更改 */
uint8_t current_priority_dummy; /* 当前优先级 */
uint8_t backup_priority_dummy; /* 备用优先级(优先级继承用) */
os_err_t err_code_dummy; /* 错误码 */
os_err_t switch_retval_dummy; /* 任务切换返回值 */
uint8_t object_inited_dummy; /* 对象初始化状态 */
uint8_t object_alloc_type_dummy; /* 分配类型(静态/动态) */
os_list_node_t resource_node_dummy; /* 资源链表节点 */
os_list_node_t task_node_dummy; /* 就绪/阻塞队列节点 */
os_list_node_t tick_node_dummy; /* tick 队列节点 */
os_tick_t tick_timeout_dummy; /* 超时时间 */
os_tick_t tick_absolute_dummy; /* 超时绝对时间 */
os_tick_t time_slice_dummy; /* 时间片大小 */
os_tick_t remaining_time_slice_dummy; /* 剩余时间片 */
os_list_node_t *block_list_head_dummy; /* 阻塞所在 IPC 队列 */
os_bool_t is_wake_prio_dummy; /* 按优先级唤醒 */
#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; /* 运行所在 CPU,-1 表示未运行 */
int32_t cpu_affinity_dummy; /* CPU 亲和性 */
os_list_node_t join_node_dummy;
#endif
os_ubase_t swap_data_dummy;
void (*cleanup_dummy)(void *user_data); /* 清理回调 */
void *user_data_dummy; /* 用户私有数据 */
char name_dummy[OS_NAME_MAX + 1]; /* 任务名称 */
};
typedef struct dummy_task dummy_task_t;
/* ==================== 互斥锁 ==================== */
struct dummy_mutex
{
os_list_node_t task_list_head_dummy; /* 阻塞任务链表头 */
os_list_node_t resource_node_dummy; /* 资源链表节点 */
os_list_node_t hold_node_dummy;
dummy_task_t *owner_dummy; /* 持有者 */
uint32_t lock_count_dummy; /* 加锁计数 */
os_bool_t is_recursive_dummy; /* 是否递归锁 */
uint8_t object_inited_dummy;
uint8_t object_alloc_type_dummy;
uint8_t wake_type_dummy;
uint8_t original_priority_dummy;
char name_dummy[OS_NAME_MAX + 1];
os_spinlock_t lock_dummy;
};
typedef struct dummy_mutex dummy_mutex_t;
/* ==================== 邮箱 ==================== */
struct dummy_mailbox
{
void *mail_pool_dummy;
void *mail_pool_align_dummy;
os_list_node_t send_task_list_head_dummy;
os_list_node_t recv_task_list_head_dummy;
os_list_node_t resource_node_dummy;
uint16_t capacity_dummy;
uint16_t used_mails_dummy;
uint16_t read_index_dummy;
uint16_t write_index_dummy;
uint8_t object_inited_dummy;
uint8_t object_alloc_type_dummy;
uint8_t wake_type_dummy;
char name_dummy[OS_NAME_MAX + 1];
os_spinlock_t lock_dummy;
};
typedef struct dummy_mailbox dummy_mailbox_t;
/* ==================== 信号量 ==================== */
struct dummy_semaphore
{
os_list_node_t task_list_head_dummy;
os_list_node_t resource_node_dummy;
uint32_t count_dummy;
uint32_t max_count_dummy;
uint8_t object_inited_dummy;
uint8_t object_alloc_type_dummy;
uint8_t wake_type_dummy;
char name_dummy[OS_NAME_MAX + 1];
os_spinlock_t lock_dummy;
};
typedef struct dummy_semaphore dummy_semaphore_t;
/* ==================== 事件 ==================== */
struct dummy_event
{
os_list_node_t task_list_head_dummy;
os_list_node_t resource_node_dummy;
uint32_t set_dummy;
uint8_t object_inited_dummy;
uint8_t object_alloc_type_dummy;
uint8_t wake_type_dummy;
char name_dummy[OS_NAME_MAX + 1];
os_spinlock_t lock_dummy;
};
typedef struct dummy_event dummy_event_t;
/* ==================== 消息队列 ==================== */
struct dummy_mq_msg
{
struct dummy_mq_msg *next_dummy;
os_size_t msg_len_dummy;
};
typedef struct dummy_mq_msg dummy_mq_msg_t;
typedef struct dummy_mq_msg dummy_mq_msg_hdr_t;
struct dummy_msgqueue
{
void *msg_pool_dummy;
dummy_mq_msg_t *msg_queue_head_dummy;
dummy_mq_msg_t *msg_queue_tail_dummy;
dummy_mq_msg_t *msg_queue_free_dummy;
os_list_node_t send_task_list_head_dummy;
os_list_node_t recv_task_list_head_dummy;
os_list_node_t resource_node_dummy;
os_size_t max_msg_size_dummy;
uint16_t queue_depth_dummy;
uint16_t used_msgs_dummy;
uint8_t object_inited_dummy;
uint8_t object_alloc_type_dummy;
uint8_t wake_type_dummy;
char name_dummy[OS_NAME_MAX + 1];
os_spinlock_t lock_dummy;
};
typedef struct dummy_msgqueue dummy_msgqueue_t;
/* ==================== 定时器 ==================== */
struct dummy_timer
{
void (*timeout_func_dummy)(void *timeout_param);
void *parameter_dummy;
os_tick_t init_ticks_dummy;
os_tick_t round_ticks_dummy;
os_list_node_t list_dummy;
/* ... active_node, name ... */
char name_dummy[OS_NAME_MAX + 1];
};
typedef struct dummy_timer dummy_timer_t;
/* ==================== 内存池 ==================== */
struct dummy_mempool
{
void *start_addr_dummy;
void *free_list_dummy;
os_size_t size_dummy;
os_size_t blk_size_dummy;
os_size_t blk_total_num_dummy;
os_size_t blk_free_num_dummy;
os_list_node_t task_list_head_dummy;
os_list_node_t resource_node_dummy;
uint8_t object_alloc_type_dummy;
uint8_t object_inited_dummy;
char name_dummy[OS_NAME_MAX + 1];
os_spinlock_t lock_dummy;
};
typedef struct dummy_mempool dummy_mempool_t;
/* ==================== 内存算法枚举 ==================== */
enum os_mem_alg
{
#ifdef OS_USING_ALG_FIRSTFIT
OS_MEM_ALG_FIRSTFIT,
#endif
#ifdef OS_USING_ALG_BUDDY
OS_MEM_ALG_BUDDY,
#endif
OS_MEM_ALG_DEFAULT
};
/* ==================== 堆内存 ==================== */
struct dummy_heap
{
struct dummy_heap_mem *h_mem_dummy;
uint8_t object_inited_dummy;
char name_dummy[OS_NAME_MAX + 1];
os_list_node_t resource_node_dummy;
};
typedef struct dummy_heap dummy_heap_t;
/* ==================== 工作队列 ==================== */
struct dummy_work
{
os_list_node_t work_node_dummy;
void (*work_func_dummy)(void *data);
void *data_dummy;
dummy_timer_t work_timer_dummy;
struct dummy_workqueue *volatile workqueue_dummy;
uint8_t flag_dummy;
uint8_t object_inited_dummy;
};
typedef struct dummy_work dummy_work_t;
struct dummy_workqueue
{
os_list_node_t work_list_head_dummy;
dummy_work_t *work_current_dummy;
dummy_task_t queue_task_dummy;
os_spinlock_t lock_dummy;
dummy_semaphore_t sem_id_dummy;
uint8_t object_inited_dummy;
};
typedef struct dummy_workqueue dummy_workqueue_t;
#endif /* __OS_DUMMY_H__ */关键说明
os_dummy.h 是 OneOS 中最重要的头文件之一,定义了所有内核对象的用户可见结构体。这些结构体以 _dummy 后缀命名,字段与内核内部结构体一一对齐,确保 sizeof(dummy_task_t) 与实际 TCB 大小一致,从而支持静态分配内核对象。用户通过 OS_TASK_DEFINE(name) 等宏静态定义控制块,无需依赖动态内存分配。