新聞中心

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

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

作者: 時(shí)間: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è)計(jì)與實(shí)現(xiàn)

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

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

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

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

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

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

對(duì)PPP模塊任務(wù)來說,通過OSSemPend()函數(shù)等待由Modem中斷服務(wù)程序發(fā)出的信號(hào)量,當(dāng)接收到這個(gè)信號(hào)量后,說明有事件發(fā)生;再次判斷這個(gè)事件是什么事件,若是接送事件,則調(diào)用Receive()接收PPP數(shù)據(jù)幀,放到SRAM接收緩沖區(qū),若接收后,判斷接收緩沖區(qū)是否正確地接收到數(shù)據(jù),若正確地接收到PPP數(shù)據(jù)幀時(shí),則調(diào)用PPPInput()進(jìn)行對(duì)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

評(píng)論


相關(guān)推薦

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

關(guān)閉