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