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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 輕型PPP協(xié)議在μC/OS-II操作系統(tǒng)中的實現(xiàn)

          輕型PPP協(xié)議在μC/OS-II操作系統(tǒng)中的實現(xiàn)

          作者: 時間:2012-03-21 來源:網(wǎng)絡(luò) 收藏

          OS_CPU_C.C中斷服務(wù)子程序的算法如下:

          void XxxISR(void)

          {OS_ENTER_CRITICAL()或直接給變量OSIntSum賦1;

          清除中斷源(與具體的外設(shè)有關(guān));

          通知中斷控制器中斷結(jié)束:VICVectAddr=0;

          開中斷:OS_EXIT_CRITICAL();

          用戶處理程序;}

          OS_CPU_C.C中任務(wù)堆棧的初始化函數(shù)OSTaskStkInit()

          OS_STK *OSTaskStkInit()

          {模擬帶參數(shù)(pdata)的函數(shù)調(diào)用;

          模擬ISR向量;

          按照預(yù)先所設(shè)定的寄存器值初始化堆棧結(jié)構(gòu);

          返回棧頂指針給調(diào)用該函數(shù)的函數(shù);}

          3 輕型協(xié)議的設(shè)計與實現(xiàn)

          協(xié)議軟件模塊主要通過各層協(xié)商機制完成數(shù)據(jù)鏈路的建立、配置、測試、以及在鏈路連接建立后,將收到的數(shù)據(jù)幀解析,根據(jù)協(xié)議字段將數(shù)據(jù)信息交由不同的上層模塊進行處理;同時可根據(jù)系統(tǒng)的需要,將上層模塊傳來的信息打包成不同的PPP數(shù)據(jù)幀發(fā)送出去。

          Main主模塊:該模塊控制著整個PPP守護進程的程序流程。當(dāng)PPP連接成功后,它使PPP守護進程進入休眠狀態(tài),一直到管理員斷開或者外部事件引起斷開時它負責(zé)斷開PPP連接。在PPP成功建立連接后,建立一個信號量,由PPP模塊處理任務(wù)不斷檢測這個信號量;若檢測到有調(diào)制解調(diào)器中斷復(fù)服務(wù)程序發(fā)來的信號量,則進行PPP數(shù)據(jù)幀的發(fā)送或接收。

          LCP模塊:該階段是通過交換配置數(shù)據(jù)包來建立和配置數(shù)據(jù)鏈路,發(fā)送LCP REQ數(shù)據(jù)包,將會收到客戶端的發(fā)送過來的LCP ACK數(shù)據(jù)包,客戶端還要回REQ數(shù)據(jù)包,服務(wù)器端接受到LCP REQ后,則向客戶端同樣發(fā)送一個LCP ACK數(shù)據(jù)包,至此鏈路協(xié)商正式結(jié)束。

          認證協(xié)商模塊(PAP):認證階段是可選的,如果在鏈路建立協(xié)商階段,服務(wù)器發(fā)送的第一個LCP REQ數(shù)據(jù)包中含有了認證的數(shù)據(jù)選項,而且其數(shù)據(jù)選項一直沒有被對方拒絕并且得到確認,則進入認證協(xié)商階段;否則,進入網(wǎng)絡(luò)層協(xié)商階段。

          網(wǎng)絡(luò)層協(xié)商模塊(NCP):NCP協(xié)商的主要目的是服務(wù)器首先讓客戶端確認自身的IP地址,然后給客戶端動態(tài)分配一個合法的IP地址。網(wǎng)絡(luò)層協(xié)商 NCP每次請求數(shù)據(jù)包必須含有服務(wù)器端的IP選項,并且此選項最終被確認。在客戶端回送了對服務(wù)器端的確認數(shù)據(jù)包后,開始進入客戶端向服務(wù)器端申請動態(tài)分配IP地址的階段,所以客戶端繼續(xù)向服務(wù)器端發(fā)送含有客戶端IP地址且值為0的NCP REQ數(shù)據(jù)包,服務(wù)器端接受到這個數(shù)據(jù)包后,從IP地址池中取出一個合法的IP地址,發(fā)送了一個NCP NAK數(shù)據(jù)包。在該數(shù)據(jù)包中,客戶端IP地址的數(shù)據(jù)選項中填入了從IP地址池中取出的IP地址的值,即給客戶端動態(tài)的分配IP地址的值。隨后,客戶端將接收到的NCP NAK中的IP地址值作為下一次回送的NCP REQ中的客戶端的IP地址值的選項。當(dāng)服務(wù)器端再接收到此NCP REQ數(shù)據(jù)包后,便發(fā)送NCP ACK數(shù)據(jù)包,至此整個PPP協(xié)商過程結(jié)束,鏈路建立成功。

          PPP模塊:在協(xié)商好網(wǎng)絡(luò)協(xié)議,可以進行數(shù)據(jù)的傳輸。為了更實時的進行數(shù)據(jù)傳輸,在這里為PPP協(xié)議模塊建立一個信號量,當(dāng)發(fā)生modem接受事件時,當(dāng)Modem接收到數(shù)據(jù)時引發(fā)處理器的外部中斷。在外部中斷0處理函數(shù)中,將接收到的數(shù)據(jù)存入串口緩沖區(qū)中,如果緩沖區(qū)的數(shù)據(jù)已組成了一個完整的 PPP數(shù)據(jù)幀,則由中斷服務(wù)子程序通過μC/OS-II所提供的OSSemPost()向任務(wù)PPP模塊任務(wù)發(fā)送一個信號量。

          對PPP模塊任務(wù)來說,通過OSSemPend()函數(shù)等待由Modem中斷服務(wù)程序發(fā)出的信號量,當(dāng)接收到這個信號量后,說明有事件發(fā)生;再次判斷這個事件是什么事件,若是接送事件,則調(diào)用Receive()接收PPP數(shù)據(jù)幀,放到SRAM接收緩沖區(qū),若接收后,判斷接收緩沖區(qū)是否正確地接收到數(shù)據(jù),若正確地接收到PPP數(shù)據(jù)幀時,則調(diào)用PPPInput()進行對PPP數(shù)據(jù)幀的解析。若幀類型是IP則調(diào)用IP數(shù)據(jù)包的處理例程;若幀類型是LCP則調(diào)用LCP數(shù)據(jù)幀的處理例程;若幀類型是PAP、NCP則分別調(diào)用這兩種類型數(shù)據(jù)包的處理例程。若是發(fā)送事件,則調(diào)用 Send()發(fā)送PPP數(shù)據(jù)幀。



          關(guān)鍵詞: ARM μCOS-II 嵌入式系統(tǒng) PPP

          評論


          相關(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); })();