GateWay程序分析_主函数_02整体流程
int main (void)
{//系统初始化
SystemInit();// IOCON使能 GPIO使能
SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_IOCON, ENABLE);SYS_ConfigAHBCLK(SYS_AHBCLKCTRL_GPIO0, ENABLE);
//看门狗初始化,启动看门狗
WDTInit();
WDTStart();
//如果Flash为空,标志置位,否则标志为假,直接读取IP,端口号,电话号码,节点信息
if(IAP_FlashBlankCheck() == true){
SectorBlankMark = true;
}
else{
SectorBlankMark = false;
IAP_Read_IP();
IAP_Read_Phone();
IAP_Read_Node_Info();
}
//按键初始化,LED初始化,串口初始化,定时器初始化.ZigBee初始化,喂狗
HalKeyInit();
HalLedInit();
uartInit();
Timer32Init(2000);
InitZigBee();
WDTFeed();//EM310复位,喂狗 (EM310复位需要较长的时间,在复位前后均进行了一次喂狗)
HalResetEM310();
WDTFeed();//等待EM310就绪,
WaitEM310Ready();
if(InitEM310() == false)
while(1);//EM310就绪后1.LED眨眼,想手机发送就绪状态.
HalLedBlink(HAL_LED_ALL, 3, 100, 200);
SendMeg(REPORT_READY_NUM,"Ready to connect to server!");
DelayMS(500);
//死循环里有四个分支:
while(1) {//分支1: 按键事件:----------------处理按键,然后喂狗.
if(KeyState & KEY_MASK){
ProcessKey();
WDTFeed();
}
//分支2:响铃事件---------------------处理短信|电话,然后喂狗.
//if(RING_MARK){
ProMegOrCall();
WDTFeed();
//}//分支3:GPRS连接-----------------------串口:来自ZigBee|GPRS发到ZigBee
//问题是:这里的GPRS有两个方向?GprsRevData,GprsRevLeftData
if(GPRS_STATE == GPRS_CONNECT_STATE){
Gprs_Buf.dLength = uart0FIFOGets(Gprs_Buf.Buffer,2,MAX_UART0_BUFFER_SIZE);
if (Gprs_Buf.dLength > 0){
HalLedBlink(HAL_LED_2, 1, 50, 100);
ProInfoFromZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength);
WDTFeed();
}
Gprs_Buf.dLength = GprsRevData(Gprs_Buf.Buffer,2);
if (Gprs_Buf.dLength > 0){
HalLedBlink(HAL_LED_3, 1, 50, 100);
ProInfoToZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength);
WDTFeed();
}
Gprs_Buf.dLength = GprsRevLeftData(Gprs_Buf.Buffer);
if (Gprs_Buf.dLength > 0){
HalLedBlink(HAL_LED_2|HAL_LED_3, 1, 50, 100);
ProInfoToZigBee((uint8 *)Gprs_Buf.Buffer,Gprs_Buf.dLength);
WDTFeed();
}
}else if(GPRS_STATE == GPRS_DISCONNECT_STATE)
HalLedBlink(HAL_LED_ALL,1,20,500);
//分支4:定时器中断----------------保存节点信息.
if(Timer32IntMark == true){
Timer32IntMark = false;
IAP_SaveNodeInfo();
}
WDTFeed(); //喂狗----不停的喂狗}
}
总结下总体的流程
1.系统初始化
2.外设时钟使能:IOCON,GPIO0
3.看门狗初始化,启动看门狗
4.读取ip,电话号码,节点信息
4.按键.LED,串口,定时器.ZigBee初始化
5.喂狗
6.EM310复位,喂狗,等待EM310初始化完成.
7.EM310初始化完成
8死循环:
- 分支1: 按键事件:----------------处理按键,然后喂狗.
- 分支2:响铃事件---------------------处理短信|电话,然后喂狗.
- 分支3:GPRS连接-----------------------串口:来自ZigBee|GPRS发到ZigBee
- 分支4:定时器中断----------------保存节点信息.
- 喂狗
究竟有哪些事情要做?
按键---->复位LPC
短信|电话---->配置网关
定时器中断--->保存节点信息
==>重点是: PRS
在GPRS分支里,所有数据放到Gprs_Buf.Buffer里
从串口FIFO里接收到数据
从GprsRevData接收数据
从GprsRevLeftData接收数据.
//问题是:这里的GPRS有两个方向?GprsRevData,GprsRevLeftData什么意思?
一直听的一首歌: 岛歌