<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 藍(lán)牙局域網(wǎng)接入點(diǎn)的嵌入式實(shí)現(xiàn)

          藍(lán)牙局域網(wǎng)接入點(diǎn)的嵌入式實(shí)現(xiàn)

          作者: 時間:2011-07-24 來源:網(wǎng)絡(luò) 收藏
          四. 協(xié)議棧的

          本文引用地址:http://www.ex-cimer.com/article/150436.htm

            籃牙協(xié)議棧的設(shè)計(jì)主要包括:結(jié)構(gòu)設(shè)計(jì),重要數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì),任務(wù)的管理,內(nèi)存的管理等等。

            1) 結(jié)構(gòu)設(shè)計(jì):系統(tǒng)采用單進(jìn)程的結(jié)構(gòu),由主程序循環(huán)的調(diào)用幾個任務(wù)。當(dāng)一個任務(wù)執(zhí)行完之后,才會進(jìn)入對下一個任務(wù)的執(zhí)行。任務(wù)的執(zhí)行不影響中斷的產(chǎn)生和中斷服務(wù)程序的調(diào)用,可以保證系統(tǒng)對外部事件的響應(yīng),構(gòu)成典型地前后臺系統(tǒng)。

            2) 重要數(shù)據(jù)結(jié)構(gòu)的確定:根據(jù)對協(xié)議的分析可知,協(xié)議的中心任務(wù)是建立和管理幾個設(shè)備之間的連接,建立通訊鏈路,并借此傳輸數(shù)據(jù)。因此對這種連接的建立,維護(hù)和參數(shù)管理是軟件最基本的功能。根據(jù)規(guī)范中連接的屬性和各種協(xié)議數(shù)據(jù)包的定義,可以確定對應(yīng)的數(shù)據(jù)結(jié)構(gòu)。例如可以用結(jié)構(gòu)l2cap_con來描述邏輯鏈路控制和適配協(xié)議層的對等層間的連接通道。

            struct l2cap_con {

            BD_ADDR remote_bd; /* 6 bytes */

            unsigned short local_cid;

            unsigned short remote_cid;

            int current_state;

            unsigned short psm;

            unsigned short remote_mtu;

            unsigned short flush_timeout;

            …

            };

            其中BD_ADDR是一個6字節(jié)的結(jié)構(gòu),記錄連接中另一方的藍(lán)牙地址,local_cid是邏輯信道本地端設(shè)備信道標(biāo)示符,remote_con是遠(yuǎn)端信道標(biāo)示符,current_state表示目前的連接狀態(tài),psm是協(xié)議/服務(wù)復(fù)用段,remote_mtu是遠(yuǎn)端最大傳輸單位等等。還有其他一些變量用來說明這個連接的一些屬性和狀態(tài)。通過這個數(shù)據(jù)結(jié)構(gòu),可以描述在L2CAP 對等層間的數(shù)據(jù)通道。除了結(jié)構(gòu)l2cap_con之外,還有許多用來描述各層協(xié)議數(shù)據(jù)包屬性的結(jié)構(gòu)也都是系統(tǒng)的核心結(jié)構(gòu),這里不再詳細(xì)列出。

            3) 任務(wù)管理:針對協(xié)議任務(wù)和事件數(shù)量多,并且之間相關(guān)性大的特點(diǎn),使用有限狀態(tài)機(jī)的方法來處理,并采用過程驅(qū)動方案來有限狀態(tài)機(jī),為每個輸入狀態(tài)啟動一個過程。當(dāng)某一個事件發(fā)生時,系統(tǒng)利用當(dāng)前狀態(tài)來選取一個適當(dāng)?shù)膭幼?,該動作處理輸入事件并更新?dāng)前狀態(tài)變量值。如圖四所示是L2CAP的面向連接信道的狀態(tài)機(jī),顯示了由哪一個事件導(dǎo)致狀態(tài)轉(zhuǎn)換,以及在狀態(tài)轉(zhuǎn)換時采取哪一個動作。信道的操作共有七個狀態(tài):關(guān)閉、高層連接請求、L2CAP層連接請求、配置、打開、高層斷開連接請求、L2CAP層斷開連接請求。

            4) 內(nèi)存管理:內(nèi)存管理通常是操作系統(tǒng)的核心任務(wù)之一,由于本系統(tǒng)沒有使用操作系統(tǒng),所以這部分任務(wù)是系統(tǒng)必需而重要的任務(wù)。輸入的數(shù)據(jù)包必須被保存在內(nèi)存中,并將其傳遞給適當(dāng)?shù)娜蝿?wù)作進(jìn)一步的處理。同時,應(yīng)用程序產(chǎn)生的輸出數(shù)據(jù)也必須以數(shù)據(jù)包的形式存儲在內(nèi)存中,并將其傳遞給硬件設(shè)備傳送出去。設(shè)計(jì)要做到快速分配存儲空間,并且避免數(shù)據(jù)包在各層協(xié)議之間移動時的數(shù)據(jù)復(fù)制。針對本系統(tǒng)處理的實(shí)際情況:藍(lán)牙協(xié)議數(shù)據(jù)報只有一些固定的大小的包類型,因此采用系統(tǒng)分配大小固定的緩沖區(qū)的方案。這樣作可以杜絕內(nèi)存碎片。需要緩沖區(qū)的時候,系統(tǒng)調(diào)用allot_bt_buffer函數(shù)。只要緩沖區(qū)分配完成,需要保存的僅僅是指向緩沖區(qū)的指針,所以歸還緩沖區(qū)到空閑緩沖區(qū)列表的時候,系統(tǒng)調(diào)用unallot_bt_buffer,將被釋放的緩沖區(qū)的指針交還給它。采用這種方法,協(xié)議軟件只需傳遞指向該緩沖區(qū)的指針,處理過程統(tǒng)一,并且避免了處理過程中數(shù)據(jù)的移動。

            從一般軟件設(shè)計(jì)分類的角度來看,設(shè)備管理和系統(tǒng)資源管理是操作系統(tǒng)的任務(wù)。在綜合考慮系統(tǒng)簡單性和成本等因素之后,本系統(tǒng)中沒有使用獨(dú)立的實(shí)時操作系統(tǒng),而是由軟件完成部分應(yīng)該由操作系統(tǒng)完成的功能。

            五. 結(jié)束語

            本訪問點(diǎn)已可以應(yīng)用于對機(jī)器人的遠(yuǎn)程訪問上。如果將現(xiàn)有點(diǎn)進(jìn)行適當(dāng)改動和擴(kuò)展,就能其他功能,例如給它擴(kuò)展上一個語音解碼芯片后很容易擴(kuò)展到語言信號的傳輸。

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

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();