📄 inforec.c
字号:
/*************************************************************
WPD800 装置数据处理
修改历史 2007-10-10 zaken create version 1.0
*************************************************************/
#include "main.h"
#include "string.h"
#include "WPD800.h"
#include "set.h"
#include "timer.h"
#include "inforec.h"
extern BYTE hn94_Event_Tail;
T_EVENT_POOL tEvent_Pool;
T_EVENT_BAK_POOL tEvent_Bak_Pool;//备用事件内存池
T_EVENT_BAK_POOL tEvent_Com_Pool;//通讯事件内存池
T_EVENT_STATUS tEvent_Status;
volatile bool Event_Is_Save;
void Event_Write_Status(void);
//初始化事件
bool Event_Init(void)
{
memset(&tEvent_Pool,0,sizeof(T_EVENT_POOL));
memset(&tEvent_Bak_Pool,0,sizeof(T_EVENT_BAK_POOL));
memset(&tEvent_Com_Pool,0,sizeof(T_EVENT_BAK_POOL));
hn94_Event_Tail=0;//通讯事件处理
Event_Is_Save=FALSE;
//从E2PROM中读取事件状态
//判断事件状态
if(tEvent_Status.Version!=VERSION || tEvent_Status.IedType!=IEDTYPE)
{
tEvent_Status.Version=VERSION;
tEvent_Status.IedType=IEDTYPE;
tEvent_Status.Index=0;
tEvent_Status.RptIndex=0;
//写回E2pROm中
Event_Write_Status();
}
return TRUE;
}
//读取事件状态
void Event_Read_Status(void)
{
}
//写事件状态
void Event_Write_Status(void)
{
tEvent_Status.Version=VERSION;
tEvent_Status.IedType=IEDTYPE;
}
//记录事件到缓冲中,未写入E2PROM
void Event_Record_Event(T_EVENT *pEv)
{
// if(!Event_Is_Save)
// {
tEvent_Pool.Event[tEvent_Pool.Head]=*pEv;
tEvent_Pool.Head++;
if(tEvent_Pool.Head>(INF_MAX_EVENT-1))
{
//覆盖最旧的
tEvent_Pool.Head=0;
Record_Alarm(0);//纪录事件缓冲溢出
}
// }
// else //事件正在存储中,先写到备用缓冲区
// {
// tEvent_Bak_Pool.Head++;
// if(tEvent_Bak_Pool.Head>(INF_MAX_EVENT-1))
// {
//覆盖最旧的
// tEvent_Bak_Pool.Head=0;
// Record_Alarm(0);//纪录事件缓冲溢出
// }
// tEvent_Bak_Pool.Event[tEvent_Bak_Pool.Index]=*pEv;
// }
}
void Event_Process(void)//事件处理
{
T_EVENT *pEv;
static BYTE Head,Tail;
// static BYTE bHead1,bTail1;
//首先判断备用区有没有事件
// bHead1=tEvent_Bak_Pool.Head;
// bTail1=tEvent_Bak_Pool.Tail;
Head=tEvent_Pool.Head;//保存事件指针不被中断破坏
Tail=tEvent_Pool.Tail;
if(Head!=Tail)//如果有事件
{
while(Head!=Tail)
{
pEv=&(tEvent_Pool.Event[Tail]);//取得事件指针
//分发给液晶
//分发给通讯
hn94_Event_Tail=(hn94_Event_Tail+1)%INF_MAX_EVENT;
//存储事件到E2PROM,同时把下一条最旧的事件清掉
//更新事件状态
tEvent_Status.Index=(tEvent_Status.Index+1)%INF_MAX_EVENT;
tEvent_Status.RptIndex=pEv->RptNo;
Tail=(Tail+1)%INF_MAX_EVENT;
}
//写事件状态到E2PROM中
Event_Write_Status();
}
}
//获得缓冲中的事件的指针
T_EVENT *Event_Get_Pool_Event(BYTE index)
{
T_EVENT *pEv;
if(index<INF_MAX_EVENT)
{
pEv=&(tEvent_Pool.Event[index]);
//检查事件是否合法
return pEv;
}
return (T_EVENT *)NULL;
}
//获得Rom中的事件
bool Event_Get_Rom_Event(BYTE index,T_EVENT *pEv)
{
if(index<INF_MAX_EVENT)
{
//读事件
//检查事件是否合法
return TRUE;
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -