相關的include文件
在/src/arch/include/arch 目錄下的cc.h、cpu.h、perf.h中有一些與CPU或編譯器相關的定義,如數據長度、字的高低位順序等,這應該與用戶實現mC/OS-II時定義的數據長度等參數一致。一般情況下C語言的結構體struct是4字節對齊的,但是在處理數據包的時候,LwIP是通過結構體中不同數據的長度來讀取相應數據的,所以,一定要在定義struct的時候使用_packed關鍵字,讓編譯器放棄struct的字節對齊。
sys_arch操作系統相關部份
sys_arch. [ch]中的內容是與操作系統相關的一些結構和函數。mC/OS-II實現了消息隊列結構OSQ及其操作,但沒有對消息隊列中的消息進行管理,因此不能直接使用,必須重新實現。對隊列本身的管理可利用mC/OS-II自己的OSQ操作完成,然后使用mC/OS-II中的內存管理模塊實現對消息的創建、使用、刪除回收,兩部分綜合起來即可形成LwIP的消息隊列功能。
sys_thread_new 創建新線程
在mC/OS-II 中,沒有線程(thread)的概念,只有任務(Task)。它已經提供了創建新任務的系統API調用OSTaskCreate,因此只要把 OSTaskCreate封裝一下,就可以實現sys_thread_new。需要注意的是LwIP中的thread并沒有mC/OS-II中優先級的概念,實現時要由用戶事先為LwIP中創建的線程分配好優先級。
lib_arch中庫函數的實現
LwIP協議棧中用到了8個外部函數,這些函數通常與用戶使用的系統或編譯器有關,因此應由用戶自己實現。
LwIP的設備驅動程序接口
LwIP與PPP的程序結構簡要描述如下:
#define NTHREADS 3
#define STACKSIZE( CYG NUM_HAL_STACK_SIZE_TYPICAL + 4096 )
#define NTHREADS 3
#define STACKSIZE ( CYG NUM_HAL_STACK_SIZE_TYPICAL + 4096 )
err = cyg_io_lookup( "/dev/ser1", &handle1 );
if (ENOERR == err) {
middleblink();
} else {
leftblink();
};
pppInit();
pppSetAuth(PPPAUTHTYPE_ PAP," pppuser","pppassword");
pd=pppOpen(handle1,ppp LinkStatus Callback,NULL);
void pppLinkStatusCallback (void * ctx, int errCode, void * arg) {
skipblink();
}
結語
本設計有機地結合了嵌入式終端設備和無線傳輸,符合嵌入式和無線網絡結合的發展趨勢。同時,這一接口設計也對其它視頻監控系統的發展起到一定的借鑒意義。