📄 main.c
字号:
** 功能描述: 规约任务存储空间重新分配。
**
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void TaskTaskMemSet(void *pdata)
{
pdata = pdata;
fat_sram1();
while(1)
{
if(Task_Set_Flag) //有任务参数发生变化并且2分钟定时时间到
{
start_2m = 1;
count_2m = 0;
Task_Set_Flag = 0;
//启动2分钟定时,如果不启动定时,则永远没有定时信号产生;
}
if(count_2m==120) //在2分钟内没有有效任务的配置发生变化
{
fat_sram1();
count_2m=0;
start_2m=0;
}
OSTimeDly(20);
}
}
/*********************************************************************************************************
** 函数名称: TaskAlarmTask
** 功能描述: 异常处理任务。
**
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void TaskAlarmTask (void *pdata)
{
pdata = pdata;
while(1)
{
OSTimeDly(100);
}
}
/*********************************************************************************************************
** 函数名称: TaskProgmDown
** 功能描述: 程序下载处理任务。
**
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void TaskProgmDown (void *pdata)
{
pdata = pdata;
while(1)
{
OSTimeDly(100);
}
}
/*********************************************************************************************************
** 函数名称: TaskPassDay
** 功能描述: 过日处理任务。
**
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void TaskPassDay (void *pdata)
{
INT8U err;
INT32U i;
pdata = pdata;
while(1)
{
OSSemPend(Timer0Sem1,0,&err);
pass_process();
paramback(); // add by liu 2007-10-16 参数备份
//每日0点0分时对上日SRAM1中的任务数据清零
for(i=0;i<128*1024;i++) TaskData[i] = 0;
}
}
/*********************************************************************************************************
** 函数名称: TaskPowerDown
** 功能描述: 掉电处理任务。
**
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void TaskPowerDown (void *pdata)
{
pdata = pdata;
while(1)
{
OSTimeDly(100);
}
}
/*********************************************************************************************************
** 函数名称: TaskLcd
** 功能描述: 显示处理任务。
**
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void TaskLcd (void *pdata)
{
pdata = pdata;
Init_Lcd();
ClrLcd();
BackLedOn;
ShowAllLcd();
while(1)
{
display();
OSTimeDly(1000);
}
}
/*********************************************************************************************************
** 函数名称: TaskParamChk
** 功能描述: 参数校验任务。
**
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void TaskParamChk (void *pdata)
{
pdata = pdata;
while(1)
{
OSTimeDly(100);
}
}
/*********************************************************************************************************
** 函数名称: TaskGprsManage
** 功能描述: GPRS管理任务任务。
**
** 输 入: pdata
** 输 出: 无
********************************************************************************************************/
void TaskGprsManage (void *pdata)
{
uint8 len;
uint8 count;
uint8 i;
uint8 di[2];
uint8 buf[256];
pdata = pdata;
uc_logint = 150;
di[0] = 0x89;
di[1] = 0x02;
if (ReadParam(0, di, buf) != 0)
{
uc_heartp = BCD2HEX(buf[5]);
}
else
{
uc_heartp = 5;
}
uc_loginp = 3;
GprsInitFlag = 1; //
GprsManagPar.gprsok = 0;
GprsManagPar.smsok = 0;
GprsManagPar.heartsp= 0;
GprsManagPar.logsp = 0;
GprsManagPar.heartt = 0;
GprsManagPar.logt = 0;
GprsManagPar.login = 0;
GprsManagPar.on = 0; // 如果GPRS掉电或复位,先拆除连接
GPRSReset(); // 复位
while (ReadGprsBuf()==0) // 等待返回
{
OSTimeDly(400);
}
GprsManagPar.on = 0; // 如果GPRS掉电或复位,先拆除连接
buf[0] = 0x14;
buf[1] = 0xE3;
buf[2] = 0x01;
len = 3;
WriteGprsCmd(buf, len); // 发送登出命令
OSTimeDly(200);
while (ReadGprsBuf()==0) // 等待返回
{
OSTimeDly(400);
}
count = 0;
while (count==0) // 此处用来检测GSM是否登录完成
{
buf[0] = 0x20;
buf[1] = 0xE3;
ReadGprsCmd(buf);
OSTimeDly(200);
//while ((len=ReadGprsBuf())==0);
len = ReadGprsBuf();
if (len!=0)
{
for (i=0;i<len;i++)
{
if (GprsCommBuf[i]==0x68)
{
if ((GprsCommBuf[i+7]==0x68)&&(GprsCommBuf[i+15]==0x16)&&
(GprsCommBuf[i+10]==0x20)&&(GprsCommBuf[i+11]==0xE3))
{
CommFlush(COMM2);
signal = GprsCommBuf[i+12];
count = 1;
break;
}
}
else
{
count = 0;
continue;
}
}
}
OSTimeDly(200);
}
GprsParInit(); // 参数初始化
/*
buf[0] = 0x1B; // 读初始化参数
buf[1] = 0xE3;
ReadGprsCmd(buf);
OSTimeDly(400);
len = ReadGprsBuf();
OSTimeDly(200);
*/
if (GprsManagPar.on==1) // 如果上次是非正常退出
{
GprsInitFlag = 0;
WriteCpuIoStatus(IO_SEL_MODE_DATA);
SendLogOut(); // 发送登出报文
}
GprsManagPar.on = 0;
while(1)
{
GprsInitFlag = 0;
WriteCpuIoStatus(IO_SEL_MODE_DATA);
//if (GPRSIsOnline()==FALSE)
//{
// if (GPRSIsOnline()==FALSE)
// GprsManagPar.on = 0;
//}
if (GprsManagPar.flag == 1) // 如果GPRS参数变化,重新初始化
{
//if (GprsManagPar.on == 1)
//{
// GprsInitFlag = 0;
// WriteCpuIoStatus(IO_SEL_MODE_DATA);
// SendLogOut(); // 发送登出报文
//}
GprsInitFlag = 1;
if (GprsManagPar.login==1) // 如果已经登录
{
buf[0] = 0x14; // 拆除连接
buf[1] = 0xE3;
buf[2] = 0x01;
len = 3;
WriteGprsCmd(buf, len); // 发送登出命令
OSTimeDly(200);
while (ReadGprsBuf()==0) // 等待返回
{
OSTimeDly(200);
}
}
GprsParInit(); // 重新初始化
GprsManagPar.flag = 0;
GprsManagPar.login= 0; // 登出
GprsManagPar.on = 0;
GprsManagPar.heartt = 0;
GprsInitFlag = 0;
if (GprsManagPar.logt<uc_logint) // 未超过登录次数,进行一次登录
{
GprsInitFlag = 1;
buf[0] = 0x14;
buf[1] = 0xE3;
buf[2] = 0x00;
len = 3;
WriteGprsCmd(buf, len); // 发送登录命令
while (ReadGprsBuf()==0)
{
OSTimeDly(100);
}
OSTimeDly(400);
GprsInitFlag = 0;
//while (GPRSIsOnline()==FALSE);
//if (GPRSIsOnline()==TRUE)
{
WriteCpuIoStatus(IO_SEL_MODE_DATA);
SendLogIn(); // 发送登录报文
GprsManagPar.on = 1; // GPRS在线
GprsManagPar.login = 1;
}
GprsManagPar.logt ++;
GprsManagPar.logsp = 0;
GprsManagPar.heartsp = 0;
}
}
if ((GprsManagPar.gprsok==1)&&
(GprsManagPar.on==0)) // 如果GPRS初始化成功但不在线
{
if (GprsManagPar.logt == 0) // 登录次数为0
{
GprsInitFlag = 1;
buf[0] = 0x14;
buf[1] = 0xE3;
buf[2] = 0x00;
len = 3;
WriteGprsCmd(buf, len); // 发送登录命令
while (ReadGprsBuf()==0)
{
OSTimeDly(100);
}
OSTimeDly(400);
GprsInitFlag = 0;
//while (GPRSIsOnline()==FALSE);
//if (GPRSIsOnline()==TRUE)
{
GprsManagPar.on = 1; // GPRS在线
WriteCpuIoStatus(IO_SEL_MODE_DATA);
SendLogIn(); // 发送登录报文
GprsManagPar.login = 1; // 登录
}
GprsManagPar.logt ++;
GprsManagPar.logsp = 0;
GprsManagPar.heartsp = 0;
}
else if (GprsManagPar.logt<uc_logint) // 登录次数小于最大登录次数
{
if (GprsManagPar.logsp >= uc_loginp*60) // 达到登陆间隔
{
GprsInitFlag = 1;
buf[0] = 0x14; // 拆除连接
buf[1] = 0xE3;
buf[2] = 0x01;
len = 3;
WriteGprsCmd(buf, len); // 发送登出命令
OSTimeDly(200);
while (ReadGprsBuf()==0) // 等待返回
{
OSTimeDly(200);
}
buf[0] = 0x14;
buf[1] = 0xE3;
buf[2] = 0x00;
len = 3;
WriteGprsCmd(buf, len); // 发送登录命令
while (ReadGprsBuf()==0)
{
OSTimeDly(100);
}
OSTimeDly(400);
GprsInitFlag = 0;
//while (GPRSIsOnline()==FALSE);
//if (GPRSIsOnline()==TRUE)
{
WriteCpuIoStatus(IO_SEL_MODE_DATA);
SendLogIn(); // 发送登录报文
GprsManagPar.on = 1; // GPRS在线
GprsManagPar.login = 1;
}
GprsManagPar.logt ++;
GprsManagPar.logsp = 0;
GprsManagPar.heartsp = 0;
}
}
else
{
;//GprsManagPar.login = 0;
}
}
if ((GprsManagPar.on==1)&&(uc_heartp!=0)) // 如果心跳周期为0,则不采用心跳
{
if (GprsManagPar.heartt<3) // 如果心跳未应答次数小于3
{
if (GprsManagPar.heartsp>=uc_heartp*60) // 如果心跳周期到,发送心跳报文
{
GprsInitFlag = 0;
WriteCpuIoStatus(IO_SEL_MODE_DATA); // 发送心跳报文
SendHeart();
GprsManagPar.heartt ++; // 此参数在规约解析任务中收到心跳应答报文清0
GprsManagPar.heartsp = 0;
}
}
else
{
GprsInitFlag = 0;
WriteCpuIoStatus(IO_SEL_MODE_DATA);
SendLogOut(); // 发送登出报文
GprsInitFlag = 1;
buf[0] = 0x14; // 拆除连接
buf[1] = 0xE3;
buf[2] = 0x01;
len = 3;
WriteGprsCmd(buf, len); // 发送登出命令
OSTimeDly(200);
while (ReadGprsBuf()==0); // 等待返回
{
OSTimeDly(100);
}
GprsInitFlag = 0;
GprsManagPar.on = 0;
GprsManagPar.login = 0;
GprsManagPar.heartt = 0;
GprsManagPar.logsp = 0;
if (GprsManagPar.logt<uc_logint) // 未超过登录次数
{
GprsInitFlag = 1;
buf[0] = 0x14;
buf[1] = 0xE3;
buf[2] = 0x00;
len = 3;
WriteGprsCmd(buf, len); // 发送登录命令
while (ReadGprsBuf()==0)
{
OSTimeDly(100);
}
OSTimeDly(400);
GprsInitFlag = 0;
//while (GPRSIsOnline()==FALSE);
//if (GPRSIsOnline()==TRUE)
{
WriteCpuIoStatus(IO_SEL_MODE_DATA);
SendLogIn(); // 发送登录报文
GprsManagPar.on = 1; // GPRS在线
GprsManagPar.login = 1;
}
GprsManagPar.logt ++;
GprsManagPar.logsp = 0;
GprsManagPar.heartsp = 0;
}
}
}
OSTimeDly(200); // 1s
}
}
/*********************************************************************************************************
** 函数名称: SystemInit()
** 功能描述: 系统初始化
**
** 输 入:
**
** 输 出:
**
** 全局变量:
** 调用模块:
**
** 作 者:
** 日 期: 2007-09-20
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void SystemInit(void)
{
uint32 i;
uint8 *p,*pp;
//static uint8 dd1,dd2;
//uint8 id[2];
//uint32 offset;
//uint8 attr;
//uint8 bnum;
// 默认参数初始化
SendFseq = 0x01;
CommOverTimes = 0; // 串口超时
CommOverFlag = 0;
//id[0] = 0x00;
//id[1] = 0x03;
//ParamIndex(8, id, &offset, &attr, &bnum);
//pp = &ParamInSram.Term_Par.X8010[0] + offset;
//p = &ParamInSram.Term_Par.X8900[0]; // 测试用
//p= &ParamInSram.Mp_Par[8].X0003[0];
//dd1 = *p;
//dd2 = *pp;
p = &ParamIn.Term_Par.X8010[0]; // 将掉电RAM中参数恢复到内存
pp= &ParamInSram.Term_Par.X8010[0];
for (i=0;i<sizeof(ParamInSram);i++)
{
*p = *pp;
p ++;
pp ++;
}
p = &ParamInSram.Term_Par.X8016[0]; // 初始化终端地址
for (i=0;i<2;i++)
{
TermAddr[1-i] = *p;
p ++;
}
for (i=0;i<2;i++)
{
TermAddr[3-i] = *p;
p ++;
}
p = &ParamInSram.Term_Par.X8021[0]; // 初始化低级权限密码
for (i=0;i<3;i++)
{
UserCode[2-i] = *p;
p ++;
}
p = &ParamInSram.Term_Par.X8022[0]; // 初始化高级权限密码
for (i=0;i<3;i++)
{
AdminCode[2-i] = *p;
p ++;
}
OSTimeSet(0); // 将系统时钟初始化为0
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -