导航

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. 分支1: 按键事件:----------------处理按键,然后喂狗.
  2. 分支2:响铃事件---------------------处理短信|电话,然后喂狗.
  3. 分支3:GPRS连接-----------------------串口:来自ZigBee|GPRS发到ZigBee
  4. 分支4:定时器中断----------------保存节点信息.
  5. 喂狗

究竟有哪些事情要做?

按键---->复位LPC

短信|电话---->配置网关

定时器中断--->保存节点信息

==>重点是: PRS

在GPRS分支里,所有数据放到Gprs_Buf.Buffer里

从串口FIFO里接收到数据

从GprsRevData接收数据

从GprsRevLeftData接收数据.

//问题是:这里的GPRS有两个方向?GprsRevData,GprsRevLeftData什么意思?

总体图

 

 

一直听的一首歌: 岛歌

posted on 2013-04-10 17:18  淅沥枫  阅读(298)  评论(0编辑  收藏  举报