📄 message_storage.h
字号:
#ifndef _MES_STOR
#define _MES_STOR
#include "modbus_client.h"
#define ERROR 0
#define OK 1
//----循环队列------
#define MAXQSIZE0 3
#define MAXDATASIZE0 30
#define MAXQSIZE1 3
#define MAXDATASIZE1 30
#define MAXQSIZE2 3
#define MAXDATASIZE2 30
BYTE Data_Buffer0[MAXQSIZE0][MAXDATASIZE0]; //
BYTE *Uart_buf0[MAXQSIZE0] =
{Data_Buffer0[0],Data_Buffer0[1],Data_Buffer0[2]/*,
Data_Buffer0[3],Data_Buffer0[4]*/};
//缓冲区
BYTE Data_Buffer1[MAXQSIZE1][MAXDATASIZE1]; //
BYTE *Uart_buf1[MAXQSIZE1] =
{Data_Buffer1[0],Data_Buffer1[1],Data_Buffer1[2]/*,
Data_Buffer1[3],Data_Buffer1[4]*/};
//缓冲区
BYTE Data_Buffer2[MAXQSIZE2][MAXDATASIZE2]; //
BYTE *Uart_buf2[MAXQSIZE2] =
{Data_Buffer2[0],Data_Buffer2[1],Data_Buffer2[2]/*,
Data_Buffer2[3],Data_Buffer2[4]*/};
//缓冲区
typedef struct _BUF_QUEUE
{
BYTE front;
//头
BYTE rear;
//尾
BYTE **UART_BUF;
/*BYTE *DATA_BUF;*/
BYTE Max_que_size;
BYTE Max_data_size;
}BUF_QUEUE;
BUF_QUEUE EQU_sto[MAX_EQU_NUM] =
{
{0,0,Uart_buf0,/*Data_Buffer0,*/MAXQSIZE0,MAXDATASIZE0},
{0,0,Uart_buf1,/*Data_Buffer1,*/MAXQSIZE1,MAXDATASIZE1},
{0,0,Uart_buf2,/*Data_Buffer2,*/MAXQSIZE2,MAXDATASIZE2}
};
//--------循环对列的基本操作---------
void InitQueue(BYTE EUQ_num)
//初始化循环队列
{
EQU_sto[EUQ_num].front = EQU_sto[EUQ_num].rear = 0;
}
BYTE QueueLenth(BYTE EUQ_num)
//当前队列报文的个数
{
return (EQU_sto[EUQ_num].rear -
EQU_sto[EUQ_num].front +
EQU_sto[EUQ_num].Max_que_size)
% EQU_sto[EUQ_num].Max_que_size;
}
BYTE WrQueue(BYTE *e,BYTE EUQ_num,BYTE len)
//向队列中写入元素e
{
BYTE i;
if((EQU_sto[EUQ_num].rear + 1) % EQU_sto[EUQ_num].Max_que_size ==
EQU_sto[EUQ_num].front)
//队列满
return ERROR;
*(*(EQU_sto[EUQ_num].UART_BUF + EQU_sto[EUQ_num].rear)) = len;
//第0个节存放长度
for(i = 0;i < len; i ++)
{
*(*(EQU_sto[EUQ_num].UART_BUF + EQU_sto[EUQ_num].rear) + i + 1) = *(e + i);
//从第一个字节开始存放
}
EQU_sto[EUQ_num].rear = (EQU_sto[EUQ_num].rear + 1) % EQU_sto[EUQ_num].Max_que_size;
return OK;
}
BYTE ReQueue(BYTE *e,BYTE EUQ_num)
//从队列中读出元素
{
BYTE i,len;
if(EQU_sto[EUQ_num].front == EQU_sto[EUQ_num].rear)return ERROR;
len = **(EQU_sto[EUQ_num].UART_BUF + EQU_sto[EUQ_num].front);
for(i = 0;i < len;i++)
*(e + i)= *(*(EQU_sto[EUQ_num].UART_BUF + EQU_sto[EUQ_num].front) + i + 1);
// Uart_buf[front] = 0;
EQU_sto[EUQ_num].front = (EQU_sto[EUQ_num].front + 1) % EQU_sto[EUQ_num].Max_que_size;
return OK;
}
//----------------------------------------------------------
void message_storage(BYTE *,BYTE,BYTE);
void message_read(BYTE *,BYTE);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -