首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
状态机在嵌入式系统中的应用
来源:本站整理  作者:佚名  2011-06-01 06:55:14



2.2 短消息的发送

  对所有需要发送到GSM

  Modem的数据,则通过UART1发送缓冲区来完成。具体发送哪些数据(读取/删除短信、下行功率查询、信源信息查询、未读短信查询)或者缓冲区的数据(短消息发送缓冲区、告警上报发送缓冲区)由软件根据相应的状态来选择确定。

  3 设计思路的实现

  3.1 串口1数据的发送

  3.1.1 串口1发送缓冲区的数据结构

  串口1是否有数据需要发送,由串口1的发送缓冲区的状态来决定。串口1发送缓冲区的数据结构定义如下:

  typedef struct{

  unsigned char bStBuf;//bStBuf =

  Uart1_TxBuf_Rdy或者=Uart1_TxBuf_Wait或者=Uart1_TxBuf_Empty

  unsigned short Index;

  unsigned short Len;

  char Buf[270];

  }Uart1Buf_t;

  ① bStBuf成员: 串口1发送缓冲区的状态。

  ② Index成员: 串口1发送数据缓冲区索引。

  ③ Len成员: 串口1发送数据缓冲区中有效数据的长度。

  ④ Buf成员: 串口1发送数据缓冲区。

  3.1.2 串口1发送缓冲区软件定时器

  由于GSM Modem的特性致使串口1不能不间断地发送数据,因此,对串口1的数据发送设定一个软件定时器。软件定时器用于控制GSM

  Modem是否可以接收来自串口1的新数据。软件定时器的结构定义如下:

  typedef struct{

  unsigned char bTimerSt;//软件定时器的状态: Timer_START或Timer_STOP

  unsigned int TimerCtn;//软件定时器的计数器

  void (*func)(void);//超时后相应的处理功能函数指针

  }SOFtTimer_t;

  ① bTimerSt成员: 用于描述软件定时器的状态。它有2种状态:

  ◆ Timer_START——开始软件定时器;

  ◆ Timer_STOP——停止软件定时器。

  ② TimerCtn成员: 用于描述软件定时器的定时时间。它是一个32位的计数器,硬件定时的基准时间为20

  ms(建议设置在前后台系统主程序循环1次需要的时间),因此最大定时时间为20 ms×232=85 899 345.92 s。

  ③ func成员:

  用于描述软件定时器超时需要去处理相应事情的函数。该函数是在定时器中断服务程序下运行的,因此为了减少中断服务程序占用CPU的时间,函数只作简单的状态设置或者清除工作,如函数Clear_Uart1TxbStBuf。

  void Clear_Uart1TxbStBuf(void){

  Uart1Tx.bStBuf = Uart1_TxBuf_Empty;//设置串口1发送缓冲区为空

  ……

  }

  3.1.3 串口1数据发送状态机

  串口1发送缓冲区的成员bStBuf有3种状态。

  ① Uart1_TxBuf_Rdy: 串口1发送缓冲区数据准备好。

  ② Uart1_TxBuf_Wait: 串口1发送缓冲区数据等待。

  ③ Uart1_TxBuf_Empty: 串口1发送缓冲区空。

  3种状态的转移情况如图3所示。

  

  图3 串口1的发送缓冲区状态机

  当串口1发送缓冲区在Uart1_TxBuf_Rdy状态下时,软件可以向串口的发送缓冲区中写入数据。写入数据后,串口1发送缓冲区的状态将转移到Uart1_TxBuf_Rdy。

  在将需要发送的数据拷贝到串口1发送缓冲区后,开启串口1的发送中断,软件将进入串口1的发送中断服务程序。这个中断服务程序将检测串口1发送缓冲区的状态。如果状态为Uart1_TxBuf_Rdy,则说明串口1发送缓冲区中有数据需要发送,这时串口1缓冲区的数据通过串口1的发送中断把所有的数据发送给GSM

  Modem。当数据发送完毕后,串口1发送缓冲区的状态将转移到Uart1_TxBuf_Wait状态,否则,将维持当前的状态。

  当串口1发送缓冲区的状态在Uart1_TxBuf_Wait状态时,它可以有两条路径让串口1发送缓冲区的状态转移到Uart1_TxBuf_Empty:

  其一是串口1软件定时器超时。

  其二是相应的条件成立。如发送端消息,当软件从串口1的接收缓冲区中解析出“+CMGSn(1≤n≤255)”信息或者发送失败的信息时,串口1发送缓冲区的状态将转移到Uart1_TxBuf_Empty状态,同时停止串口1软件定时器;读短消息收到“+CMGR……”信息。

上一页  [1] [2] [3]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:119,628.90000 毫秒