下载 FreeRTOS
 

出色的 RTOS & 嵌入式软件

内核
最新资讯
简化任何设备的身份验证云连接。
利用 CoAP 设计节能型云连接 IoT 解决方案。
11.0.0 版 FreeRTOS 内核简介:
FreeRTOS 路线图和代码贡献流程。
使用 FreeRTOS 实现 OPC-UA over TSN。

vSemaphoreCreateBinary
[信号量]

semphr. h
vSemaphoreCreateBinary( SemaphoreHandle_t xSemaphore )

注意:vSemaphoreCreateBinary() 宏保留在源代码中, 以确保后向兼容,但不应在新设计中使用。 新设计中应使用 xSemaphoreCreateBinary() 函数。

此外,在许多情况下,使用 直达任务通知 代替二进制信号量速度更快,更节省内存。

使用现有队列机制创建信号量的。队列长度为 1 ,因为这是二进制信号量。数据大小为 0 ,因为实际上我们并不会存储任何数据,只想知道队列为空还是满。

二进制信号量和互斥锁非常相似,但有一些小差异: 互斥锁包含优先继承机制, 而二进制信号量不包含。 因此,二进制信号量更适合(在任务间或任务与中断之间)实现同步, 而互斥锁更适合实现简单 互斥。

一旦获得二进制信号量,则无需返回, 因此任务同步可以通过一个任务/中断连续“提供”信号量, 而另一个任务/中断连续“获取”信号量来实现。 可以通过 xSemaphoreGiveFromISR() 文档页面上的示例代码来演示。

如果另一个优先级更高的任务尝试获取相同的互斥锁, 那么“获取”互斥锁的任务的优先级就有可能被提高。 拥有互斥锁的任务“继承”了 试图“获取”相同互斥锁任务的优先级, 这意味着必须始终“返回”互斥锁,否则 优先级较高的任务将永远无法获得互斥锁, 而优先级较低的任务将永远无法“取消继承”优先级。 用于实现互斥的互斥锁实例, 详见 xSemaphoreTake() 文档页面。

互斥锁和二进制信号量都分配给了 SemaphoreHandle_t 类型的变量, 可在任何采用此类型参数的 API 函数中使用。

参数:
xSemaphore 已创建信号量的句柄,应为 SemaphoreHandle_t 类型。
用法示例:
SemaphoreHandle_t xSemaphore;

void vATask( void * pvParameters ) { // Semaphore cannot be used before a call to vSemaphoreCreateBinary (). // This is a macro so pass the variable in directly. vSemaphoreCreateBinary( xSemaphore );

if( xSemaphore != NULL ) { // The semaphore was created successfully. // The semaphore can now be used. } }





Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.