博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GateWay程序分析_主函数_02整体流程
阅读量:6518 次
发布时间:2019-06-24

本文共 2493 字,大约阅读时间需要 8 分钟。

 

 

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什么意思?

 

 

一直听的一首歌:

转载地址:http://ptofo.baihongyu.com/

你可能感兴趣的文章
数据库设计 Step by Step (6) —— 提取业务规则
查看>>
Redis客户端redisson实战
查看>>
连接到 JasperReports Server
查看>>
java处理高并发高负载类网站问题
查看>>
使用C#生成随机密码(纯数字或字母)和随机卡号(数字与字母组合)
查看>>
CAS服务器端集群
查看>>
JAVA Collections框架
查看>>
进制转换
查看>>
ASCII码
查看>>
java常用四种排序源代码
查看>>
win7 下硬盘安装Redhat7
查看>>
Redis 分布式锁的正确实现方式
查看>>
程序猿知道英语词汇
查看>>
数据存储(两)--SAX发动机XML记忆(附Demo)
查看>>
谈谈SQL 语句的优化技术
查看>>
深入分析面向对象中的封装作用
查看>>
深刻理解Python中的元类(metaclass)
查看>>
Android View体系(六)从源码解析Activity的构成
查看>>
fnmatch源码阅读
查看>>
U9249 【模板】BSGS
查看>>