⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inforec.c

📁 lpc2136芯片的硬件全部功能示例程序
💻 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 + -