IPv6的嵌入式設(shè)計(jì)與實(shí)現(xiàn)
(2) 消息隊(duì)列
消息隊(duì)列用于給任務(wù)發(fā)消息。通過內(nèi)核提供的服務(wù)、任務(wù)或中斷服務(wù)子程序可以將一條消息(該消息的指針)放入消息隊(duì)列。同樣,一個或多個任務(wù)可以通過內(nèi)核服務(wù)從消息隊(duì)列中得到消息。發(fā)送和接收消息的任務(wù)約定,傳遞的消息實(shí)際上是傳遞的指針指向的內(nèi)容。通常,先進(jìn)入消息隊(duì)列的消息先傳給任務(wù)[5],也就是說,任務(wù)先得到的是最先進(jìn)入消息隊(duì)列的消息,即先進(jìn)先出原則(FIFO)。然而,uC/OS-II也允許使用后進(jìn)先出方式(LIFO)。當(dāng)一個以上的任務(wù)要從消息隊(duì)列接收消息時,每個消息隊(duì)列有一張等待消息任務(wù)的等待列表。如果消息隊(duì)列中沒有消息,即消息隊(duì)列是空,等待消息的任務(wù)就被掛起并放入等待消息任務(wù)列表中,直到有消息到來。通常,內(nèi)核允許等待消息的任務(wù)定義等待超時的時間。如果限定時間內(nèi),任務(wù)沒有收到消息,該任務(wù)就進(jìn)入就緒態(tài)并開始運(yùn)行,同時返回出錯代碼,指出出現(xiàn)等待超時錯誤。一旦一則消息放入消息隊(duì)列,該消息將傳給等待消息的任務(wù)中優(yōu)先級最高的那個任務(wù),或是最先進(jìn)入等待消息任務(wù)列表的任務(wù)。
2.3 庫函數(shù)的實(shí)現(xiàn)
IPv6 協(xié)議棧中用到了6 個外部函數(shù),這些函數(shù)通常與用戶使用的系統(tǒng)或編譯器有關(guān)。返回字符串長度、字符串比較、內(nèi)存數(shù)據(jù)塊之間的互相拷貝和內(nèi)存中指定長度的數(shù)據(jù)塊清零,4 個函數(shù)已由ADS1.2 中的運(yùn)行時庫提供,不需要再編寫。因?yàn)榫W(wǎng)絡(luò)數(shù)據(jù)采用的是大端數(shù)據(jù)存儲[6] , 而LPC2210 是工作在小端,所以,在存取網(wǎng)絡(luò)數(shù)據(jù)時要進(jìn)行字節(jié)的交換。下面兩個簡單的函數(shù)需要實(shí)現(xiàn): uintl6 swapw( uintl6 n); //16位數(shù)據(jù)高低字節(jié)交換
{ return(((n<<8)0xff00)}((n>>8)0x00ff)); } uint32 swapl(uint32 n);//32 位數(shù)據(jù)大小頭對調(diào){ return(((n << 24 0xff000000L) ) ((n +8) 0x00ff0000L) ( ( n >> 8 ) 0x0000ff00L) ( ( n >> 2 4 )0x000000ffL)); }
3 結(jié)束語
該文詳細(xì)描述了在嵌入式系統(tǒng)中如何實(shí)現(xiàn)IPv6 協(xié)議棧,使得在資源有限的嵌入式系統(tǒng)中實(shí)現(xiàn)IPv6 協(xié)議棧具有可能, 隨著IPv6 技術(shù)及嵌入式技術(shù)的不斷發(fā)展,可以用微型網(wǎng)關(guān)、微型路由器實(shí)現(xiàn)嵌入式網(wǎng)與互聯(lián)網(wǎng)的通信,并最終使IPv6 技術(shù)應(yīng)用于工業(yè)控制、家庭網(wǎng)絡(luò)等各個領(lǐng)域.
本文作者創(chuàng)新點(diǎn): 。通過分析IEEE 802.15.4 和IPv6 協(xié)議,在保證實(shí)現(xiàn)網(wǎng)絡(luò)基本功能的前提下,著重研究了如何對復(fù)雜的TCP/IPv6 協(xié)議棧進(jìn)行精簡,并提出了一套可行的方案,此方案能夠適應(yīng)嵌入式系統(tǒng)的需要,然后用軟件實(shí)現(xiàn)嵌入式系統(tǒng)中的精簡的TCP/IPv6 協(xié)議棧,模塊之間能夠互相通信。本文引用地址:http://butianyuan.cn/article/152302.htm linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論