Communication Core

信号量机制(Semaphore)

信号量用于控制多个任务对共享资源的访问, 是RTOS中最基础的同步机制之一,可用于互斥控制、资源计数与任务阻塞管理。

机制定义

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();
    }
}

系统意义

信号量机制是实时系统同步控制的重要基础, 用于避免资源竞争、任务冲突以及不可预测执行顺序, 对系统稳定性与实时性具有直接影响。

相关导航

任务执行模型

Task Execution

调度系统

Scheduling Engine

中断机制

Interrupt Flow

任务生命周期

Task Lifecycle