基于NiosII的IP Camera傳輸系統實(shí)現
LWIP是瑞士計算機科學(xué)院的開(kāi)發(fā)的TCP/IP協(xié)議棧,其開(kāi)發(fā)的初衷是用于嵌入式系統,一般它只需要幾十KB的RAM和約40 KB的ROM就可運行。NiosII IDE開(kāi)發(fā)環(huán)境內部集成了LWIP協(xié)議棧,用戶(hù)在加載操作系統μC/OS-II后,只需選取相應的LWIP選項,即可加入協(xié)議棧。工程中,LWIP以系統庫的形式存在,應用軟件只需加上相應的頭文件,就可調用API函數實(shí)現網(wǎng)絡(luò )連接、數據收發(fā)等功能,迅速實(shí)現系統的網(wǎng)絡(luò )接入。
3.2建立應用軟件
本系統設計的嵌入式應用軟件流程圖如圖4所示。
首先對堆棧和驅動(dòng)程序初始化。初始化堆棧,應在調用OSStart啟動(dòng)μC/OS-II調度程序之前調用IDE的庫函數lwip_stack_int(),該函數用于設置協(xié)議棧。堆棧初始化后,再調用庫函數init_done_func(),但該函數必須調用庫函數lwip_devices_init(),這個(gè)函數將對在system.h中定義的所有已安裝的以太網(wǎng)設備驅動(dòng)程序進(jìn)行注冊。函數lwip_devices_init()還會(huì )調用函數get_mac_addr()和函數get_ip_address()從而獲取系統的mac地址和IP地址。當lwip_devices_init()返回一個(gè)非0值則表示注冊成功。注冊成功后,LWIP??捎?,從而便可在程序中創(chuàng )建任務(wù)。
初始化完成后,使用函數sys_thread_new()創(chuàng )建使用套接字API與LWIP棧對話(huà)的新任務(wù)。系統中,由函數sys_thread_new(link_task,NULL,link_PRIO)創(chuàng )建的用戶(hù)任務(wù)是link_task()。該任務(wù)中,系統調用函數listen(fd_listen,1)監聽(tīng)上位機連接是否成功,一旦連接成功,調用NiosII IDE所提供的IO操作函數IOWR(OUT_PIO_BASE,0,0x01)控制接收模塊,將視頻數據保存到SRAM,當存滿(mǎn)一幀后,接收模塊產(chǎn)生一個(gè)中斷,這時(shí)系統可通過(guò)指針讀取SRAM中的值a[i]=*(p+i+N/2*(TIMES-times),每讀取1 450 Byte就調用套接字API函數send(clisock,send_buf,N,0)發(fā)送至上位機。由于保存圖像的分辨率僅是320×240,所以數據量并不大。發(fā)送時(shí),通過(guò)函數IOWR(OUT_PIO_BASE,0,0x00)控制接收模塊何時(shí)停止接收,一幀圖像發(fā)送完畢,再通過(guò)函數IOWR(OUT_PI-O_BASE,0,0x01)控制接收模塊開(kāi)始接收下一幀圖像,如此反復循環(huán),直到連接斷開(kāi)為止。
4 上位機軟件設計
本系統設計的客戶(hù)端視頻顯示應用程序是利用LabWindows/CVI軟件開(kāi)發(fā),此應用程序利用套接字編程,可以作為客戶(hù)機與服務(wù)器NiosII系統之間通信。
本系統設計的上位機的應用程序除了顯示視頻功能外,還添加了保存和回放功能。上位機通過(guò)創(chuàng )建一個(gè)標準的Socket接口完成連接以及接收數據;當接收完一幀數據后,對其進(jìn)行數據處理,再調用函數CreateDIBitmap()創(chuàng )建一幅位圖,最后再調用函數CanvasDrawBitmap()完整顯示。
5 結束語(yǔ)
本系統設計是基于NiosII IP攝像頭的系統,介紹了從SOPC Builder創(chuàng )建NiosII軟核處理器、IDE建立底層軟件平臺,到設計NioslI應用軟件的整個(gè)架構。同時(shí),對上位機的應用程序做了說(shuō)明。經(jīng)過(guò)硬件測試,整個(gè)系統運行良好,實(shí)時(shí)性能良好。
tcp/ip相關(guān)文章:tcp/ip是什么
評論