胡青
(第七一五研究所,杭州,310012)
基于μC/OS-Ⅱ與NiosⅡ的以太網(wǎng)接口軟件設(shè)計(jì)
胡青
(第七一五研究所,杭州,310012)
介紹了用戶(hù)如何基于μC/OS-Ⅱ多任務(wù)實(shí)時(shí)操作系統(tǒng)和NiosⅡ處理器并運(yùn)用NicheStack TCP/IP協(xié)議棧的標(biāo)準(zhǔn)套接字接口,進(jìn)行以太網(wǎng)接口的底層邏輯與應(yīng)用程序設(shè)計(jì),實(shí)現(xiàn)數(shù)據(jù)傳輸及與上位機(jī)通訊的功能。為在FPGA片上實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用服務(wù)提供一種解決方法。
μC/OS-Ⅱ;NiosⅡ;以太網(wǎng);NicheStack TCP/IP;接口軟件
隨著CPU芯片性能的提高,多任務(wù)實(shí)時(shí)操作系統(tǒng)(RTOS)在嵌入式系統(tǒng)中得廣泛應(yīng)用。為能將RTOS應(yīng)用于FPGA片上系統(tǒng)中,Altera 公司開(kāi)發(fā)出了NiosⅡ軟核處理器,使得在μC/OS-Ⅱ?qū)崟r(shí)操作系統(tǒng)下,利用高級(jí)語(yǔ)言及TCP/IP標(biāo)準(zhǔn)套接字接口,完成多任務(wù)以太網(wǎng)通信軟件開(kāi)發(fā)。這種設(shè)計(jì)思路增加了系統(tǒng)設(shè)計(jì)的靈活性,可以大大縮短產(chǎn)品研發(fā)和上市的時(shí)間,已成為一種嵌入式系統(tǒng)設(shè)計(jì)的潮流。
μC/OS-Ⅱ是一個(gè)完整的、可移植、固化、裁剪的占先式實(shí)時(shí)多任務(wù)內(nèi)核。它是美國(guó)Jean Labrosse 于1992 年開(kāi)始編寫(xiě)的,是一種適合于小型、微控制器的多任務(wù)、可剝奪實(shí)時(shí)操作系統(tǒng)[1]。主要特點(diǎn):(1)可移植性。源代碼絕大部分是用移植性很強(qiáng)的ANSI C編寫(xiě)的,與微處理器硬件相關(guān)的部分是用匯編語(yǔ)言編寫(xiě)的。匯編語(yǔ)言寫(xiě)的部分已經(jīng)壓到最低限度,以使其便于移植到其他微處理器上。(2)可剪裁。可根據(jù)用戶(hù)需求,依靠條件編譯選擇在應(yīng)用程序中定義需要的系統(tǒng)服務(wù),從而減少存儲(chǔ)空間的占用。(3)可剝奪性。完全可剝奪型的實(shí)時(shí)內(nèi)核,即總是運(yùn)行就緒條件下優(yōu)先級(jí)最高的任務(wù)。(4)多任務(wù)??梢怨芾?4個(gè)任務(wù),其中8個(gè)由系統(tǒng)直接管理,用戶(hù)的應(yīng)用程序最多可有56個(gè)任務(wù)。不支持時(shí)間片輪轉(zhuǎn)調(diào)度法(round-robin scheduling),賦予每個(gè)任務(wù)的優(yōu)先級(jí)必須是不相同的。每個(gè)任務(wù)都有自己?jiǎn)为?dú)的棧。(5)系統(tǒng)服務(wù)。提供信號(hào)量、互斥型信號(hào)量、事件標(biāo)志、消息郵箱、消息隊(duì)列、信號(hào)量、固定大小的內(nèi)存申請(qǐng)與釋放及時(shí)間管理函數(shù)等系統(tǒng)服務(wù)。(6)中斷管理。中斷可以使正在執(zhí)行的任務(wù)暫時(shí)掛起,且支持中斷嵌套,嵌套層數(shù)可達(dá)255層。
NiosⅡ處理器是Altera 公司開(kāi)發(fā)出的一種采用流水線(xiàn)技術(shù)的32位精簡(jiǎn)指令集、可配置軟核處理器,具有超過(guò)250 DMIPS的性能,并專(zhuān)門(mén)針對(duì)可編程邏輯器件進(jìn)行了優(yōu)化,包含32個(gè)內(nèi)部通用寄存器,最多可支持32個(gè)外部中斷源,支持各種片上以及片外存儲(chǔ)器和外設(shè)[2]。它擁有自己的匯編語(yǔ)言指令集,可以完成各種算數(shù)與邏輯運(yùn)算、數(shù)據(jù)傳輸、流程控制以及按位操作。軟件開(kāi)發(fā)環(huán)境為Nios ⅡIDE,采用GNU編譯器,支持C/C++的編譯、鏈接,可以產(chǎn)生重入代碼,允許在C語(yǔ)言中嵌入?yún)R編語(yǔ)言[3]。在Altera 公司的SOPC Builder中加載NiosⅡ軟核處理器以及相應(yīng)的外圍接口和各種自定義指令,可構(gòu)成完整、功能強(qiáng)大的SOC系統(tǒng),利用FPGA設(shè)計(jì)軟件進(jìn)行綜合,下載到FPGA中就可以實(shí)現(xiàn)一個(gè)特定功能的嵌入式系統(tǒng)。
2.1 硬件設(shè)計(jì)
硬件設(shè)計(jì)框圖如圖1所示。FPGA選用Altera公司CycloneⅢ系列的EP3C120F780C芯片,完成片上系統(tǒng)的全部底層硬件邏輯。該芯片擁有119088個(gè)邏輯單元、532個(gè)I/O管腳、3.79 Mbits的片上存儲(chǔ)單元、576個(gè)乘法器以及4個(gè)PLL,是一款適用于多種應(yīng)用場(chǎng)合、低價(jià)格、高性能的FPGA芯片。
圖1 硬件框圖
以太網(wǎng)PHY芯片選用Marvell公司的88E1111型芯片。該芯片需要25 MHz參考時(shí)鐘進(jìn)行驅(qū)動(dòng),并且提供32個(gè)內(nèi)部的管理寄存器,可通過(guò)MIDO接口進(jìn)行訪問(wèn)、配置。
外部存儲(chǔ)器選用2 MBytes的Cypress CY7C1380 SSRAM芯片,完成運(yùn)行程序與數(shù)據(jù)存儲(chǔ);主動(dòng)串行配置芯片選用Altera公司的EPCS64,完成FPGA硬件邏輯與應(yīng)用程序的上電加載。其中,以太網(wǎng)的MAC控制器與PHY芯片采用RGMII的接口進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)的交換。
2.2 片上系統(tǒng)設(shè)計(jì)
Altera公司的SOPC Builder構(gòu)建的以NiosⅡ處理器為核心的片上系統(tǒng),主要功能是完成采集數(shù)據(jù)的網(wǎng)絡(luò)傳輸。該系統(tǒng)選用并配置Triple Speed Ethernet MegaCore的IP組件作為千兆以太網(wǎng)MAC;主時(shí)鐘(50 MHz)與以太網(wǎng)接收時(shí)鐘(125 MHz)分別通過(guò)多個(gè)PLL產(chǎn)生硬件電路所需的各種時(shí)鐘;利用FPGA的片上存儲(chǔ)資源,構(gòu)建各種片上存儲(chǔ)器,如FIFO、以太網(wǎng)數(shù)據(jù)緩存區(qū)以及緊耦合數(shù)據(jù)/指令存儲(chǔ)器等;利用SGDMA組件完成FIFO與數(shù)據(jù)緩存區(qū),以及數(shù)據(jù)緩存區(qū)與MAC間的數(shù)據(jù)傳輸,降低傳輸對(duì)CPU資源的占用率;三態(tài)口組件實(shí)現(xiàn)SSRAM控制組件與外部SSRAM的數(shù)據(jù)接口,可以提供足夠的程序運(yùn)行和數(shù)據(jù)堆棧資源;SPI組件實(shí)現(xiàn)與采集模塊其它控制器的通訊;PIO組件實(shí)現(xiàn)對(duì)外圍通用IO口的控制。最后,通過(guò)Avalon總線(xiàn)完成各IP組件之間的互連,并分配組件地址空間與中斷優(yōu)先級(jí),并生成SOPC系統(tǒng)。
3.1 軟件模型
軟件模型是一種“洋蔥”式分層關(guān)系,每一層都對(duì)該層的實(shí)現(xiàn)細(xì)節(jié)進(jìn)行了封裝,為外層提供數(shù)據(jù)交換,如圖2所示。
圖2 軟件分層模型
(1) NiosⅡ處理器硬件系統(tǒng)層:以NiosⅡ軟核處理器為核心的FPGA片上系統(tǒng),包含了NiosⅡ及其它硬件外設(shè)。(2) 設(shè)備驅(qū)動(dòng)層:操作硬件資源的軟件函數(shù)庫(kù),抽象化了外設(shè)的運(yùn)行細(xì)節(jié)。(3) HAL API函數(shù)庫(kù):提供了應(yīng)用程序與底層硬件交互的設(shè)備驅(qū)動(dòng)接口,硬件配置與HAL系統(tǒng)庫(kù)會(huì)始終保持同步,大大提高了應(yīng)用程序的可復(fù)用性,使得應(yīng)用程序不受底層硬件變化的影響。(4)μC/OS-Ⅱ操作系統(tǒng):為應(yīng)用程序提供多任務(wù)調(diào)度與任務(wù)間通訊服務(wù)。(5)NicheStack TCP/IP Stack:利用套接字的API函數(shù),為用戶(hù)程序系提供網(wǎng)絡(luò)服務(wù)。這是一款專(zhuān)為低存儲(chǔ)資源嵌入式系統(tǒng)設(shè)計(jì)的網(wǎng)絡(luò)協(xié)議套件,在提供完整TCP/IP網(wǎng)絡(luò)協(xié)議功能的同時(shí)減少了資源利用,非常適用于NiosⅡ處理器系統(tǒng)。(6)應(yīng)用程序系統(tǒng)初始化層:從main()函數(shù)中調(diào)用μC/OS-Ⅱ操作系統(tǒng)和NicheStack TCP/IP網(wǎng)絡(luò)協(xié)議棧軟件組件的初始化函數(shù),同時(shí)建立所有的應(yīng)用任務(wù)與信號(hào)量、隊(duì)列、事件標(biāo)志等實(shí)時(shí)操作系統(tǒng)內(nèi)部通訊資源。(7)應(yīng)用層:位于最外層直接面向用戶(hù),供用戶(hù)實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)功能。
3.2 μC/OS-Ⅱ的移植
與處理器相關(guān)代碼,主要是對(duì)OS_CPU.H、OS_CPU _C.C、OS_CPU_ASM.ASM這三個(gè)與處理器相關(guān)的文件進(jìn)行修改。NiosⅡ處理器的C編譯器允許在C語(yǔ)言中直接嵌套匯編語(yǔ)言,所以可以將所需的匯編語(yǔ)言代碼直接放到OS_CPU_C.C文件中去。與應(yīng)用相關(guān)的代碼,OS_CFG.H 用來(lái)配置內(nèi)核,用戶(hù)根據(jù)需要對(duì)內(nèi)核進(jìn)行定制,設(shè)置系統(tǒng)的基本情況;INCLUDES.H 為系統(tǒng)頭文件,包括了整個(gè)實(shí)時(shí)系統(tǒng)所需要的內(nèi)核以及用戶(hù)的頭文件。
茶染藝術(shù)的染色方法主要分為直接染色法、同浴媒染法和后媒染色法[8]。其中采用直接染色法可染棕色,采用綠礬同浴媒染法可得皂色,分別用綠礬、鐵漿后媒染色法可得蓮子褐色和磚褐色。雖然茶葉分為了綠、黃、黑、紅、青和白六種,但是每一種下又有多樣的品種,不同的品種,其茶色都會(huì)有微妙的差別。甚至同一品種下,不同的制作工藝都會(huì)造成不同的茶色。除此之外,染色的手法、環(huán)境、時(shí)間、溫度均是影響茶染效果的因素。所以,經(jīng)過(guò)茶染出的成品總是帶有獨(dú)一無(wú)二的特性。
(1) 移植OS_CPU.H文件
μC/OS-Ⅱ使用的是可移植的無(wú)符號(hào)數(shù)和有符號(hào)數(shù)。對(duì)于NiosⅡ處理器,在OS_CPU.H中必須定義一系列數(shù)據(jù)類(lèi)型以確保移植的正確性,如typedef unsigned short INT16U等。
定義了兩個(gè)宏OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()來(lái)關(guān)/開(kāi)中斷,以保護(hù)臨界代碼;定義宏OS_STK_GROWTH來(lái)指定堆棧的方向(置0表示堆棧從下往上遞增,置1表示堆棧從上往下遞減); 定義宏OS_TASK_SW()來(lái)模仿中斷的產(chǎn)生,以在任務(wù)調(diào)度時(shí)從任務(wù)堆棧中恢復(fù)處理器的所有寄存器,并執(zhí)行中斷返回指令。
(2) 移植OS_CPU_C.C文件
在OS_CPU_C.C文件中,通過(guò)用匯編語(yǔ)言編寫(xiě)OSStartHighRdy()、OSCtxSw()、OSIntCtxSw()、OSTickISR()四個(gè)函數(shù),實(shí)現(xiàn)對(duì)處理器寄存器的操作。
OSStartHighRdy()在多任務(wù)系統(tǒng)啟動(dòng)函數(shù)OSStart()中調(diào)用,功能是讓進(jìn)入就緒態(tài)的優(yōu)先級(jí)最高的任務(wù)運(yùn)行;OSCtxSw()是一個(gè)任務(wù)級(jí)的切換函數(shù),切換是通過(guò)執(zhí)行軟中斷或TRAP(陷阱)來(lái)實(shí)現(xiàn)的,中斷服務(wù)子程序、陷阱或異常處理的向量地址必須指向OSCtxSw();OSIntCtxSw()是中斷級(jí)的任務(wù)切換函數(shù),被OSIntExit()調(diào)用,在中斷服務(wù)程序中執(zhí)行任務(wù)切換功能,將默認(rèn)CPU寄存器保存在被中斷了的任務(wù)的堆棧中;OSTickISR()是系統(tǒng)時(shí)鐘節(jié)拍中斷服務(wù)函數(shù),這是一個(gè)周期性中斷,為內(nèi)核提供時(shí)鐘節(jié)拍,其周期大小決定了內(nèi)核所能給應(yīng)用軟件系統(tǒng)提供的最小時(shí)間間隔服務(wù)。
3.3 以太網(wǎng)接口程序設(shè)計(jì)
首先讀取經(jīng)過(guò)復(fù)解調(diào)的前端采集數(shù)據(jù),然后將數(shù)據(jù)按固定格式打包,最后通過(guò)以太網(wǎng)發(fā)送至上位機(jī)。同時(shí),通過(guò)以太網(wǎng)接收上位機(jī)分發(fā)的命令參數(shù)報(bào)文,將命令參數(shù)按一定格式傳輸至采集模塊其它控制器,實(shí)現(xiàn)上位機(jī)對(duì)采集模塊的實(shí)時(shí)控制。主要包括NESStackInitialTask()、NESTCPClientServerTask()和NESUDPClientServerTask()三個(gè)用戶(hù)任務(wù)。程序流程如圖3所示。
圖3 TCP/IP或UDP網(wǎng)絡(luò)數(shù)據(jù)包
該任務(wù)為系統(tǒng)初始化任務(wù),最先在main()函數(shù)中創(chuàng)建,初始化NicheStack TCP/IP Stack,并創(chuàng)建操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)和其他任務(wù),在三個(gè)用戶(hù)任務(wù)中優(yōu)先級(jí)最高。任務(wù)完成之后,調(diào)用OSTaskDel()使其進(jìn)入休眠態(tài),不再被操作系統(tǒng)調(diào)用。
在任務(wù)中,按先后順序來(lái)調(diào)用alt_iniche_init() 和netmain()兩個(gè)函數(shù),其中前者用來(lái)初始化協(xié)議棧,后者用來(lái)初始化和發(fā)起NicheStack系統(tǒng)級(jí)任務(wù)。在此過(guò)程中,tk_netmain與tk_nettick兩個(gè)NicheStack系統(tǒng)級(jí)任務(wù)會(huì)被創(chuàng)建并賦予它們高優(yōu)先級(jí),前者是網(wǎng)絡(luò)棧的核心任務(wù),優(yōu)先級(jí)為2;后者是網(wǎng)絡(luò)棧的時(shí)鐘管理任務(wù),優(yōu)先級(jí)為3。
此外,NicheStack TCP/IP Stack系統(tǒng)代碼在初始化過(guò)程中會(huì)調(diào)用get_mac_addr()和get_ip_addr()函數(shù)獲得MAC和IP地址。這部分代碼必須由程序員親自編寫(xiě),可以非常靈活的選擇將MAC和IP地址存儲(chǔ)在任何地方。我們選擇將其寫(xiě)入flash存儲(chǔ)器中,上電后直接從flash的指定區(qū)域讀出。
NicheStack TCP/IP Stack初始化完成后全局變量iniche_net_ready置為真,此時(shí)可創(chuàng)建NES_ TCPClientServerTask()和NES_UDPClientServerTask()兩個(gè)應(yīng)用NicheStack網(wǎng)絡(luò)服務(wù)的任務(wù)。在此之前,需完成一些聲明。宏TK_OBJECT用于創(chuàng)建靜態(tài)任務(wù)對(duì)象,宏TK_ENTRY定義了任務(wù)名稱(chēng),結(jié)構(gòu)體inet_taskinfo則用于指定任務(wù)名、任務(wù)優(yōu)先級(jí)和堆棧大小。例如:
TK_NEWTASK()用來(lái)創(chuàng)建應(yīng)用NicheStack網(wǎng)絡(luò)服務(wù)的新任務(wù),是NicheStack TCP/IP Stack與μC/OS-Ⅱ接口的一部分。它通過(guò)調(diào)用μC/OS-Ⅱ的OSTaskCreate()函數(shù)來(lái)創(chuàng)建一個(gè)新線(xiàn)程,還執(zhí)行一些NicheStack TCP/IP Stack所需特殊的代碼。
最后,在main()函數(shù)中調(diào)用OSStart()來(lái)啟動(dòng)μC/OS-Ⅱ的任務(wù)調(diào)度程序,完成系統(tǒng)初始化。
(2)NESTCPClientServerTask()
該任務(wù)為T(mén)CP客戶(hù)端網(wǎng)絡(luò)服務(wù)任務(wù),實(shí)現(xiàn)整個(gè)應(yīng)用程序的關(guān)鍵功能,在三個(gè)用戶(hù)任務(wù)優(yōu)先級(jí)中居其次。我們將經(jīng)過(guò)復(fù)解調(diào)的前端采集數(shù)據(jù)寫(xiě)入FIFO存儲(chǔ)器,利用SGDMA組件從FIFO讀出固定大小的數(shù)據(jù)至片上緩沖區(qū),同樣利用SGDMA組件將緩沖區(qū)數(shù)據(jù)送至Triple Speed Ethernet組件,最后按TCP/IP協(xié)議發(fā)送至以太網(wǎng)。
在NESStackInitialTask()中調(diào)用OSSemCreate()創(chuàng)建一個(gè)二值信號(hào)量NESDataSendSem。在網(wǎng)絡(luò)傳輸空閑階段,本任務(wù)調(diào)用OSSemPend()將自身掛起,進(jìn)入等待狀態(tài),等待信號(hào)量被釋放。
設(shè)定FIFO的半滿(mǎn)標(biāo)記為中斷標(biāo)志位,當(dāng)前端數(shù)據(jù)累計(jì)超過(guò)FIFO一半存儲(chǔ)容量時(shí),產(chǎn)生中斷跳轉(zhuǎn)至中斷服務(wù)程序,調(diào)用函數(shù)alt_avalon_sgdma_do_ async_transfer()發(fā)起DMA傳輸,然后調(diào)用OSSemPost()釋放信號(hào)量,使本任務(wù)進(jìn)入就緒態(tài)。由于該任務(wù)優(yōu)先級(jí)較NESUDPClientServerTask()高,因此獲得CPU的使用權(quán)進(jìn)入運(yùn)行態(tài)。DMA傳輸結(jié)束后,即可調(diào)用標(biāo)準(zhǔn)TCP/IP套接字函數(shù)send()發(fā)起網(wǎng)絡(luò)數(shù)據(jù)傳輸。傳輸結(jié)束后,本任務(wù)再次調(diào)用OSSemPend(),進(jìn)入等待狀態(tài),等待下一次網(wǎng)絡(luò)數(shù)據(jù)傳輸?shù)陌l(fā)起。
(3)NESUDPClientServerTask()
該任務(wù)為UDP客戶(hù)端網(wǎng)絡(luò)服務(wù)任務(wù),是接收上位機(jī)分發(fā)的命令參數(shù)報(bào)文,任務(wù)優(yōu)先級(jí)最低。由于整個(gè)采集系統(tǒng)由多個(gè)采集模塊組成,因此上位機(jī)采用UDP協(xié)議進(jìn)行組播。
本任務(wù)一直處于運(yùn)行態(tài),我們用FD_SET()將一個(gè)套接字句柄加入到集合中,用select()編寫(xiě)非阻塞方式工作的程序,并用FD_ISSET()進(jìn)行輪詢(xún)。當(dāng)上位機(jī)發(fā)來(lái)命令參數(shù)時(shí),F(xiàn)D_ISSET()檢查到該句柄可讀,于是調(diào)用recvfrom()來(lái)接收,并調(diào)用sendto()返回一條確認(rèn)報(bào)文給上位機(jī),同時(shí)發(fā)起SPI傳輸。
我們對(duì)設(shè)計(jì)開(kāi)發(fā)完畢的以太網(wǎng)接口在TCP/IP協(xié)議下的網(wǎng)速及傳輸可靠性進(jìn)行了測(cè)試。通過(guò)網(wǎng)線(xiàn)與一臺(tái)測(cè)試計(jì)算機(jī)連接,在測(cè)試計(jì)算機(jī)上利用VC++6.0開(kāi)發(fā)測(cè)試程序,測(cè)試網(wǎng)速和保存數(shù)據(jù)文件,利用Matlab處理數(shù)據(jù)并顯示結(jié)果。
(1) 網(wǎng)速測(cè)試
測(cè)試發(fā)送網(wǎng)速時(shí),接收測(cè)試程序調(diào)用QueryPerformanceFrequency()函數(shù)獲取計(jì)數(shù)器的時(shí)鐘頻率,在以太網(wǎng)接口向測(cè)試計(jì)算機(jī)的發(fā)送固定大小的數(shù)據(jù)包前后,兩次調(diào)用QueryPerformanceCounter()函數(shù)獲得計(jì)數(shù)器的當(dāng)前計(jì)數(shù)值,利用recv()接收并返回接收字節(jié)數(shù),最終測(cè)試1000次后平均發(fā)送網(wǎng)速為72.3 Mb/s,滿(mǎn)足系統(tǒng)每秒數(shù)據(jù)量10 Mb的要求。程序如下:
測(cè)試接收網(wǎng)速的方法與之相同,只不過(guò)是在以太網(wǎng)接口用戶(hù)程序中分別調(diào)用alt_timestamp_freq() 和alt_timestamp()來(lái)獲取系統(tǒng)計(jì)數(shù)器的時(shí)鐘頻率和當(dāng)前計(jì)數(shù)值。最終測(cè)試1000次后平均接收網(wǎng)速為62.4 Mb/s,滿(mǎn)足系統(tǒng)需求。
(2)以太網(wǎng)接口可靠性測(cè)試
向采集模塊輸入端注入一定(如26 kHz)頻率的連續(xù)正弦信號(hào),通過(guò)以太網(wǎng)接口傳輸任意量的數(shù)據(jù)(如10 GB)至測(cè)試計(jì)算機(jī),并用Matlab分多批對(duì)復(fù)解調(diào)(移頻至1.75 kHz)后的信號(hào)做頻譜分析,發(fā)現(xiàn)數(shù)據(jù)未出現(xiàn)斷點(diǎn),信號(hào)頻率保持不變,證明以太網(wǎng)接口可靠,滿(mǎn)足設(shè)計(jì)要求。圖4(a)、(b)為隨機(jī)抽取兩個(gè)通道的測(cè)試結(jié)果。
圖4(a) 信號(hào)頻譜圖
圖4(b) 信號(hào)時(shí)-頻譜圖
事實(shí)證明,μC/OS-Ⅱ和NiosⅡ相結(jié)合,可以構(gòu)成一種基于可配置片上系統(tǒng)的嵌入式開(kāi)發(fā)平臺(tái)。該平臺(tái)軟、硬件均可根據(jù)用戶(hù)需求進(jìn)行剪裁配置,同時(shí)方便的利用C語(yǔ)言和TCP/IP標(biāo)準(zhǔn)套接字接口實(shí)現(xiàn)了以太網(wǎng)接口功能,具有很好的推廣應(yīng)用價(jià)值。
[1] JEAN J LABROSSE . 嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS-Ⅱ[M]. 2版. 邵貝貝, 譯. 北京: 北京航空航天大學(xué)出版社, 2003.
[2] ALTERA CORPORATION. Nios II processor reference handbook[M]. 9.0 ed. 2009.
[3] 蔡偉綱. NiosⅡ軟件架構(gòu)解析[M]. 西安: 西安電子科技大學(xué)出版社, 2007.
[4] ALTERA CORPORATION. NiosⅡ software developer’s handbook[M]. 9.0 ed. 2009.
[5]多納霍, 卡爾弗特. TCP/IP Sockets編程(C語(yǔ)言實(shí)現(xiàn))[M]. 2版. 陳宗斌, 譯. 北京: 清華大學(xué)出版社, 2009.
[6] 羅軍舟, 黎波. TCP/IP協(xié)議及網(wǎng)絡(luò)編程技術(shù)[M]. 北京:清華大學(xué)出版社, 2004.