1/** 2* @file hi_sem.h 3* 4* Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 5* Licensed under the Apache License, Version 2.0 (the "License"); 6* you may not use this file except in compliance with the License. 7* You may obtain a copy of the License at 8* 9* http://www.apache.org/licenses/LICENSE-2.0 10* 11* Unless required by applicable law or agreed to in writing, software 12* distributed under the License is distributed on an "AS IS" BASIS, 13* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14* See the License for the specific language governing permissions and 15* limitations under the License. 16* 17* Description: Semaphore APIs.CNcomment:接口。CNend 18* 19* @li Wait semaphore. In the interrupt function, disable interrupt context, and lock task context, this API must not be 20* called. Otherwise, uncontrollable exception scheduling may result.CNcomment:等待信号量:在中断、关中断、 21锁任务上下文禁止调用等待信号量接口,进而产生不可控的异常调度。CNend 22* @li Release semaphore.In the disable interrupt context, this API must not be called. Otherwise, uncontrollable 23* exception scheduling may result.CNcomment:释放信号量:在关中断上下文禁止调用释放信号量接口, 24进而产生不可控的异常调度。CNend \n 25* Create: 2019-05-29 26*/ 27 28/** 29 * @defgroup iot_sem Semaphore 30 * @ingroup osa 31 */ 32#ifndef __HI_SEM_H__ 33#define __HI_SEM_H__ 34#include <hi_types_base.h> 35 36#define HI_SEM_ONE ((hi_u8)1) /**< ucInit Obtained value of the input: Critical resource protection. 37 CNcomment:输入的取值: 临界资源保护 CNend */ 38#define HI_SEM_ZERO ((hi_u8)0) /**< ucInit Obtained value of the input: Synchronization 39 CNcomment:输入的取值: 同步 CNend */ 40 41/** 42* @ingroup iot_sem 43* @brief Creates a semaphore.CNcomment:创建信号量。CNend 44* 45* @par 描述: 46* Creates a semaphore.CNcomment:创建信号量。CNend 47* 48* @attention The blocking mode (permanent blocking or timing blocking) of the semaphore application operation cannot 49* be used in the interrupt, and the interrupt cannot be blocked.CNcomment:信号量申请操作的阻塞模式 50(永久阻塞和定时阻塞)不能在中断中使用,中断不能被阻塞。CNend 51* 52* @param sem_id [OUT] type #hi_u32*,semaphore ID.CNcomment:信号量ID号。CNend 53* @param init_value [IN] type #hi_u16,Number of initialized valid signals. The value range is [0, 0xFFFF]. 54CNcomment:有效信号的初始化个数,范围为:[0, 0xFFFF]CNend 55* 56* @retval #0 Success. 57* @retval #Other Failure, for details, see hi_errno.h 58* @par 依赖: 59* @li hi_sem.h:Describes the semaphore APIs.CNcomment:文件用于描述信号量相关接口。CNend 60* @see hi_sem_delete。 61*/ 62hi_u32 hi_sem_create(hi_u32 *sem_id, hi_u16 init_value); 63 64 65/** 66* @ingroup iot_sem 67* @brief Creates a two-value semaphore(0/1).CNcomment:创建二值信号量(0/1)。CNend 68* 69* @par 描述: 70* Creates a two-value semaphore(0/1).CNcomment:创建二值信号量(0/1)。CNend 71* 72* @attention The blocking mode (permanent blocking or timing blocking) of the semaphore application operation cannot 73* be used in the interrupt, and the interrupt cannot be blocked.CNcomment:信号量申请操作的阻塞模式 74(永久阻塞和定时阻塞)不能在中断中使用,中断不能被阻塞。CNend 75* 76* @param sem_id [OUT] type #hi_u32*,semaphore ID.CNcomment:信号量ID号。CNend 77* @param init_value [IN] type #hi_u8,initial value. Generally, when the value is HI_SEM_ONE, the API is used for 78* critical resource protection. When the value is HI_SEM_ZERO, the API is used for synchronization. 79CNcomment:初始值。一般情况下,当值为HI_SEM_ONE时,用作临界资源保护;当值为HI_SEM_ZERO时,用作同步。CNend 80* 81* @retval #0 Success. 82* @retval #Other Failure, for details, see hi_errno.h 83* @par 依赖: 84* @li hi_sem.h:Describes the semaphore APIs.CNcomment:文件用于描述信号量相关接口。CNend 85* @see hi_sem_delete。 86*/ 87hi_u32 hi_sem_bcreate(hi_u32 *sem_id, hi_u8 init_value); 88 89/** 90* @ingroup iot_sem 91* @brief Deletes the semaphore.CNcomment:删除信号量。CNend 92* 93* @par 描述: 94* Deletes the semaphore.CNcomment:删除信号量。CNend 95* 96* @attention The blocking mode (permanent blocking or timing blocking) of the semaphore application operation cannot 97* be used in the interrupt, and the interrupt cannot be blocked.CNcomment:信号量申请操作的阻塞模式 98(永久阻塞和定时阻塞)不能在中断中使用,中断不能被阻塞。CNend 99* 100* @param sem_id [IN] type #hi_u32,semaphore ID.CNcomment:信号量ID号。CNend 101* 102* @retval #0 Success. 103* @retval #Other Failure, for details, see hi_errno.h 104* @par 依赖: 105* @li hi_sem.h:Describes the semaphore APIs.CNcomment:文件用于描述信号量相关接口。CNend 106* @see hi_sem_bcreate。 107*/ 108hi_u32 hi_sem_delete(hi_u32 sem_id); 109 110/** 111* @ingroup iot_sem 112* @brief Obtains the semaphore.CNcomment:获取信号量。CNend 113* 114* @par 描述: 115* Obtains the semaphore.CNcomment:获取信号量。CNend 116* 117* 118* @attention The blocking mode (permanent blocking or timing blocking) of the semaphore application operation cannot 119* be used in the interrupt, and the interrupt cannot be blocked.CNcomment:信号量申请操作的阻塞模式 120(永久阻塞和定时阻塞)不能在中断中使用,中断不能被阻塞。CNend 121* 122* @param sem_id [IN] type #hi_u32,semaphore ID.CNcomment:信号量ID号。CNend 123* @param timeout_ms [IN] type #hi_u32,timeout period (unit: ms). HI_SYS_WAIT_FOREVER indicates permanent wait. 124CNcomment:超时时间(单位:ms),HI_SYS_WAIT_FOREVER为永久等待。CNend 125* 126* @retval #0 Success. 127* @retval #Other Failure, for details, see hi_errno.h 128* @par 依赖: 129* @li hi_sem.h:Describes the semaphore APIs.CNcomment:文件用于描述信号量相关接口。CNend 130* @see hi_sem_signal。 131*/ 132hi_u32 hi_sem_wait(hi_u32 sem_id, hi_u32 timeout_ms); 133 134/** 135* @ingroup iot_sem 136* @brief Releases the semaphore.CNcomment:释放信号量。CNend 137* 138* @par 描述: 139* Releases the semaphore.CNcomment:释放信号量。CNend 140* 141* @attention The blocking mode (permanent blocking or timing blocking) of the semaphore application operation cannot 142* be used in the interrupt, and the interrupt cannot be blocked.CNcomment:信号量申请操作的阻塞模式 143(永久阻塞和定时阻塞)不能在中断中使用,中断不能被阻塞。CNend 144* 145* @param sem_id [IN] type #hi_u32,semaphore ID.CNcomment:信号量ID号。CNend 146* 147* @retval #0 Success. 148* @retval #Other Failure, for details, see hi_errno.h 149* @par 依赖: 150* @li hi_sem.h:Describes the semaphore APIs.CNcomment:文件用于描述信号量相关接口。CNend 151* @see hi_sem_wait。 152*/ 153hi_u32 hi_sem_signal(hi_u32 sem_id); 154 155#endif 156 157