在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 狀態(tài)機(jī)在嵌入式系統(tǒng)中的應(yīng)用

            狀態(tài)機(jī)在嵌入式系統(tǒng)中的應(yīng)用

            作者: 時(shí)間:2011-05-27 來(lái)源:網(wǎng)絡(luò) 收藏
            2.2 短消息的發(fā)送

            本文引用地址:http://www.biyoush.com/article/150700.htm

              對(duì)所有需要發(fā)送到GSM

              Modem的數(shù)據(jù),則通過(guò)UART1發(fā)送緩沖區(qū)來(lái)完成。具體發(fā)送哪些數(shù)據(jù)(讀取/刪除短信、下行功率查詢(xún)、信源信息查詢(xún)、未讀短信查詢(xún))或者緩沖區(qū)的數(shù)據(jù)(短消息發(fā)送緩沖區(qū)、告警上報(bào)發(fā)送緩沖區(qū))由軟件根據(jù)相應(yīng)的來(lái)選擇確定。

              3 設(shè)計(jì)思路的實(shí)現(xiàn)

              3.1 串口1數(shù)據(jù)的發(fā)送

              3.1.1 串口1發(fā)送緩沖區(qū)的數(shù)據(jù)結(jié)構(gòu)

              串口1是否有數(shù)據(jù)需要發(fā)送,由串口1的發(fā)送緩沖區(qū)的來(lái)決定。串口1發(fā)送緩沖區(qū)的數(shù)據(jù)結(jié)構(gòu)定義如下:

              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發(fā)送緩沖區(qū)的。

             ?、?Index成員: 串口1發(fā)送數(shù)據(jù)緩沖區(qū)索引。

             ?、?Len成員: 串口1發(fā)送數(shù)據(jù)緩沖區(qū)中有效數(shù)據(jù)的長(zhǎng)度。

             ?、?Buf成員: 串口1發(fā)送數(shù)據(jù)緩沖區(qū)。

              3.1.2 串口1發(fā)送緩沖區(qū)軟件定時(shí)器

              由于GSM Modem的特性致使串口1不能不間斷地發(fā)送數(shù)據(jù),因此,對(duì)串口1的數(shù)據(jù)發(fā)送設(shè)定一個(gè)軟件定時(shí)器。軟件定時(shí)器用于控制GSM

              Modem是否可以接收來(lái)自串口1的新數(shù)據(jù)。軟件定時(shí)器的結(jié)構(gòu)定義如下:

              typedef struct{

              unsigned char bTimerSt;//軟件定時(shí)器的狀態(tài): Timer_START或Timer_STOP

              unsigned int TimerCtn;//軟件定時(shí)器的計(jì)數(shù)器

              void (*func)(void);//超時(shí)后相應(yīng)的處理功能函數(shù)指針

              }SoftTimer_t;

              ① bTimerSt成員: 用于描述軟件定時(shí)器的狀態(tài)。它有2種狀態(tài):

              ◆ Timer_START——開(kāi)始軟件定時(shí)器;

              ◆ Timer_STOP——停止軟件定時(shí)器。

             ?、?TimerCtn成員: 用于描述軟件定時(shí)器的定時(shí)時(shí)間。它是一個(gè)32位的計(jì)數(shù)器,硬件定時(shí)的基準(zhǔn)時(shí)間為20

              ms(建議設(shè)置在前后臺(tái)主程序循環(huán)1次需要的時(shí)間),因此最大定時(shí)時(shí)間為20 ms×232=85 899 345.92 s。

             ?、?func成員:

              用于描述軟件定時(shí)器超時(shí)需要去處理相應(yīng)事情的函數(shù)。該函數(shù)是在定時(shí)器中斷服務(wù)程序下運(yùn)行的,因此為了減少中斷服務(wù)程序占用CPU的時(shí)間,函數(shù)只作簡(jiǎn)單的狀態(tài)設(shè)置或者清除工作,如函數(shù)Clear_Uart1TxbStBuf。

              void Clear_Uart1TxbStBuf(void){

              Uart1Tx.bStBuf = Uart1_TxBuf_Empty;//設(shè)置串口1發(fā)送緩沖區(qū)為空

              ……

              }

              3.1.3 串口1數(shù)據(jù)發(fā)送狀態(tài)機(jī)

              串口1發(fā)送緩沖區(qū)的成員bStBuf有3種狀態(tài)。

             ?、?Uart1_TxBuf_Rdy: 串口1發(fā)送緩沖區(qū)數(shù)據(jù)準(zhǔn)備好。

             ?、?Uart1_TxBuf_Wait: 串口1發(fā)送緩沖區(qū)數(shù)據(jù)等待。

              ③ Uart1_TxBuf_Empty: 串口1發(fā)送緩沖區(qū)空。

              3種狀態(tài)的轉(zhuǎn)移情況如圖3所示。

              

              圖3 串口1的發(fā)送緩沖區(qū)狀態(tài)機(jī)

              當(dāng)串口1發(fā)送緩沖區(qū)在Uart1_TxBuf_Rdy狀態(tài)下時(shí),軟件可以向串口的發(fā)送緩沖區(qū)中寫(xiě)入數(shù)據(jù)。寫(xiě)入數(shù)據(jù)后,串口1發(fā)送緩沖區(qū)的狀態(tài)將轉(zhuǎn)移到Uart1_TxBuf_Rdy。

              在將需要發(fā)送的數(shù)據(jù)拷貝到串口1發(fā)送緩沖區(qū)后,開(kāi)啟串口1的發(fā)送中斷,軟件將進(jìn)入串口1的發(fā)送中斷服務(wù)程序。這個(gè)中斷服務(wù)程序?qū)z測(cè)串口1發(fā)送緩沖區(qū)的狀態(tài)。如果狀態(tài)為Uart1_TxBuf_Rdy,則說(shuō)明串口1發(fā)送緩沖區(qū)中有數(shù)據(jù)需要發(fā)送,這時(shí)串口1緩沖區(qū)的數(shù)據(jù)通過(guò)串口1的發(fā)送中斷把所有的數(shù)據(jù)發(fā)送給GSM

              Modem。當(dāng)數(shù)據(jù)發(fā)送完畢后,串口1發(fā)送緩沖區(qū)的狀態(tài)將轉(zhuǎn)移到Uart1_TxBuf_Wait狀態(tài),否則,將維持當(dāng)前的狀態(tài)。

              當(dāng)串口1發(fā)送緩沖區(qū)的狀態(tài)在Uart1_TxBuf_Wait狀態(tài)時(shí),它可以有兩條路徑讓串口1發(fā)送緩沖區(qū)的狀態(tài)轉(zhuǎn)移到Uart1_TxBuf_Empty:

              其一是串口1軟件定時(shí)器超時(shí)。

              其二是相應(yīng)的條件成立。如發(fā)送端消息,當(dāng)軟件從串口1的接收緩沖區(qū)中解析出“+CMGSn(1≤n≤255)”信息或者發(fā)送失敗的信息時(shí),串口1發(fā)送緩沖區(qū)的狀態(tài)將轉(zhuǎn)移到Uart1_TxBuf_Empty狀態(tài),同時(shí)停止串口1軟件定時(shí)器;讀短消息收到“+CMGR……”信息。

            linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)


            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉