1 內(nèi)存的使用
內(nèi)存要預(yù)先分配好,要注意指針、長度的計算,用完必須釋放。
嵌入式系統(tǒng)要求實時性高,系統(tǒng)一般在初始化時給各模塊分配好內(nèi)存。vxworks有一個內(nèi)存管理策略,類似于BSD4.3(見理查德森編寫的《TCP/IP協(xié)議實現(xiàn)》),基于POOL/MBLK/CBLK三級管理,采用鏈式指針。
內(nèi)存的兩個參數(shù)是起始指針和塊長度,這在編程過程中必須要注意,尤其是成幀、解幀時必須計算好長度,筆者曾少計算兩個字節(jié),結(jié)果導(dǎo)致CRC校驗總出錯,結(jié)果對著1500個字節(jié)的ASCII碼看了五六遍,終于發(fā)現(xiàn)。
內(nèi)存的釋放分為兩類:本模塊的釋放以及其他模塊內(nèi)存的釋放,本模塊釋放時只需要傳送指針即可,但指針必須對準,否則會耗盡內(nèi)存。其他模塊內(nèi)存釋放借助于回調(diào)函數(shù)實現(xiàn),這一般是一個指針函數(shù)。
2 驅(qū)動程序的編寫
驅(qū)動程序編寫其實很簡單,明確它的功能即可。驅(qū)動程序包括兩個部分的功能:I/O控制和數(shù)據(jù)的收發(fā),這部分的接口在vxworks里面以及標準化了,ppc860t帶有兩塊網(wǎng)卡,一個是百兆一個是十兆,兩個驅(qū)動程序不同,都寫的很好,很值得參考,里面包括了對寄存器的控制,數(shù)據(jù)內(nèi)存的管理。一些非標準設(shè)備可以仿效網(wǎng)卡驅(qū)動程序,只要在MUX層下注冊,能交給IP或?qū)?yīng)的程序即可,具體內(nèi)容在下節(jié)介紹。
3 MUX層的使用
MUX層是VXWORKS中的一個關(guān)鍵設(shè)計,MUX層以上是IP,IPX等協(xié)議,以下是各種網(wǎng)卡驅(qū)動協(xié)議,數(shù)據(jù)的上下傳輸都需要經(jīng)過它,協(xié)議和驅(qū)動的對應(yīng)通過綁定實現(xiàn)。MUX層中有兩個重要的模式,精靈模式和混雜模式。精靈模式使得你可以掛進一個鉤子函數(shù),數(shù)據(jù)一到MUX層即被勾住,混雜模式則是所有協(xié)議都不處理時交給該協(xié)議處理。筆者在實現(xiàn)PPPOE時借助于百兆網(wǎng)卡實現(xiàn),首先要剝掉以太網(wǎng)頭,交給對應(yīng)的PPP協(xié)議處理。百兆網(wǎng)的驅(qū)動是現(xiàn)成的,不想改也不好改。于是在MUX層想辦法,通過在MUX層注冊一個PPPOE的精靈程序,在IP之前勾住百兆網(wǎng)上傳的數(shù)據(jù),解幀后交給PPP,PPP解幀后再通過MUX層交給IP。精靈程序的另一個好處是實現(xiàn)防火墻。
4 編程的習(xí)慣
注釋很重要,信號量、內(nèi)存等必須注意釋放。
|