用途:信号量控制块结构
来源:kernel/include/os_dummy.h:153
struct dummy_semaphore
{
os_list_node_t task_list_head_dummy; /* Block task list head */
os_list_node_t resource_node_dummy; /* Node in resource list */
uint32_t count_dummy; /* Current count */
uint32_t max_count_dummy; /* Semaphore support maximum value */
uint8_t object_inited_dummy; /* If semaphore 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_ALLOC_TYPE_STATIC or OS_KOBJ_ALLOC_TYPE_DYNAMIC */
uint8_t wake_type_dummy; /* The type to wake up blocking tasks, value is OS_SEM_WAKE_TYPE_PRIO
or OS_SEM_WAKE_TYPE_FIFO */
char name_dummy[OS_NAME_MAX + 1]; /* Semaphore name */
os_spinlock_t lock_dummy; /* Spin lock used under SMP */
};
typedef struct dummy_semaphore dummy_semaphore_t;
typedef dummy_semaphore_t *os_semaphore_id;
| 字段 | 类型 | 说明 |
|---|
task_list_head_dummy | os_list_node_t | 阻塞任务链表头 |
resource_node_dummy | os_list_node_t | 资源列表节点 |
| 字段 | 类型 | 说明 |
|---|
count_dummy | uint32_t | 当前计数 |
max_count_dummy | uint32_t | 支持的最大值 |
| 字段 | 类型 | 说明 |
|---|
object_inited_dummy | uint8_t | 对象是否已初始化(OS_KOBJ_INITED) |
object_alloc_type_dummy | uint8_t | 内存分配类型(静态或动态) |
| 字段 | 类型 | 说明 |
|---|
wake_type_dummy | uint8_t | 唤醒阻塞任务的类型(优先级或 FIFO) |
| 字段 | 类型 | 说明 |
|---|
name_dummy | char[] | 信号量名称 |
lock_dummy | os_spinlock_t | SMP 架构下使用的自旋锁 |
typedef dummy_semaphore_t *os_semaphore_id;
说明:信号量 ID 类型,实际上是信号量控制块指针
| 函数 | 说明 |
|---|
os_semaphore_create() | 创建信号量 |
os_semaphore_destroy() | 销毁信号量 |
os_semaphore_wait() | 等待信号量(P 操作) |
os_semaphore_post() | 释放信号量(V 操作) |
os_semaphore_set_wake_type() | 设置唤醒类型 |
os_semaphore_get_value() | 获取当前计数值 |
os_semaphore_get_max_value() | 获取最大值 |