1 /* 2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 * Description: 线程适配层接口(此文件为DEMO,需集成方适配修改) 15 */ 16 #ifndef HILINK_THREAD_ADAPTER_H 17 #define HILINK_THREAD_ADAPTER_H 18 19 #include <stdint.h> 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 #define HILINK_WAIT_FOREVER 0xFFFFFFFFU 26 27 typedef void* HiLinkTaskId; 28 29 typedef void* HiLinkMutexId; 30 31 typedef void* HiLinkSemId; 32 33 typedef void (*HiLinkTaskEntryFunc)(void *arg); 34 35 typedef enum HiLinkTaskPrio { 36 HILINK_TASK_PRIORITY_MIN = 0, 37 HILINK_TASK_PRIORITY_LOW, 38 HILINK_TASK_PRIORITY_MID, 39 HILINK_TASK_PRIORITY_HIGH, 40 HILINK_TASK_PRIORITY_MAX, 41 /* 避免编译器优化,限制该枚举值为32-bit */ 42 HILINK_TASK_PRIORITY_REVERSED = 0x7FFFFFFF 43 } HiLinkTaskPrio; 44 45 typedef struct HiLinkTaskParam { 46 HiLinkTaskEntryFunc func; 47 HiLinkTaskPrio prio; 48 unsigned int stackSize; 49 void *arg; 50 const char *name; 51 } HiLinkTaskParam; 52 53 /* 54 * 描述:创建线程接口 55 * 参数:param,线程参数 56 * 返回: NULL创建线程失败,其他线程句柄 57 */ 58 HiLinkTaskId HILINK_CreateTask(HiLinkTaskParam *param); 59 60 /* 61 * 描述:挂起线程接口 62 * 参数:handle,挂起线程句柄 63 * 返回:0成功, 其他失败 64 */ 65 int HILINK_ThreadSuspend(HiLinkTaskId handle); 66 67 /* 68 * 描述:恢复线程接口 69 * 参数:handle,恢复线程句柄 70 * 返回:0成功,其他失败 71 */ 72 int HILINK_ThreadResume(HiLinkTaskId handle); 73 74 /* 75 * 描述:删除线程接口 76 * 参数:handle,删除线程句柄 77 */ 78 void HILINK_DeleteTask(HiLinkTaskId handle); 79 80 /* 81 * 描述:获取当前运行线程的句柄 82 * 返回:当前运行线程的句柄 83 */ 84 HiLinkTaskId HILINK_GetCurrentTaskId(void); 85 86 /* 87 * 描述:创建互斥锁 88 * 返回:NULL失败, 其他互斥锁句柄 89 */ 90 HiLinkMutexId HILINK_MutexCreate(void); 91 92 /* 93 * 描述:互斥锁加锁 94 * 参数:mutex,互斥锁 95 * ms,超时时间,为HILINK_WAIT_FOREVER不会超时 96 * 返回:0成功, 其他失败 97 */ 98 int HILINK_MutexLock(HiLinkMutexId mutex, unsigned int ms); 99 100 /* 101 * 描述:互斥锁解锁 102 * 参数:mutex,互斥锁句柄 103 * 返回:0成功,其他失败 104 */ 105 int HILINK_MutexUnlock(HiLinkMutexId mutex); 106 107 /* 108 * 描述:互斥锁释放 109 * 参数:mutex,互斥锁句柄 110 */ 111 void HILINK_MutexDestroy(HiLinkMutexId mutex); 112 113 /* 114 * 描述:创建信号量 115 * 参数:count,指定信号量值的初始值大小 116 * 返回:NULL失败, 其他信号量句柄 117 */ 118 HiLinkSemId HILINK_SemCreate(unsigned int count); 119 120 /* 121 * 描述:信号量的值减1 122 * 参数:handle,信号量句柄 123 * ms,阻塞超时时间,为HILINK_WAIT_FOREVER不会超时 124 * 返回:0表示成功, 其他值表示失败 125 */ 126 int HILINK_SemWait(HiLinkSemId handle, unsigned int ms); 127 128 /* 129 * 描述:信号量的值加1 130 * 参数:handle,信号量句柄 131 * 返回:0表示成功, 其他值表示失败 132 */ 133 int HILINK_SemPost(HiLinkSemId handle); 134 135 /* 136 * 描述:销毁信号量 137 * 参数:handle,信号量句柄 138 */ 139 void HILINK_SemDestroy(HiLinkSemId handle); 140 141 /* 142 * 描述:将进程休眠指定的时间 143 * 参数:ms,休眠的毫秒数 144 * 返回:0成功,其他失败 145 */ 146 int HILINK_MilliSleep(unsigned int ms); 147 148 /** 149 * @brief 让出系统调度以使其他等待线程可以执行 150 */ 151 void HILINK_SchedYield(void); 152 153 #ifdef __cplusplus 154 } 155 #endif 156 157 /* 打开互斥锁检测调试功能 */ 158 #ifdef SUPPORT_MUTEX_DEBUG 159 #include "mutex_debug_utils.h" 160 #endif 161 162 #endif /* HILINK_THREAD_ADAPTER_H */ 163