網(wǎng)絡(luò)單片機(jī)PIC18F97J60的開發(fā)與應(yīng)用
2.2 在線調(diào)試器MPLAB ICD2
選擇MPLAB ICD2作為在線調(diào)試器和燒寫器。Microchip公司提供的在線調(diào)試器MPIAB ICD2是一款功能強大而成本低的運行時開發(fā)工具,通過RS232或高速USB接口與主PC機(jī)相連。與ICE相比,其仿真功能有一些限制,但有如下突出的優(yōu)點:在產(chǎn)品量產(chǎn)后,只要保留6芯插針,就可直接與ICD2相連;ICD2可以在目標(biāo)應(yīng)用中對固件再編程,而不需要其他在線燒寫器設(shè)備。通信方式使用默認(rèn)的USB接口方式。為了避免目標(biāo)板負(fù)載過重對ICD2帶來損害,應(yīng)采用目標(biāo)板獨立供電。
2.3 Microchip TCP/IP協(xié)議棧
Microchip公司提供免費的TCP/IP軟件棧,為應(yīng)用開發(fā)提供了便利。Microchip TCP/IP協(xié)議棧是一套程序,它服務(wù)于標(biāo)準(zhǔn)的、基于TCP/IP的應(yīng)用程序,或者應(yīng)用在定制的、基于TCP/IP的應(yīng)用程序中。本應(yīng)用系統(tǒng)使用的是該協(xié)議棧的4.02版本。
類似于TCP/IP參考模型,Microchip TCP/IP協(xié)議棧將TCP/IP協(xié)議棧分為多層,如圖2所示。每層的實現(xiàn)代碼駐留在一個獨立的源文件中,而服務(wù)和應(yīng)用程序編程接口(API)是通過頭文件或包含文件定義的。與TCP/IP參考模型不同的是,Microchip TCP/IP協(xié)議棧中的許多層可以直接訪問在它下面的一層或多層。關(guān)于一個層是否繞過相鄰模塊來獲得所需的服務(wù),主要根據(jù)開銷的大小,以及服務(wù)是否需要智能處理后才能傳遞到下一層來決定。與傳統(tǒng)TCP/IP協(xié)議棧實現(xiàn)方法的不同之處是添加了2個新模塊:StackTask和ARPTask。Stackrrask管理協(xié)議棧及其所有模塊的操作,而ARPTask管理地址解析協(xié)議(Address ResohJtion Protocol,ARP)層的服務(wù)。Microchip TCP/IP協(xié)議棧使用了協(xié)同式多任務(wù)處理技術(shù)。在協(xié)同式多任務(wù)處理系統(tǒng)中,同時存在多個任務(wù),每個任務(wù)執(zhí)行自己的作業(yè)然后交回控制權(quán),這樣下一個任務(wù)才能夠執(zhí)行作業(yè)。StackTask和ARPTask都是協(xié)同式任務(wù)。Microchip TCP/IP協(xié)議棧盡管沒有實現(xiàn)通常TCP/IP協(xié)議棧中的所有模塊,但是在需要時可以將它們作為單獨的任務(wù)或模塊來實現(xiàn)。本文引用地址:http://www.ex-cimer.com/article/173912.htm
2.4 Stack Manager
Microchip TCP/IP協(xié)議棧由多個模塊組成。在使用模塊之前,用戶必須查閱并了解它的用途和API。函數(shù)的語法、參數(shù)、返回值、前提條件等具體問題可以在編程時針對具體的問題單獨查閱。
使用Microchip TCP/IP協(xié)議棧的任何應(yīng)用程序都必須執(zhí)行一定的步驟,以確保在適當(dāng)?shù)臅r間調(diào)用相應(yīng)的模塊(例如IP、TCP、UDP和ICMP)。無論主應(yīng)用程序邏輯如何,管理協(xié)議棧模塊的任務(wù)都始終相同。
為了減輕主應(yīng)用程序管理各個模塊的負(fù)擔(dān),Micro―chip TCP/IP協(xié)議棧使用了一個特殊的應(yīng)用程序?qū)幽K,稱為“StackTask”或“Stack Manager”。Stack Manager以協(xié)同式任務(wù)處理方式來實現(xiàn)。被賦予處理時間后,它將輪詢MAC層是否存在有效的數(shù)據(jù)包。若接收到一個包,它將對其進(jìn)行解碼并路由到相應(yīng)的模塊做下一步的處理。
Stack Manager。不是Mirochip TCP/IP協(xié)議棧的一部分,它與協(xié)議棧一起提供給用戶。這樣主應(yīng)用程序除了自己的工作以外,不需要管理協(xié)議棧模塊。執(zhí)行StackManager任務(wù)之前,必須通過調(diào)用StackInit()函數(shù)來對其進(jìn)行初始化。這個函數(shù)按正確的順序初始化Stack Man―ager變量和各個模塊。一旦調(diào)用Stacklnit(),主程序就必須定期調(diào)用StackTask()函數(shù),以確保及時處理所有進(jìn)入的包,以及所有的超時和錯誤條件。
評論