-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhdefaults.h
316 lines (272 loc) · 7.13 KB
/
hdefaults.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
/***************************************************************
* Name: hdefaults.h
* Purpose: 定义一些默认宏定义及函数
* Author: HYH (hyhsystem.cn)
* Created: 2023-07-14
* Copyright: HYH (hyhsystem.cn)
* License: MIT
**************************************************************/
#ifndef __HDEFAULTS_H_INCLUDED__
#define __HDEFAULTS_H_INCLUDED__
/*
本文件主要定义一些默认相关宏定义及函数。
*/
#include "stdlib.h"
#include "stdint.h"
#include "string.h"
#include "stdbool.h"
//定义操作系统
//RT-Thread
#ifdef __RTTHREAD__
#include "hdefaults/hdefaults_os_rtthread.h"
#ifndef HDEFAULTS_OS_RTTHREAD
#define HDEFAULTS_OS_RTTHREAD 1
#endif // HDEFAULTS_OS_RTTHREAD
#ifndef HDEFAULTS_HAVE_OS
#define HDEFAULTS_HAVE_OS 1
#endif
#endif // __RTTHREAD__
//NuttX
#ifdef __NuttX__
#include "hdefaults/hdefaults_os_nuttx.h"
#ifndef HDEFAULTS_OS_NUTTX
#define HDEFAULTS_OS_NUTTX 1
#endif // HDEFAULTS_OS_NUTTX
#ifndef HDEFAULTS_HAVE_OS
#define HDEFAULTS_HAVE_OS 1
#endif
#endif // __NuttX__
//Windows
//提高windows下的兼容性
#ifdef _WIN32
#ifndef WIN32
#define WIN32 1
#endif // WIN32
#endif // _WIN32
#ifdef __WIN32
#ifndef WIN32
#define WIN32 1
#endif // WIN32
#endif // __WIN32
#ifdef __WIN32__
#ifndef WIN32
#define WIN32 1
#endif // WIN32
#endif // __WIN32__
#ifdef WIN32
#include "hdefaults/hdefaults_os_windows.h"
#ifndef HDEFAULTS_OS_WINDOWS
#define HDEFAULTS_OS_WINDOWS 1
#endif // HDEFAULTS_OS_WINDOWS
#ifndef HDEFAULTS_HAVE_OS
#define HDEFAULTS_HAVE_OS 1
#endif
#endif // WIN32
//(类)unix,注意:Linux也使用此配置。
#ifdef __unix__
#include "hdefaults/hdefaults_os_unix.h"
#ifndef HDEFAULTS_OS_UNIX
#define HDEFAULTS_OS_UNIX 1
#endif // HDEFAULTS_OS_UNIX
#ifndef HDEFAULTS_HAVE_OS
#define HDEFAULTS_HAVE_OS 1
#endif
#endif // __unix__
//linux
#ifdef __linux__
#include "hdefaults/hdefaults_os_linux.h"
#ifndef HDEFAULTS_OS_LINUX
#define HDEFAULTS_OS_LINUX 1
#endif // HDEFAULTS_OS_LINUX
#ifndef HDEFAULTS_HAVE_OS
#define HDEFAULTS_HAVE_OS 1
#endif
#endif
//Android
#ifdef __ANDROID__
#include "hdefaults/hdefaults_os_android.h"
#ifndef HDEFAULTS_OS_ANDROID
#define HDEFAULTS_OS_ANDROID 1
#endif // HDEFAULTS_OS_ANDROID
#ifndef HDEFAULTS_HAVE_OS
#define HDEFAULTS_HAVE_OS 1
#endif
#endif
//Cygwin
#ifdef __CYGWIN__
#include "hdefaults/hdefaults_os_cygwin.h"
#ifndef HDEFAULTS_OS_CYGWIN
#define HDEFAULTS_OS_CYGWIN 1
#endif // HDEFAULTS_OS_CYGWIN
#ifndef HDEFAULTS_HAVE_OS
#define HDEFAULTS_HAVE_OS 1
#endif
#endif // __CYGWIN__
//emscripten
#ifdef __EMSCRIPTEN__
#include "hdefaults/hdefaults_os_emscripten.h"
#ifndef HDEFAULTS_OS_EMSCRIPTEN
#define HDEFAULTS_OS_EMSCRIPTEN 1
#endif // HDEFAULTS_OS_EMSCRIPTEN
#ifndef HDEFAULTS_HAVE_OS
#define HDEFAULTS_HAVE_OS 1
#endif
#endif // __EMSCRIPTEN__
//无操作系统(裸机)
#ifndef HDEFAULTS_HAVE_OS
#include "hdefaults/hdefaults_os_none.h"
#ifndef HDEFAULTS_OS_NONE
#define HDEFAULTS_OS_NONE 1
#endif // HDEFAULTS_OS_NONE
#endif
//判断Libc
//newlib
#ifdef __NEWLIB__
#include "hdefaults/hdefaults_libc_newlib.h"
#ifndef HDEFAULTS_LIBC_NEWLIB
#define HDEFAULTS_LIBC_NEWLIB 1
#endif // HDEFAULTS_LIBC_NEWLIB
#endif // __NEWLIB__
//picolibc
#ifdef __PICOLIBC__
#include "hdefaults/hdefaults_libc_picolibc.h"
#ifndef HDEFAULTS_LIBC_PICOLIBC
#define HDEFAULTS_LIBC_PICOLIBC 1
#endif // HDEFAULTS_LIBC_PICOLIBC
#endif
//mingw
#ifdef __MINGW32__
#include "hdefaults/hdefaults_libc_mingw.h"
#ifndef HDEFAULTS_LIBC_MINGW
#define HDEFAULTS_LIBC_MINGW 1
#endif // HDEFAULTS_LIBC_MINGW
#endif
//msvc
#ifdef _MSC_VER
#include "hdefaults/hdefaults_libc_msvc.h"
#ifndef HDEFAULTS_LIBC_MSVC
#define HDEFAULTS_LIBC_MSVC 1
#endif // HDEFAULTS_LIBC_MSVC
#endif
//glibc
#ifdef __GLIBC__
#include "hdefaults/hdefaults_libc_glibc.h"
#ifndef HDEFAULTS_LIBC_GLIBC
#define HDEFAULTS_LIBC_GLIBC 1
#endif // HDEFAULTS_LIBC_GLIBC
#endif
//musl
#if !defined(__GLIBC__) && !defined(__UCLIBC__) && (defined(HDEFAULTS_OS_EMSCRIPTEN) || defined(__linux__)) && !defined(HDEFAULTS_OS_ANDROID)
#include "hdefaults/hdefaults_libc_musl.h"
#ifndef HDEFAULTS_LIBC_MUSL
#define HDEFAULTS_LIBC_MUSL 1
#endif // HDEFAULTS_LIBC_MUSL
#endif
//uclibc
#ifdef __UCLIBC__
#include "hdefaults/hdefaults_libc_uclibc.h"
#ifndef HDEFAULTS_LIBC_UCLIBC
#define HDEFAULTS_LIBC_UCLIBC 1
#endif // HDEFAULTS_LIBC_UCLIBC
#endif
//armclib
#ifdef __ARMCLIB_VERSION
#include "hdefaults/hdefaults_libc_armclib.h"
#ifndef HDEFAULTS_LIBC_ARMCLIB
#define HDEFAULTS_LIBC_ARMCLIB 1
#endif // HDEFAULTS_LIBC_ARMCLIB
#endif
//iar icc
#ifdef __IAR_SYSTEMS_ICC__
#include "hdefaults/hdefaults_libc_icc.h"
#ifndef HDEFAULTS_LIBC_ICC
#define HDEFAULTS_LIBC_ICC 1
#endif // HDEFAULTS_LIBC_ICC
#endif
//导入配置文件
//导入config.h
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif // HAVE_CONFIG_H
#ifndef hdefaults_xstr
#define hdefaults_xstr(s) hdefaults_str(s)
#endif // hdefaults_xstr
#ifndef hdefaults_str
#define hdefaults_str(s) #s
#endif // hdefaults_str
//导入外部配置,使用命令行定义HBOX_CONFIG_HEADER指定外部配置文件名。
#ifdef HBOX_CONFIG_HEADER
#include hdefaults_xstr(HBOX_CONFIG_HEADER)
#endif
//定义hdefaults_tick_t
#ifdef HDEFAULTS_OS_RTTHREAD
#define hdefaults_tick_t rt_tick_t
#endif // HDEFAULTS_OS_RTTHREAD
#ifdef HDEFAULTS_OS_WINDOWS
#define hdefaults_tick_t DWORD
#endif // HDEFAULTS_OS_WINDOWS
#ifdef HDEFAULTS_OS_UNIX
#include <time.h>
#include <sys/time.h>
#endif // HDEFAULTS_OS_UNIX
#ifndef hdefaults_tick_t
#define hdefaults_tick_t uint32_t
#endif // hdefaults_tick_t
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
/** \brief 获取当前节拍
*
* \return hdefaults_tick_t 当前节拍(毫秒),注意,并非启动时间
*
*/
hdefaults_tick_t hdefaults_tick_get(void);
/** \brief 默认内存分配
*
* \param nBytes size_t 待分配的字节数
* \param usr void* 用户指针(一般不用)
* \return void* 分配的指针
*
*/
void * hdefaults_malloc(size_t nBytes,void *usr);
/** \brief 默认内存释放
*
* \param ptr void* 待释放的指针
* \param usr void* 用户指针(一般不用)
*
*/
void hdefaults_free(void *ptr,void *usr);
/** \brief 互斥锁加锁(默认是通过进出临界区实现,而非直接创建互斥锁)
*
* \param usr void*用户指针(一般不用)
*
*/
void hdefaults_mutex_lock(void *usr);
/** \brief 互斥锁解锁(默认是通过进出临界区实现,而非直接创建互斥锁)
*
* \param usr void*用户指针(一般不用)
*
*/
void hdefaults_mutex_unlock(void *usr);
/*
* hdefaults默认API表
*/
typedef struct hdefaults_api_table
{
hdefaults_tick_t (*tick_get)(void);
void *(*mem_alloc)(size_t,void *);
void (*mem_free)(void *,void *);
void (*mutex_lock)(void *);
void (*mutex_unlock)(void *);
} hdefaults_api_table_t;
/** \brief 默认API表
*
* \return const hdefaults_api_table_t*
*
*/
const hdefaults_api_table_t * hdefaults_get_api_table(void);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // HDEFAULTS_H_INCLUDED