XFusion API v1.3.0
载入中...
搜索中...
未找到
semaphore

信号量可以管理和保护对共享资源的访问。 更多...

semaphore 的协作图:

结构体

struct  _xf_osal_semaphore_attr_t
 信号量的属性结构。 更多...
 

类型定义

typedef void * xf_osal_semaphore_t
 信号量句柄。
 
typedef struct _xf_osal_semaphore_attr_t xf_osal_semaphore_attr_t
 信号量的属性结构。
 

函数

xf_osal_semaphore_t xf_osal_semaphore_create (uint32_t max_count, uint32_t initial_count, const xf_osal_semaphore_attr_t *attr)
 创建并初始化信号量对象。
 
xf_err_t xf_osal_semaphore_acquire (xf_osal_semaphore_t semaphore, uint32_t timeout)
 获取信号量令牌,如果没有可用令牌则超时。
 
xf_err_t xf_osal_semaphore_release (xf_osal_semaphore_t semaphore)
 释放信号量令牌直至初始最大计数。
 
uint32_t xf_osal_semaphore_get_count (xf_osal_semaphore_t semaphore)
 获取当前信号量令牌计数。
 
xf_err_t xf_osal_semaphore_delete (xf_osal_semaphore_t semaphore)
 删除信号量对象。
 

详细描述

信号量可以管理和保护对共享资源的访问。

类型定义说明

◆ xf_osal_semaphore_t

typedef void* xf_osal_semaphore_t

信号量句柄。

在文件 xf_osal_semaphore.h41 行定义.

◆ xf_osal_semaphore_attr_t

信号量的属性结构。

函数说明

◆ xf_osal_semaphore_create()

xf_osal_semaphore_t xf_osal_semaphore_create ( uint32_t  max_count,
uint32_t  initial_count,
const xf_osal_semaphore_attr_t attr 
)

创建并初始化信号量对象。

注解
禁止 在中断服务函数中调用。
参数
max_count可用令牌的最大数量。
initial_count可用令牌的初始数量。
attr信号量属性。填入 NULL 时使用默认属性。
返回
xf_osal_semaphore_t
  • NULL 创建失败
  • (OTHER) 信号量句柄
示例
examples/osal/semaphore/main/xf_main.c.

◆ xf_osal_semaphore_acquire()

xf_err_t xf_osal_semaphore_acquire ( xf_osal_semaphore_t  semaphore,
uint32_t  timeout 
)

获取信号量令牌,如果没有可用令牌则超时。

注解
如果 timeout 为 0,则 可以 在中断服务函数中调用。
参数
semaphore信号量句柄。从 xf_osal_semaphore_create() 获取。
timeout超时时间,单位 tick.
  • 如需以 ms 为单位,请配合 xf_osal_kernel_ms_to_ticks() 使用。
  • 一直等待,直到获取到信号量(等待语义):填入 XF_OSAL_WAIT_FOREVER.
  • 尝试获取信号量(尝试语义),无论成功与否都立刻返回:填入 0.
返回
xf_err_t
  • XF_OK 成功
  • XF_FAIL 通用错误
  • XF_ERR_TIMEOUT 超时,指定时间内无法获取令牌
  • XF_ERR_RESOURCE 未指定超时时无法获取令牌
  • XF_ERR_INVALID_ARG 无效参数
示例
examples/osal/semaphore/main/xf_main.c.

◆ xf_osal_semaphore_release()

xf_err_t xf_osal_semaphore_release ( xf_osal_semaphore_t  semaphore)

释放信号量令牌直至初始最大计数。

注解
可以 在中断服务函数中调用。
参数
semaphore信号量句柄。从 xf_osal_semaphore_create() 获取。
返回
xf_err_t
  • XF_OK 成功
  • XF_FAIL 通用错误
  • XF_ERR_RESOURCE 无法释放(已达到最大令牌计数)
  • XF_ERR_INVALID_ARG 无效参数
  • XF_ERR_ISR 禁止在中断服务函数中调用
示例
examples/osal/semaphore/main/xf_main.c.

◆ xf_osal_semaphore_get_count()

uint32_t xf_osal_semaphore_get_count ( xf_osal_semaphore_t  semaphore)

获取当前信号量令牌计数。

注解
可以 在中断服务函数中调用。
参数
semaphore信号量句柄。从 xf_osal_semaphore_create() 获取。
返回
uint32_t 可用令牌的数量。
示例
examples/osal/semaphore/main/xf_main.c.

◆ xf_osal_semaphore_delete()

xf_err_t xf_osal_semaphore_delete ( xf_osal_semaphore_t  semaphore)

删除信号量对象。

注解
禁止 在中断服务函数中调用。
参数
semaphore信号量句柄。从 xf_osal_semaphore_create() 获取。
返回
xf_err_t
  • XF_OK 成功
  • XF_FAIL 通用错误
  • XF_ERR_RESOURCE 信号量处于无效状态
  • XF_ERR_INVALID_ARG 无效参数
  • XF_ERR_ISR 禁止在中断服务函数中调用
示例
examples/osal/semaphore/main/xf_main.c.