forked from zzzdaxia/Zdx_Library
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Zdx_Library.h
185 lines (129 loc) · 5.4 KB
/
Zdx_Library.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
/**
******************************************************************************
* @file Library 头文件
* @author 周大侠
* @version V1.0
* @date 2020-8-15 14:58:34
* @brief 周大侠 常用库
******************************************************************************
* @attention
******************************************************************************
*/
#ifndef _ZDX_LIBRARY_H_
#define _ZDX_LIBRARY_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//硬件版本号
#define HARDWARE_VERSION "VER123T"
//软件版本号
#define SOFTWARE_VERSION "20200815_ZDX"
//阶段版本号
#if (TEST_MODE ) || ( OPEN_WATCH_DOG)
#define PHASE_VERSION "_Test";
#else
#define PHASE_VERSION "_Beta";
#endif
#define VERSION_NAME_MAX_SIZE 32U
typedef signed int int32_t;
typedef unsigned int uint32_t;
typedef signed short int16_t;
typedef unsigned short uint16_t;
typedef signed char int8_t;
typedef unsigned char uint8_t;
#ifndef TRUE
#define TRUE (1)
#define FALSE (0)
#endif
#define ZDX_TASK //无操作系统下的分时调度
#define ZDX_QUEUE //队列管理
#define ZDX_RING_REDIS //环形缓存
#define ZDX_MEMORY //内存管理
#define DEBUG_PRINT(...) //printf
#define _OFFSETOF(TYPE, MEMBER) ((long)(&(((TYPE *)0)->MEMBER)))
#define ARRAY_LEN(ARRAY_NAME) (sizeof(ARRAY_NAME) / sizeof(ARRAY_NAME[0]))//求数组成员个数
#define GET_ARRAY_TAIL_ADDR(ARRAY_NAME) ((void*)((char*)(&(ARRAY_NAME) + 1 ) - 1))//获取数组结尾地址, 注意类型
#define GET_ARRAY_LAST_ELEMENT_ADDR(ARRAY_NAME,_TYPE_) (((_TYPE_*)(&(ARRAY_NAME) + 1 ) - 1))//获取数组最后一个元素地址
#define SET_BIT(_Val_,_Bit_) ((_Val_) |= (1 << (_Bit_)))
#define CLEAN_BIT(_Val_,_Bit_) ((_Val_) &= (~(1 << (_Bit_))))
#define GET_BIT(_Val_,_Bit_) (((_Val_) >> (_Bit_)) & 0x0001)
#define BigLittleSwap16(_16t_) ((((uint16_t)(_16t_) & 0xff00) >> 8) | \
(((uint16_t)(_16t_) & 0x00ff) << 8))
#define BigLittleSwap32(_32t_) ((((uint32_t)(_32t_) & 0xff000000) >> 24) | \
(((uint32_t)(_32t_) & 0x00ff0000) >> 8) | \
(((uint32_t)(_32t_) & 0x0000ff00) << 8) | \
(((uint32_t)(_32t_) & 0x000000ff) << 24))
#ifdef ZDX_TASK
#define TASK_AMOUNT_MAX (10U) // 最大任务数量
#define TASK_NAME_LEN_MAX (20U) // 任务名最大长度
#define TEST_TASK_PERIOD (10U)
#define TEST_TASK_DELAY_MS(_ms_) (((_ms_) > TEST_TASK_PERIOD) ? ((_ms_) / TEST_TASK_PERIOD -1) : 0)
typedef uint32_t task_t;//任务控制块
typedef enum
{
TASK_IDLE = 0,//空闲
TASK_Resume = 1,//运行中
TASK_ready = 2,//准备中
TASK_Suspend = 3,//挂起
}cmTask_status;//任务状态
typedef struct
{
uint32_t timeOutCnt;//任务计数重载值
uint32_t timeOut;//任务计数值
void* (*Task_func)(void *arg);//任务函数指针
void *par ;//任务函数参数
cmTask_status status;// 任务状态
char name[TASK_NAME_LEN_MAX];
}ScmTask_info;//单任务信息
typedef struct
{
uint32_t Task_now;
ScmTask_info Task_queue[TASK_AMOUNT_MAX];
}Sys_Task;//任务表
int Task_create(char* TaskName ,task_t *task ,void *(*start_routine)(void *arg) ,void *par ,uint32_t period);
void Task_cancel(task_t* task);
void Task_reckon_time(void);
void Task_scheduling (void);
#endif
#ifdef ZDX_QUEUE
#define QUEUE_DATA_LEN_MAX (128U) //队列数据最大长度
#define QUEUE_AMOUNT_MAX (32U) //队列最大长度
typedef struct
{
char data[QUEUE_DATA_LEN_MAX];
uint32_t len;
}ScmQueue_data;
typedef struct
{
//mutex_t clock; //互斥锁
uint32_t Queue_sum;
uint32_t Queue_new;
ScmQueue_data List[QUEUE_AMOUNT_MAX];
}ScmQueue_info;
//队列管理
int Queue_init(ScmQueue_info *p_Queue);
int Queue_add(ScmQueue_info *p_Queue, void* pData, uint32_t uSize);
int Queue_del(ScmQueue_info *p_Queue);
uint32_t Queue_get(ScmQueue_info *p_Queue, char** pData);
#endif
#ifdef ZDX_RING_REDIS
typedef struct
{
//mutex_t clock; //互斥锁
uint32_t validLen;//已使用的数据长度
uint32_t RingSize;//缓冲区总大小
char* pHead;//环形存储区的首地址
char* pTail;//环形存储区的结尾地址
char* pValid;//已使用的缓冲区的首地址
char* pValidTail;//已使用的缓冲区的尾地址
}ScmRingBuff;
int initRingbuffer(ScmRingBuff* pRing ,uint32_t size);
int wirteRingbuffer(ScmRingBuff* pRing,char* buffer,uint32_t addLen);
int readRingbuffer(ScmRingBuff* pRing,char* buffer,uint32_t len);
int releaseRingbuffer(ScmRingBuff* pRing);
#endif
#ifdef ZDX_MEMORY
void* aligned_malloc(size_t required_bytes, size_t alignment);
void aligned_free(void* r);
#endif
#endif