信号量机制(Semaphore)
信号量用于控制多个任务对共享资源的访问, 是RTOS中最基础的同步机制之一,可用于互斥控制、资源计数与任务阻塞管理。
机制定义
Semaphore = 资源计数器 + 阻塞队列 + 唤醒机制 + 调度联动
API接口
Mailbox API
Message Queue API
Mutex API
Semaphore API
核心行为
申请资源
任务尝试获取信号量,资源不足时进入阻塞状态。
释放资源
任务释放资源后唤醒等待队列中的其他任务。
任务阻塞
等待资源期间任务暂停运行,释放CPU。
任务唤醒
资源可用时恢复等待任务执行。
系统关系模型
Task → Communication Object → Scheduler → Task
通信对象(Mailbox / Queue / Mutex / Semaphore) 本质上是调度器控制的资源中介。
执行流程
1. 初始化信号量
创建资源计数器并设置初始值。
2. 任务申请资源
若计数器大于0,则获取成功并减1。
3. 资源不足阻塞
任务进入等待队列,挂起执行。
4. 释放信号量
资源释放后增加计数并唤醒等待任务。
演示代码
/*********************************************************
* HRTOS Semaphore Demo
*********************************************************/
#include <HRTOS_KERNEL.H>
#include <HRTOS.H>
void task_A(void)
{
while(1)
{
os_wait1(2);
}
}
void task_B(void)
{
while(1)
{
os_wait1(2);
}
}
void main(void)
{
os_scheduling(1);
os_task((unsigned int)task_A, 0, 3, 0);
os_task((unsigned int)task_B, 1, 2, 0);
os_task_release(0);
while(1)
{
os_nop();
}
}
系统意义
信号量机制是实时系统同步控制的重要基础, 用于避免资源竞争、任务冲突以及不可预测执行顺序, 对系统稳定性与实时性具有直接影响。