Semaphore(信号量)
LibXR::Semaphore 提供计数型信号量以协调多任务/ISR 对共享资源的访问,支持线程上下文的阻塞等待 (Wait) 和中断安全的释放 (PostFromCallback)。当前实现覆盖 POSIX sem_t、FreeRTOS Counting Semaphore、ThreadX TX_SEMAPHORE 以及 Bare‑metal 自旋等版本。
设计要点
| 目标 | 说明 |
|---|---|
| 跨平台 | 隐藏 sem_t / SemaphoreHandle_t / TX_SEMAPHORE 等差异。 |
| ISR 友好 | 提供 PostFromCallback(bool in_isr),在中断或 DMA 回调内安全释放并触发任务切换。 |
| 超时等待 | Wait(timeout_ms) 支持毫秒级超时。 |
| 轻量裁剪 | 仅依赖 C++17 与可选 RTOS 头文件。 |
| 可观测性 | Value() 返回当前计数,方便调试与性能分析。 |
核心接口
class Semaphore {
public:
explicit Semaphore(uint32_t init = 0);
~Semaphore();
void Post(); // 线程上下文释放
void PostFromCallback(bool irq);// 中断/回调上下文释放
ErrorCode Wait(uint32_t timeout=UINT32_MAX); // 阻塞等待
size_t Value(); // 当前计数
};
错误码
ErrorCode::OK操作成功ErrorCode::TIMEOUT等待超时
⚠️ 注意:
Wait()不能 在 ISR 中调用。