版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、i 摘摘 要要 本課題分析了國內(nèi)外嵌入式系統(tǒng)的發(fā)展現(xiàn)狀,針對當(dāng)前嵌入式的應(yīng)用,介紹了一種基 于 arm 的嵌入式圖像采集與傳輸方案。該方案借助 wince 的強(qiáng)大功能,具體積小,穩(wěn)定性 高和快速開發(fā)的優(yōu)點。課題完成了基本的硬件設(shè)計和軟件開發(fā)。 硬件方面采用了 usb 攝像頭與 s3c2440 處理器組成嵌入式圖像采集裝置,并通過以太 網(wǎng)連接宿主機(jī)。 軟件方面分為系統(tǒng)軟件的移植和應(yīng)用軟件開發(fā)方面。系統(tǒng)軟件方面包含 arm 平臺的 bootloader 燒寫和嵌入式 wince 系統(tǒng)定制和移植以及攝像球驅(qū)動的開發(fā);應(yīng)用軟件方面包 括圖像采集模塊的設(shè)計和 tcp 傳輸模塊的設(shè)計兩個部分。 課題的最后
2、對系統(tǒng)設(shè)計過程中遇到的問題進(jìn)行了總結(jié),并提出了改進(jìn)方法。 關(guān)鍵詞:關(guān)鍵詞:嵌入式系統(tǒng);arm;圖像采集;usb 攝像頭;wince;tcp; ii image capture and transmission based on embedded platforms lu zhi-sheng abstract by analyzing the situations of the embedded systems home and abroad, in view of the current embedded applications, introduced the arm-based embed
3、ded image capture and transmission system. by the power of wince, the program has specific plot of small, high stability and rapid development advantages. the design of hardware system and the development of software system are mainly discussed in this thesis. with regards to the hardware design,the
4、 embedded capture system is consist of usb camera and s3c2440 as its cpu, and as it connects to pc through ethernet. as far as the software design, the system software and the internet application must be designed. first we must port the bootloader and embedded wince kernel to target of arm platform
5、 and drive the development of usb camera. then, a module of picture capturing and a picture transmission based on tcp need to be designed to run on the platform of arm. finally, this topics summarized the problems of completed works, and the method of future improves has been given too. key words: e
6、mbedded systems; arm; picture capturing; usb camera; wince; tcp; iii 目目 錄錄 1. 緒論.1 1.1 嵌入式軟硬件的現(xiàn)狀與發(fā)展 .1 1.2 本課題研究的內(nèi)容 .1 2.開發(fā)方法綜述.2 2.1 需求分析 .2 2.2.1 攝像頭的選擇.2 2.2.2 嵌入式處理器的選擇.3 2.2.3 嵌入式操作系統(tǒng)的選擇.3 2.2 開發(fā)環(huán)境及工具.4 2.2.1 arm9 s3c2440a 開發(fā)板 .4 2.2.2 platform builder 5.0 + visual studio 2005.7 2.3 開發(fā)流程.9 3.嵌入
7、式圖像采集與傳輸程序的設(shè)計.10 3.1 關(guān)鍵技術(shù).10 3.1.1 bootloader.10 3.1.2 eboot.10 3.1.3 攝像頭 sdk 接口函數(shù).10 3.1.4 mfc 微軟基礎(chǔ)類庫 .13 3.1.5 tcp 協(xié)議 .13 3.1.6 windows socket.14 3.2 方案總體設(shè)計.17 3.3 wince 驅(qū)動架構(gòu).17 3.4 圖像采集模塊設(shè)計 .19 3.4.1 打開攝像頭設(shè)備 .19 3.4.2 始化攝像頭設(shè)備 .19 3.4.3 初始化視頻信息.20 3.4.4 獲取視頻幀與 jpeg 圖像.21 3.4.5 關(guān)閉視頻設(shè)備.21 3.5 圖像數(shù)據(jù)傳輸
8、模塊.23 3.6 wince 系統(tǒng)的定制 .25 4.系統(tǒng)的測試.27 4.1 bootloader下載 .27 iv 4.2 wince 系統(tǒng)的燒寫 .28 4.3 建立與 pc 操作系統(tǒng)與 wince 系統(tǒng)文件同步.30 4.4 聯(lián)機(jī)總體測試.30 結(jié)論與尚存在問題.32 參考文獻(xiàn).35 致謝.36 1 基于嵌入式平臺的圖像采集與傳輸 姓名:陸志生 學(xué)號:2005394122 班級:網(wǎng)絡(luò)工程 051 1. 緒論 嵌入式系統(tǒng)把微處理器的系統(tǒng)電路與其專用的軟件平臺相結(jié)合,從而實現(xiàn)了系統(tǒng)操作的 最高效率. 嵌入式系統(tǒng)早已融入了人們的日常生活,嵌入式系統(tǒng)的產(chǎn)品主要集中在信息家電、 通信產(chǎn)品、工業(yè)
9、控制器、掌上電腦領(lǐng)域. 家電、玩具、汽車、新一代手機(jī)、數(shù)碼相機(jī)等設(shè) 備也都采用了嵌入式系統(tǒng)的核心技術(shù)。 隨著后pc 時代的到來,有理由相信嵌入式系統(tǒng)會呈 現(xiàn)出蓬勃發(fā)展的趨勢。 日常生活中所見到的數(shù)碼相機(jī)、可視電話、多媒體ip 電話和電話會議等產(chǎn)品,其中圖 像采集是最核心的技術(shù)。 圖像采集的速度、質(zhì)量直接影響到產(chǎn)品的整體效果。采用usb 接 口的攝像頭在一定程度上突出了采樣速率高、圖像質(zhì)量高、通用性好的特點。 1.1 嵌入式軟硬件的現(xiàn)狀與發(fā)展 嵌入式系統(tǒng)分為嵌入式軟件和硬件兩大類。其中嵌入式硬件一般由嵌入式處理器及其 外圍設(shè)備組成,而嵌入式軟件一般包括嵌入式操作系統(tǒng)、嵌入式支撐軟件和應(yīng)用軟件三大
10、 類。嵌入式處理器是嵌入式系統(tǒng)的核心,它與通用處理器最大的區(qū)別便是其大多數(shù)工作是 為特定的用戶群,為特定的應(yīng)用而專門定制。嵌入式處理器可以分為低端的微控制器(mcu)、 中高端的嵌入式微處理器(empu)、通信領(lǐng)域的 dsp 處理器和高度集成的片商系統(tǒng)(soc)。典 型的嵌入式處理器有 arm、mlps、powerpc 等等。 嵌入式外圍設(shè)備一般是指一個嵌入式系統(tǒng)中除了處理器外用于完成存儲、通信、調(diào)試、 顯示等輔助功能的其他部件,一般可以分為存儲器(flash 應(yīng)用最為廣泛)、接口(并口、rs 一 232 串口、nc 總線接口等等)和人機(jī)交互(lcd、鍵盤和觸摸屏等)三大部分。嵌入式操作 系統(tǒng)
11、是一種用途廣泛的系統(tǒng)軟件,過去它主要應(yīng)用于工業(yè)控制和國防系統(tǒng)領(lǐng)域,負(fù)責(zé)嵌入 系統(tǒng)的全部軟、硬件資源的分配、調(diào)度工作,控制,協(xié)調(diào)并發(fā)活動;它必須體現(xiàn)其所在系統(tǒng) 的特征,能夠通過裝卸某些模塊來達(dá)到系統(tǒng)所要求的功能。現(xiàn)在國際上有名的嵌入式操作 系統(tǒng)有 windowsce、linux、vxworks 等,我國嵌入式操作系統(tǒng)的起步較晚,國內(nèi)此類產(chǎn)品 主要是基于自主版權(quán)的 linux 操作系統(tǒng),其中以中軟 linux、紅旗 linux、東方 linux 為代 表。 2 1.2 本課題研究的內(nèi)容 本課題主要是利用 arm9 s3c2440a 開發(fā)板以及一只中星微芯片 zc030 x 系列的 usb 攝像 頭
12、作為硬件環(huán)境,在開發(fā)板上燒寫一個 wince5.0 的操作系統(tǒng),并編寫一個服務(wù)端程序。而 這個服務(wù)端程序運(yùn)行在 wince5.0 上,主要完成的功能是調(diào)用攝像頭進(jìn)行圖像的采集,然后 將采集到的圖像數(shù)據(jù)通過以太網(wǎng)傳送到 pc 機(jī)上。也就實現(xiàn)了一個基于嵌入式平臺的圖像采 集與傳輸系統(tǒng)的簡單架構(gòu)。日后可根據(jù)實際的需要,在這個架構(gòu)的基礎(chǔ)上進(jìn)行改進(jìn)以及增 加需要的功能。因此,本課題主要針對以下內(nèi)容進(jìn)行分析研究: 1)arm9 s3c2440a 開發(fā)板的功能結(jié)構(gòu)。 2)wince5.0 操作系統(tǒng)的定制與燒寫。 3)如何識別以及調(diào)用中星微 usb 攝像頭。 4)圖像采集與傳輸?shù)姆?wù)端程序的設(shè)計。 2.開發(fā)方
13、法綜述 2.1 需求分析 本課題、 。設(shè)計分為硬件和軟件兩大部分。硬件部分包括攝像頭和開發(fā)平臺的選擇;軟 件部分包括系統(tǒng)級軟件(bootloader、操作系統(tǒng)和驅(qū)動程序)與用戶級軟件(服務(wù)端,客戶端)。 2.2.1 攝像頭的選擇 攝像頭是由 sensor(傳感器)、dsp 即 數(shù)字信號處理器、lens(鏡頭)、外殼模具、usb 連線、電路板及阻容等周邊器件構(gòu)成,其最關(guān)鍵的是鏡頭,傳感器和 dsp。選擇標(biāo)準(zhǔn)是以 清晰度高,圖像流暢的為好。鏡頭是對光線的最重要部位。一般按照材料分主要有 3 種, 有玻璃鏡片、塑膠鏡片和化合物的,這里最好的要算是玻璃的,其通光系數(shù)大,一般好的 鏡頭的通光口徑也會做的
14、較大,在光線不是很好的時候也可以得到較好的效果,但是價格 要高點。塑膠的通光要差點,但是價格便宜,就這點也得到了一些中低端用戶的認(rèn)可?;?合物的比較少。本系統(tǒng)中選用的攝像頭鏡頭便是塑膠鏡片的。傳感器是將光信號轉(zhuǎn)換成電 信號的器件,目前市場見到的主要有兩種:一種是 ccd,一種是 cmos。而兩者的主要區(qū)別在 于:ccd 成像像素高,清晰度高,但價格昂貴。主要應(yīng)用于高端的數(shù)碼相機(jī)市場。而 cmos 在成像方面稍微差一些,特別光線差時,速度較慢,但是其價格低廉,適合中低端市場。 綜合考慮,本系統(tǒng)中使用的傳感器是 cmos。 目前用于攝像頭的 dsp 主要有中國中星微公司的 dsp 芯片(zc030
15、x)和美國 ov 公司的 0v511+芯片。在國內(nèi)市場上的 usb 攝像頭基本上采用的是中星微公司的 dsp 芯片,而 ovs11+的芯片的攝像頭則比較難找到。考慮到中星微的市場普及率,本系統(tǒng)中采用了 3 zc030 x 的 dsp 芯片。 2.2.2 嵌入式處理器的選擇 嵌入式處理器是嵌入式系統(tǒng)的核心,所以選擇一款合適的嵌入式處理器則是非常重要 的。嵌入式處理器的選擇應(yīng)該從應(yīng)用工程背景,處理器性能,處理器功耗,開發(fā)成本,開 發(fā)難易程度等方面綜合考慮。 目前,市面上的嵌入式處理器種類十分多,據(jù)不完全統(tǒng)計,全世界嵌入式處理器的品 種總量己經(jīng)超過一千多種,典型的嵌入式處理器有 arm、mips、p
16、owerpc 等等。 arm 公司是全球領(lǐng)先的 16/32 位 risc 微處理器產(chǎn)權(quán)設(shè)計供應(yīng)商,在移動通信、手持 設(shè)備領(lǐng)域上占主導(dǎo)地位;mips 技術(shù)公司是一家設(shè)計制造高性能、高檔次的嵌入式 32/64 位 處理器廠商。powerpc 以其可伸縮性好和方便靈活的特點也成為應(yīng)用十分廣泛的嵌入式處 理器,從高端的工作站、服務(wù)器到臺式計算機(jī)系統(tǒng),從消費(fèi)類電子產(chǎn)品到大型通信設(shè)備, 無所不包。根據(jù)本系統(tǒng)的需求分析,需要對視頻數(shù)據(jù)進(jìn)行采集和傳輸,對處理器的性能有 一定要求。由于 arm 價格低廉,功耗低,處理能力較強(qiáng),所以決定選用 arm 作為本系 統(tǒng)的核心處理器。 本系統(tǒng)硬件平臺是基于 arm9 的
17、s3c2440a 開發(fā)板,這款開發(fā)板是三星公司主要為高 性價比,低功耗的應(yīng)用場合而設(shè)計,其資源豐富,十分適合本系統(tǒng)開發(fā)。 2.2.3 嵌入式操作系統(tǒng)的選擇 嵌入式操作系統(tǒng)與嵌入式系統(tǒng)密不可分,是嵌入式系統(tǒng)的一個十分重要的組成部分, 一個嵌入式系統(tǒng)如果沒有嵌入式操作系統(tǒng)的支持,其實現(xiàn)的應(yīng)用將變得十分有限,嵌入式 系統(tǒng)的優(yōu)勢也將不能發(fā)揮出來。嵌入式操作系統(tǒng)能有效管理越來越復(fù)雜的系統(tǒng)資源,能夠 把硬件虛擬化,使得開發(fā)人員從繁忙的驅(qū)動程序移植和維護(hù)中解脫出來并且能夠提供庫函 數(shù)、驅(qū)動程序、工具集以及應(yīng)用程序,大大提高了應(yīng)用系統(tǒng)的開發(fā)效率。嵌入式操作系統(tǒng) 的選擇主要從以下幾個方面考慮: (l)操作系統(tǒng)的
18、硬件支持,包括操作系統(tǒng)是否支持目標(biāo)硬件平臺,基于該選擇的操作系 統(tǒng)上開發(fā)的嵌入式應(yīng)用軟件是否具有很好的移植性; (2)開發(fā)工具的支持程度,包括在線仿真器、編譯器、匯編器、連接器、調(diào)試器等能否 支持操作系統(tǒng); (3)應(yīng)用需求,包括操作系統(tǒng)的性能、兼容性、技術(shù)支持等。 目前嵌入式操作系統(tǒng)己經(jīng)從簡單走向成熟,主要有 vxworks、windowsce 和嵌入式 linux 等。 windows ce 是微軟公司開發(fā)的一個 32 位、多任務(wù)、多線程的嵌入式操作系統(tǒng)。它可 以用在手機(jī)、機(jī)頂盒、智能手持設(shè)備、網(wǎng)關(guān)、數(shù)字媒體設(shè)備、工業(yè)控制等多種場合。 windows ce 支持 x86、arm、mips 和
19、 sh 四種處理器架構(gòu)。并支持 wifi,usb 2.0 等新型設(shè) 備,并具有強(qiáng)大的多媒體功能。 windows ce 操作系統(tǒng)是模塊化設(shè)計的,整個系統(tǒng)被劃分為數(shù)百個模塊,嵌入式系統(tǒng)開 4 發(fā)人員可以根據(jù)系統(tǒng)的需要,來選擇自己需要的模塊,從而達(dá)到減小系統(tǒng)體積目的。一個 最小的 windows ce 可運(yùn)行內(nèi)核只需要幾百 kb。而一個功能完備的 windows ce 映像也不會 超過 64mb。 與其他嵌入式操作系統(tǒng)相比,windows ce 的優(yōu)點有如下幾點: 學(xué)習(xí) / 使用簡單:微軟提供了方便的 ide 和開發(fā)工具,對于 os 的定制、裁減、交叉 編譯等都相對簡單。此外,windows ce
20、 的應(yīng)用程序開發(fā)接口也是 win32 api,與桌面 windows 的基本一致。這也方便了桌面 windows 開發(fā)人員向 windows ce 嵌入式開發(fā)過渡。 圖形界面優(yōu)秀:這個理由或許是許多人員選用 windows ce 的主要原因。windows ce 的圖形和多媒體能力是非常優(yōu)秀的,可以方便的支持多種視頻音頻格式。此外還支持 directx 多媒體接口,這對于開發(fā)多媒體應(yīng)用(例如電子地圖導(dǎo)航、多媒體播放器等)非 常方便。 應(yīng)用集成度高:windows ce 自帶了很多應(yīng)用程序,例如 web 瀏覽器,多媒體播放器, office 文件察看器等。這對于快速的開發(fā)一款產(chǎn)品相當(dāng)有用。此外,
21、互聯(lián)網(wǎng)上有數(shù)以萬計 的為 windows ce 開發(fā)的應(yīng)用程序。 vxworks 是 windriver 公司的實時操作系統(tǒng),它支持各種工業(yè)標(biāo)準(zhǔn),包括 posix、ansic 和 tcp/ip 網(wǎng)絡(luò)協(xié)議。vxworks 運(yùn)行系統(tǒng)的核心是一個高效率的微內(nèi)核,該微 內(nèi)核支持各種實時功能,包括快速多任務(wù)處理、中斷支持、搶占式和輪轉(zhuǎn)式調(diào)度。微內(nèi)核 設(shè)計減輕了系統(tǒng)負(fù)載并可快速響應(yīng)外部事件。目前在全世界裝有 vxworks 系統(tǒng)的智能設(shè)備 數(shù)以百萬計,其應(yīng)用范圍遍及互聯(lián)網(wǎng)、電信和數(shù)據(jù)通信、數(shù)字影像、網(wǎng)絡(luò)、醫(yī)學(xué)、計算機(jī) 外設(shè)、汽車、火控、導(dǎo)航與制導(dǎo)、航空、指揮、控制、通信和情報、聲納與雷達(dá)、空間與 導(dǎo)彈系統(tǒng)
22、、模擬和測試等眾多領(lǐng)域。 linux 是個與生俱來的網(wǎng)絡(luò)操作系統(tǒng),成熟而且穩(wěn)定。linux 是源代碼開放軟件,任何 人都可以修改它,或者用它開發(fā)自己的產(chǎn)品。linux 系統(tǒng)是可以定制的,系統(tǒng)內(nèi)核目前己 經(jīng)可以做得很小。linux 作為一種可剪裁的軟件平臺系統(tǒng),是發(fā)展未來嵌入設(shè)備產(chǎn)品的絕 佳資源。但 linux 內(nèi)核復(fù)雜,產(chǎn)品開發(fā)周期相對較長。 本系統(tǒng)對操作系統(tǒng)的要求是需要有強(qiáng)大的網(wǎng)絡(luò)支持,最重要一點就是開發(fā)周期短,容 易上手。所以綜合考慮,本系統(tǒng)將采用嵌入式 windowsce 操作系統(tǒng)來進(jìn)行開發(fā)。 2.2 開發(fā)環(huán)境及工具 2.2.1 arm9 s3c2440a 開發(fā)板 (1)板子布局 5 圖
23、 2-1 s3c2440a 開發(fā)板整體布局 表 2-1 s3c2440a 開發(fā)板開參數(shù)說明 序號說明 1 12v 電源接口 2 電源開關(guān) 3 com1,串口 0(rs232) 4 標(biāo)準(zhǔn) jatg 5 gpio 引出接口 6com2 7 sd/mmc 卡 8 音頻輸入,mic 9 音頻輸出 10 usb 從設(shè)備 11 usb 主設(shè)備,用來連接 usb 鼠標(biāo),鍵盤,優(yōu)盤等 12 10m 以太網(wǎng)口 13 復(fù)位鍵 6 續(xù)表2-1 s3c2440a開發(fā)板開參數(shù)說明 14 k1-4:用戶按鈕 15 rtc 電源,時鐘備份電池 16 核心板下載接口 17 lcd 接口 18 camera 攝像頭接口 其主要
24、的特性是: cpu處理器 -samsung s3c2440a,主頻400mhz,最高533mhz sdram 內(nèi)存 -在板64m sdram - 32bit 數(shù)據(jù)總線 - sdram 時鐘頻率高達(dá)100mhz flash存儲 - 在板64m nand flash, 掉電非易失 lcd 顯示屏 - 支持黑白、4 級灰度、16 級灰度、256 色、64k 色、真彩色tft 液晶觸目屏,尺寸 為3.5 寸,屏幕分辨率為800 x600 象素; 規(guī)格尺寸 - 120 x 100(mm) (2)sdram與falsh 嵌入式系統(tǒng)存儲器有sdram和flash,在本系統(tǒng)中用到兩片32m的sdram和一片6
25、4m的 nandflash。sdram是嵌入式系統(tǒng)的內(nèi)存,具有單位空間存儲容量大和價格便宜的優(yōu)點,已 廣泛應(yīng)用在各種嵌入式系統(tǒng)中。當(dāng)系統(tǒng)啟動時,cpu首先從復(fù)位地址0x0000000處讀取啟動 代碼,在完成系統(tǒng)的初始化后,程序代碼一般應(yīng)調(diào)入sdram中運(yùn)行,以提高系統(tǒng)的運(yùn)行速度。 同時,系統(tǒng)及用戶堆棧、運(yùn)行數(shù)據(jù)也都放在sdram中。 flash 存儲器是一種可電擦寫,掉電后信息不丟失的存儲器,它具有低功耗、大容量、 擦寫速度快、可整片或分扇區(qū)在系統(tǒng)編程(燒寫)、擦除等特點,并且可由內(nèi)部嵌入的算法 完成對芯片的操作,因而在各種嵌入式系統(tǒng)中得到了廣泛的應(yīng)用。作為一種非易失性存儲 器,flash 在
26、系統(tǒng)中通常用于存放程序代碼、常量表以及一些在系統(tǒng)掉電后需要保存的用 戶數(shù)據(jù)等。常用的 flash 為 8 位或 16 位的數(shù)據(jù)寬度,編程電壓為單 3.3v。主要的生產(chǎn)廠 商為 atmel、amd、hyundai、三星等,它們生產(chǎn)的同型器件一般都具有相同的電氣特性和 封裝形式,可通用。目前使用的兩種主要的 flash 為 nor 型和 nand 型。nand 型 flash 能 夠提供極高的單元密度,寫入和擦除速度非???,而且一般 nand 型 flash 的存儲容量很大。 7 nor 的特點是芯片內(nèi)執(zhí)行,這樣應(yīng)用程序可以直接在 flash 內(nèi)運(yùn)行,不必再把代碼讀到系 統(tǒng) ram 中,nor 的
27、傳輸效率很高,在 1 一 4mb 的小容量時具有很高的成本效益,但是很低 的寫入和擦除速度大大影響了它的性能。 由于制造商的原因,本系統(tǒng)使用到的 s3c2440a 開發(fā)板只有 nand falsh,所以操作 系統(tǒng)的啟動代碼、操作系統(tǒng)和應(yīng)用程序只能一起燒寫到 nand flash 中。 2.2.2 platform builder 5.0 + visual studio 2005 (1)platform builder 5.0 platformbuilder 是為基于 mierosoftwindows ce.net 操作系統(tǒng)構(gòu)建定制嵌入平臺 而提供的集成開發(fā)環(huán)境(ide)。 platformbu
28、llder 附帶有設(shè)計、創(chuàng)建、構(gòu)建、測試和調(diào)試 一個基于 windowsce 的平臺所需的所有開發(fā)工具。本設(shè)計同樣離不開這個工具,它是定制 我們嵌入式平臺 wince 映像唯一工具。 platformbuilder 中的主要特性包括: 新的 platformwizard(平臺向?qū)?:可幫助您創(chuàng)建一個新的平臺。 基礎(chǔ)配置:為各種流行的設(shè)備類別預(yù)置的定制操作系統(tǒng),為自定義操作系統(tǒng)的創(chuàng)建提供 了一個起點。 仿真器(emulator):通過硬件仿真加速和簡化了系統(tǒng)的開發(fā),使用戶可以在開發(fā)工作站 上對平臺和應(yīng)用程序進(jìn)行測試。 bspwizard(bsp 向?qū)?:提高了 bsp(主板支持軟件包)創(chuàng)建過程的
29、效率。其中 bsp 是 wince 操作系統(tǒng)提供出來的一個自由度,這個是 wince 適應(yīng)不同硬件的機(jī)制: 適配層以 wince 的驅(qū)動接口要求,完成不同板級驅(qū)動。這樣定制出來的 wince 可以在 任何的硬件環(huán)境一下運(yùn)轉(zhuǎn) 目錄:一個操作系統(tǒng)特性的列表,您可以使用列表中的特性對平臺進(jìn)行定制。 willdowscetestkit(測試工具包):提供了一個驅(qū)動程序測試工具集。 內(nèi)核調(diào)試器:可以對自定義的操作系統(tǒng)映像進(jìn)行調(diào)試,并且向用戶提供有關(guān)映像性能的 信息。 應(yīng)用程序調(diào)試器:可以在自定義的操作系統(tǒng)映像上對應(yīng)用程序進(jìn)行調(diào)試。 自動化的依靠性檢查:可以確保支持平臺配置所需的所有特性都包括在操作系統(tǒng)映
30、像之 中。 導(dǎo)出向?qū)?exportwizard):可以向其他 platformbuilde:用戶導(dǎo)出自定義的目錄 (catalog)特性。 導(dǎo)出 sdk 向?qū)?exportsdkwizard):使用戶可以導(dǎo)出一個自定義的軟件開發(fā)工具包(sdk)。 這個也是重要的環(huán)節(jié),進(jìn)行 wince 開發(fā)的,sdk 是需要 pb 針對每個項目導(dǎo)出的,每個項目 是不同,當(dāng)然肯定一種冗余的解決方案。但是對于每個項目而言,它們是專用且方便的。 遠(yuǎn)程工具:可以執(zhí)行同基于 windowsce 的目標(biāo)設(shè)備有關(guān)的各種調(diào)試任務(wù)和信息收集任務(wù)。 8 其界面下圖: 圖 2-3 platform builder 5.0 界面 (2
31、)visual studio 2005 visual studio 是一套完整的開發(fā)工具集,用于生成 asp.net web 應(yīng)用程序、xml web services、桌面應(yīng)用程序和移動應(yīng)用程序。visual basic、visual c+、visual c# 和 visual j# 全都使用相同的集成開發(fā)環(huán)境 (ide),利用此 ide 可以共享工具且有助于 創(chuàng)建混合語言解決方案。另外,這些語言利用了 .net framework 的功能,通過此框架可 使用簡化 asp web 應(yīng)用程序和 xml web services 開發(fā)的關(guān)鍵技術(shù)。本系統(tǒng)利用它來開發(fā) 主要是因為其集成了智能設(shè)備程序
32、的開發(fā)工具以及仿真程序,開發(fā)人員調(diào)試程序只需在指 定的仿真程序里面運(yùn)行調(diào)試,而不用每次都將程序下載到板子上。其界面如下: 9 圖 2-4 visual studio 2005 界面 2.3 開發(fā)流程 嵌入式系統(tǒng)是一個復(fù)雜而專用的系統(tǒng),在進(jìn)行系統(tǒng)開發(fā)之前,必須對系統(tǒng)的功能需求 進(jìn)行分析并明確定義系統(tǒng)的外部功能和內(nèi)部軟硬件結(jié)構(gòu),然后對系統(tǒng)進(jìn)行總體結(jié)構(gòu)設(shè)計和 系統(tǒng)的各個模塊分割,分別實現(xiàn)硬件的規(guī)劃與設(shè)計,應(yīng)用軟件的規(guī)劃與設(shè)計以及操作系統(tǒng) 的剪裁。在完成操作系統(tǒng)的剪裁和應(yīng)用軟件的開發(fā)后,通常還需要將它們移植到同系統(tǒng)結(jié) 構(gòu)的硬件平臺上進(jìn)行系統(tǒng)調(diào)試、功能模擬,明確系統(tǒng)調(diào)試無誤后,才將操作系統(tǒng)及相關(guān)軟 件移
33、植到自己的專用硬件平臺上,再進(jìn)行系統(tǒng)整體功能測試,其流程如圖 2-5 所示。 圖 2-5 整體開發(fā)流程圖 10 3.嵌入式圖像采集與傳輸程序的設(shè)計 3.1 關(guān)鍵技術(shù) 3.1.1 bootloader bootloade 是系統(tǒng)加電后運(yùn)行的第一段代碼。一般只是在啟動時運(yùn)行很短時間,然而 對一個嵌入式系統(tǒng)來說,這一部分卻是整個系統(tǒng)的一個無比重要的組成部分,不可缺少。 在一般嵌入式系統(tǒng)中,系統(tǒng)復(fù)位或者加電后通常從地址 ox0000000o 處開始執(zhí)行,而這個地 址一般正是存放的 bootloader 啟動代碼。通過這段程序,可以初始化硬件設(shè)備、建立內(nèi)存 空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合
34、適的狀態(tài),以便為最終加載操作系統(tǒng) 內(nèi)核準(zhǔn)備好正確的環(huán)境。 3.1.2 eboot eboot 是通過以太網(wǎng)下載 wince 映像時的起作用的代碼。它通過 usb 下載工具被下載 到 sdram 和 platformbuilder 配合完成對 nandflash 的 wince 映像的燒寫工作。它是 由 ms 提供好的代碼,不需要進(jìn)行任何修改。 3.1.3 攝像頭 sdk 接口函數(shù) 本系統(tǒng)所用攝像頭的驅(qū)動程序已由開發(fā)商編寫好的了,并將其封裝成動態(tài)鏈接庫形式, 即 zc030x.dll 文件。我們只需調(diào)用其提供的接口函數(shù)就可以實現(xiàn)其相應(yīng)的功能。 zc030x sdk 接口函數(shù)說明如下表: 表 3-
35、1 zc030x sdk 接口函數(shù)說明 函數(shù)名稱函數(shù)說明形式參數(shù)參數(shù)說明返回值 capinitcamera 初始化并 返回當(dāng)前 活動的攝 象頭數(shù)目 void 無 當(dāng)前活動的攝 象頭數(shù)目,最多 可支持 8 個攝 象頭 int index 攝象頭索引 capgetcurrentversion 獲得當(dāng)前 驅(qū)動程序 版本信息 unsigned char 用來接收版本信 息的字符緩沖區(qū) 當(dāng)前驅(qū)動程序 版本信息字符 串長度 11 *pbufout int lenout 字符緩沖區(qū)長度 int index 攝象頭索引 int *pformat 用來接收視頻格 式的緩沖區(qū) capgetvideoformat
36、獲取當(dāng)前 視頻格式 和尺寸模 式 int *psizemode 用來接收尺寸模 式的緩沖區(qū) 0 表示調(diào)用成 功,其他值表示 調(diào)用失敗 int index 攝象頭索引 int format 要設(shè)置的視頻格 式 (video_palette_ rgb565 - video_palette _jpeg) capsetvideoformat 設(shè)置當(dāng)前 視頻格式 和尺寸模 式 int sizemode 要設(shè)置的尺寸模 式 (video_size_vga , video_size_sif) 0 表示調(diào)用成 功,其他值表示 調(diào)用失敗 int index 攝象頭索引 unsigned char *pframe
37、buf 用來接收一幀視 頻圖象的緩沖區(qū) unsigned int bufferlen pframebuf 緩沖 區(qū)長度 capgetpicture 同時獲取 一幀視頻 圖象和 jpeg 圖片 unsigned char *pjpgbuf 用來接收一幀 jpeg 圖片的緩沖 區(qū) 0 表示調(diào)用成 功,其他值表示 調(diào)用失敗 12 unsigned int jpglen pjpgbuf 緩沖區(qū) 長度 pdword pdwactualou t 用來接收返回長 度的整型數(shù)組地 址 int index 攝象頭索引 unsigned char *pframebuf 用來接收一幀視 頻圖象的緩沖區(qū) capgra
38、bframe 獲取一幀 視頻圖象 unsigned int bufferlen 緩沖區(qū)長度 一幀視頻圖象 的實際長度(字 節(jié)數(shù)) int index 攝象頭索引 unsigned char *pframebuf 用來接收一幀 jpeg 靜態(tài)圖片的 緩沖區(qū) capgetlastjpeg 獲取一幀 jpeg 靜態(tài) 圖片 unsigned int bufferlen 緩沖區(qū)長度 一幀 jpeg 靜態(tài) 圖片的實際長 度(字節(jié)數(shù)) capstartcamera 啟動攝象 頭開始捕 獲視頻 int index 攝象頭索引0 表示調(diào)用成 功,其他值表示 調(diào)用失敗 capstopcamera 停止攝象 頭捕獲
39、視 頻 int index 攝象頭索引0 表示調(diào)用成 功,其他值表示 調(diào)用失敗 capclosecamera 關(guān)閉所有 活動的攝 象頭 void 無無 13 3.1.4 mfc 微軟基礎(chǔ)類庫 它是本文應(yīng)用程序的框架基礎(chǔ),很多軟件形式都是基于 mfc 的,當(dāng)然它也帶來很多 windows 編程的便利。什么是 mfc? mfc 是 application framework 類庫,更確切的定義是:微軟公司將數(shù)以千計的 windowsapi,利用面向?qū)ο蟮脑砗?c+語言,有邏輯的組織起來。這種有邏輯的組織使 得 mfc 是一組凝聚性強(qiáng)、組織性強(qiáng)的類庫。如果要利用 mfc 開發(fā)你的應(yīng)用程序,必須同時
40、 引進(jìn)數(shù)個必要的類,互相搭配支持。而這些類所實例后的對象關(guān)系在 mfc 設(shè)計時,便己經(jīng) 存在,信息的流動機(jī)制也都已經(jīng)設(shè)定。application framework 對軟件設(shè)計帶來的革命性 的好處是:程序的模型已經(jīng)存在,而且是標(biāo)準(zhǔn)、簡潔、高效的。程序員只要依照各自的需求, 在 application framework 的派生類中改寫虛函數(shù),或者添加新的成員函數(shù),以滿足各自 的應(yīng)用需要。這將大大縮短程序設(shè)計的時間,使得程序員可以將更多的精力花在程序特定 的功能實現(xiàn)上,而不是關(guān)注繁瑣的、重復(fù)的 windows 程序框架的搭建而且使得程序設(shè)計的 方法標(biāo)準(zhǔn)化,程序的可讀性大大增強(qiáng)。 mfc 將具有相
41、當(dāng)固定程度的 winmain 內(nèi)部操作包含在 cwinapp 中,將有著相當(dāng)固定行 為的 wndproc 內(nèi)部操作包裝在 cframewind 或 cdialog 中。換句話說:cwinapp 代表程序的 主體。cframewnd 或 cdialog 代表程序的主窗口。雖然,winmain 內(nèi)部操作和 wndproc 內(nèi)部 操作有著相當(dāng)程度的固定行為,但是它們畢竟需要針對不同的應(yīng)用程序而有某種變化。所 以,你必須以這兩個類為基礎(chǔ),派生出自己的類 cmywinapp 和 cmyframewnd,并改寫其中 部分成員函數(shù)(虛函數(shù))或添加成員函數(shù)。mfc 的程序員需要做的只是根據(jù)自己的應(yīng)用需要, 在
42、 mfc 合適的類下派生出子類,修改虛函數(shù)、添加新成員函數(shù)和添加消息響應(yīng)函數(shù)。 3.1.5 tcp 協(xié)議 tcp 位于 osi 七層模型中的第四層傳輸層,是一種面向連接的、可靠的、基于字 節(jié)流的通信協(xié)議。一個 tcp 連接有發(fā)送方的 ip 地址與 tcp 端口號和接收方的 ip 地址與 tcp 端口號標(biāo)識。建立一個 tcp 連接的作用就是讓發(fā)送方和接收方都做好準(zhǔn)備,準(zhǔn)備好之 后就開始數(shù)據(jù)傳輸??偟膩碚f,tcp 具有以下特點: 14 表 3-2 tcp 特點 主要特性含義 (1)面向流的投遞 服務(wù) 應(yīng)用程序之間傳輸?shù)臄?shù)據(jù)可視為無結(jié)構(gòu)的字節(jié)流,流投遞服務(wù)保 證收發(fā)的字節(jié)順序完全一致。 (2)面向連
43、接的投 遞服務(wù) 數(shù)據(jù)傳輸之前,tcp 模塊之間需建立連接,其后的 tcp 報文在此連 接基礎(chǔ)上傳輸。 (3)可靠傳輸服務(wù) 接收方根據(jù)收到的報文中的校驗和,判斷傳輸?shù)恼_性:如果正 確,進(jìn)行應(yīng)答,否則丟棄報文。發(fā)送方如果在規(guī)定的時間內(nèi)未能 獲得應(yīng)答報文,自動進(jìn)行重傳。 (4)緩沖傳輸 tcp 模塊提供強(qiáng)制性傳輸(立即傳輸)和緩沖傳輸兩種手段。緩沖 傳輸允許將應(yīng)用程序的數(shù)據(jù)流積累到一定的體積,形成報文,再 進(jìn)行傳輸。 (5)全雙工傳輸tcp 模塊之間可以同時收發(fā)數(shù)據(jù)流。 (6)流量控制 tcp 模塊提供滑動窗口機(jī)制,支持收發(fā) tcp 模塊之間的端到端流量 控制。 由于 udp 協(xié)議是無連接的,不可
44、靠的傳輸,但也正是因為其是無連接的,而且不提供 像 tcp 那樣的可靠機(jī)制,流控制以及錯誤恢復(fù)功能,所以比 tcp 負(fù)載消耗少,傳輸速度快, 但也考慮到本系統(tǒng)的數(shù)據(jù)傳輸必需做到準(zhǔn)確無誤,所以本系統(tǒng)決定使用 tcp 協(xié)議。 3.1.6 windows socket winsock 并不是一種網(wǎng)絡(luò)協(xié)議,它只是一個網(wǎng)絡(luò)編程接口,也就是說,它不是協(xié)議, 但是它可以訪問很多種網(wǎng)絡(luò)協(xié)議,你可以把他當(dāng)作一些協(xié)議的封裝?,F(xiàn)在的 winsock 已經(jīng) 基本上實現(xiàn)了與協(xié)議無關(guān)。你可以使用 winsock 來調(diào)用多種協(xié)議的功能。那么,winsock 和 tcp/ip 協(xié)議到底是什么關(guān)系呢?實際上,winsock 就
45、是 tcp/ip 協(xié)議的一種封裝,你可 以通過調(diào)用 winsock 的接口函數(shù)來調(diào)用 tcp/ip 的各種功能.例如我想用 tcp/ip 協(xié)議發(fā)送數(shù) 據(jù),我就可以使用 winsock 的接口函數(shù) send()來調(diào)用 tcp/ip 的發(fā)送數(shù)據(jù)功能,至于具體 怎么發(fā)送數(shù)據(jù),winsock 已經(jīng)幫你封裝好了這種功能。 15 internet 套接字有兩種類型:一種是“stream sockets”(流格式),另外一種是 “datagram sockets”(數(shù)據(jù)報格式)。數(shù)據(jù)報套接字有時也叫“無連接套接字” 。流式套接 字是可靠的雙向通訊的數(shù)據(jù)流,自身提供一種錯誤控制機(jī)制。本系統(tǒng)正是采用流式套接字
46、進(jìn)行設(shè)計,圖 3-1 為面向 tcp 的網(wǎng)絡(luò)通信流程。 圖 3-1 面向 tcp 的網(wǎng)絡(luò)通信流程 進(jìn)行 socket 編程時,首先要調(diào)用 socket 函數(shù)來進(jìn)行初始化并創(chuàng)建一個套接字,函數(shù) 原型為 int socket(int domain, int type, int protocol):其中 domain 應(yīng)該設(shè)置成 “af_inet” ,參數(shù) type 是選擇用哪一種套接字,是 sock_stream 類型還是 sock_dgram 類 型,本系統(tǒng)中使用的是流式套接字,所以選擇 sock_stream。最后,把 protocol 設(shè)置為 “0” 。socket()調(diào)用成功將返回一個在后
47、面的系統(tǒng)調(diào)用中用到的 socket 描述符,失敗返回 -1。 當(dāng)套接字成功創(chuàng)建之后,要將套接字和機(jī)器上的一定的端口關(guān)聯(lián)起來。函數(shù)原型為 int bind(int sockfd, struct sockaddr*my_addr, int addrlen);其中第一個參數(shù)為前 面調(diào)用 socket 函數(shù)所返回的套接字描述符,第二個參數(shù)為 sockaddr 類型的指針保存了地 址和端口的信息,第三個參數(shù)一般為 sizeof(struct sockaddr)。調(diào)用成功后將可以在該 端口監(jiān)聽服務(wù)請求。sockaddr_in 結(jié)構(gòu)如下: 16 struct sockaddr_in short sin_fa
48、mily ; u_short sin_prot ; struct in_addr sin_addr ; char sin_sero8 ; 其中,sin_family 一般為 af_inet,代表 internet(tcp/ip)地址族;sin_port 代表連 接的端口號,sin_addr 代表 ip 地址。 在調(diào)用 bind()的時候不可以使用小于 1024 的端口號,因為所有小于 1024 的端口號 都被系統(tǒng)保留,可以選擇從 1024 到 65535 中沒有被其它應(yīng)用程序占用的端口號即可。要使 socket 處于被動的監(jiān)聽模式,可以使用 listen 函數(shù),并為該 socket 建立一個輸
49、入數(shù)據(jù)隊 列,將到達(dá)的服務(wù)請求保存在此隊列中,直到用戶應(yīng)用程序處理它們。函數(shù)調(diào)用的原型為: int listen(int sockfd, int backlog);backlog 指定在請求隊列中允許的最大請求數(shù), 進(jìn)入的連接請求將在隊列中等待 accept()它們。backlog 對隊列中等待服務(wù)的請求的數(shù)目 進(jìn)行了限制,大多數(shù)系統(tǒng)缺省值為 20,在本系統(tǒng)中設(shè)置為 8。如果一個服務(wù)請求到來時, 輸入隊列已滿,該 socket 將拒絕連接請求,客戶將收到一個出錯信息。當(dāng)出現(xiàn)錯誤時 listen 函數(shù)返回-1。服務(wù)器接收客戶的連接請求使用 accept()函數(shù)。在建立好輸入隊列后, 服務(wù)器就調(diào)用
50、 accept 函數(shù),然后睡眠并等待客戶的連接請求。函數(shù)原型為:int accept(int sockfd,void *addr,int *addrlen);addr 通常是一個指向 sockaddr_in 變 量的指針,該變量用來存放提出連接請求服務(wù)的主機(jī)的信息,整型指針變量 addrten 一般 為 sizeof(struct sockaddr_in)的,出現(xiàn)錯誤時 accept 函數(shù)返回-l。當(dāng) accept 函數(shù)監(jiān)視 的 socket 收到連接請求時,socket 執(zhí)行體將建立一個新的 socket,執(zhí)行體將這個新 socket 和請求連接進(jìn)程的地址聯(lián)系起來,收到服務(wù)請求的初始 soc
51、ket 仍可以繼續(xù)在以前 的 socket 上監(jiān)聽,同時可以在新的 socket 描述符上進(jìn)行數(shù)據(jù)傳輸操作。 函數(shù) send()和 recv()用于流式套接字或者數(shù)據(jù)報套接字的通訊。函數(shù) send()的原型 為 int send(int sockfd, const void *msg, int len,int flags s)。sockfd 是準(zhǔn) 備發(fā)送數(shù)據(jù)的套接字描述符。msg 是指發(fā)送的數(shù)據(jù)的指針。len 是數(shù)據(jù)的長度。把 flags 設(shè) 置為 0 就可以了。函數(shù) recv()和 send()用法差不多, int recv(int sockfd,void*buf, int len,unsi
52、gned int flags);buf 是要讀的信息的緩沖,len 是緩 沖的最大長度,flags 可以設(shè)置為 0。成功調(diào)用后 recv()將返回實際讀入緩沖的數(shù)據(jù)的字 節(jié)數(shù),錯誤的時候返回-1。 通信完成之后將要關(guān)閉套接字,以防止套接字上更多的數(shù)據(jù)的讀寫。任何在另一端讀 寫套接字的企圖都將返回錯誤信息。close(sockfd)函數(shù)可以實現(xiàn)。 17 3.2 方案總體設(shè)計 圖 3-2 總體設(shè)計圖 如圖 3-2 所示,本設(shè)計主要由三大部分組成,usb 攝像頭通過 usb 接口與 amr 開發(fā) 板(上位機(jī))相連,pc 機(jī)(下位機(jī))通過網(wǎng)絡(luò)接口(網(wǎng)卡)和以太網(wǎng)線與 arm 開發(fā)板相連。 攝像頭負(fù)責(zé)對
53、圖像數(shù)據(jù)的采集,然后將數(shù)據(jù)傳送到運(yùn)行在 wince 上的服務(wù)端程序,服務(wù)端 程序負(fù)責(zé)將采集到的圖像數(shù)據(jù)進(jìn)行處理,然后再將其傳送到運(yùn)行在 pc 機(jī)上客戶端程序并顯 示出來。 3.3 wince 驅(qū)動架構(gòu) 在 wince 下的驅(qū)動開發(fā),需要面向的是上下兩個界面:wince 的驅(qū)動結(jié)構(gòu)和具體硬件的 datasheet。所以首先我們必須深入了解一下 wince 整個系統(tǒng)驅(qū)動架構(gòu)。在 wince 下驅(qū)動模 型分為本機(jī)驅(qū)動模型和流接口驅(qū)動模型。本機(jī)驅(qū)動程序用于低級、內(nèi)置設(shè)備,提供一組微 軟定制的接口,可以通過移植和定制微軟提供的驅(qū)動樣例來實現(xiàn)。 本地驅(qū)動分為單片驅(qū)動程序和分層驅(qū)動程序。單片驅(qū)動程序直接將硬
54、件功能傳遞給操 作系統(tǒng),這類驅(qū)動程序在發(fā)展的過程中已越來越少見;分層驅(qū)動程序:是微軟提供的一種本 機(jī)驅(qū)動程序的設(shè)計模型。分層設(shè)計是作為一個平臺提供商微軟常用手段,來逐步透明差異 和提供接口規(guī)范。分層驅(qū)動程序的優(yōu)點:便于移植;把很多瑣碎的工作和通用的過程放在 mdd 中,pdd 中實現(xiàn)與特定硬件設(shè)備相關(guān)聯(lián)的功能;一個 mdd 可以和多個 pdd 相連,mdd 可 以管理多個同類的設(shè)備。通過分層的思想,我們可以知道,如果 wince 系統(tǒng)頭提供對攝像 頭的 mdd 庫,那么我們就只需要針對特定的攝像頭類型進(jìn)行 pdd 層的改寫就可以實現(xiàn)攝像 頭的驅(qū)動了。但是很遺憾,在 wince6.0 以前的版本
55、中,都沒有提供對攝像頭的 mdd 庫。這 時我們就需要用到另一種流接口驅(qū)動模型來實現(xiàn)了。 18 流接口驅(qū)動程序是一種更為通用的基本設(shè)備驅(qū)動類型,它需要實現(xiàn)一組固定的流接口 函數(shù),所有的 wince 下的設(shè)備驅(qū)動都可以采用這個模型來實現(xiàn),流接口函數(shù)既可以是不分 層的架構(gòu),也可以使用分層的架構(gòu),如圖 3-3 所示。同時,流接口驅(qū)動既可以管理內(nèi)建 (builtin)設(shè)備,也可以管理可安裝(installable)設(shè)備,既可以在設(shè)備啟動的時候加 載,也可以在需要時動態(tài)加載。本設(shè)計我們使用分層的流接口驅(qū)動模型。 圖 3-3 流接口驅(qū)動的架構(gòu) 流接口驅(qū)動程序是基于動態(tài)鏈接庫的。其作用是將程序執(zhí)行需要用到的
56、代碼函數(shù)關(guān)聯(lián) 起來。因此,我們大可以將 mdd 庫與 pdd 庫鏈接起來,形成一個動態(tài)鏈接庫文件。而這個 dll 文件就是我們所需的攝像頭驅(qū)動了。我們只需在注冊表中進(jìn)行相關(guān)鍵值的設(shè)置,就能 使系統(tǒng)在啟動的時候加載指定的攝像頭的驅(qū)動,從而達(dá)到系統(tǒng)能夠識別 usb 攝像頭的目的 了。其模型如圖 3-4 所示,至于本設(shè)計所用到的中星微 zc030x 系列攝像頭的 mdd 庫與 pdd 庫的編寫,是需要根據(jù)具體硬件的 datasheet 來進(jìn)行設(shè)計與開發(fā)的,是一個很復(fù)雜并長時 間的過程。所以在這里就不對其進(jìn)行更深入的論述了。本設(shè)計用到的攝像頭驅(qū)動是由中星 微開發(fā)商提供,能夠直接從網(wǎng)上下載得到。 19
57、圖 3-4 攝像頭驅(qū)動程序的交互 3.4 圖像采集模塊設(shè)計 圖像數(shù)據(jù)是通過攝像頭來采集的,那服務(wù)端如何來調(diào)用攝像頭成為了問題的關(guān)鍵。硬 件與軟件之間的聯(lián)系,必須通過驅(qū)程來實現(xiàn)。上文提到,攝像頭的驅(qū)動已經(jīng)封裝成動態(tài)鏈 接庫 dll 文件了,而且還提供了所有的功能接口函數(shù)。所以,我們只要直接調(diào)用其接口函 數(shù)就能夠?qū)崿F(xiàn)相應(yīng)的功能。 3.4.1 打開攝像頭設(shè)備 打開攝像頭設(shè)備,只需要直接調(diào)用 capstartcamera(index)函數(shù)就能夠?qū)崿F(xiàn)了這個。 因為這個函數(shù)的功能已經(jīng)被封裝好了,至于其具體的實現(xiàn)過程我們在這里就不進(jìn)行深究了。 我們只要利用其返回的值來判斷是否調(diào)用成功,然后分別作相應(yīng)的處理就
58、可以了。其代碼 如下: if (capstartcamera(index) != 0) /判斷攝像頭是否打開成功 goto finish; 3.4.2 始化攝像頭設(shè)備 在上文 3.13 節(jié)介紹的 zc030x sdk 接口函數(shù)說明表格中可以得知,要初始化攝像頭, 我們可以直接調(diào)用其提供的 capinitcamera()接口函數(shù)。該函數(shù)能夠初始化攝像頭并返回 當(dāng)前活動的攝像頭數(shù)目。我們只要設(shè)置一個變量來接收這個函數(shù)返回的值,然后根據(jù)該變 量的值來判斷攝像頭是否初始化成功。代碼如下: 20 int i = capinitcamera(); if (i 0) for (int j = 0; j se
59、twindowtextw(s2ws(int2str(dwrtnsize1).c_str(); char *buf=(char *)lpjpgbuffer; string message=jpegdata+int2str(dwrtnsize1)+; ptcp-senddata(tmp,message.c_str() , message.length(); sleep(1500); ptcp-senddata(tmp,buf , dwrtnsize1); sleep(1500); 3.4.5 關(guān)閉視頻設(shè)備 在采集完成后,需要關(guān)閉設(shè)備,并收回系統(tǒng)資源。特別是在嵌入式系統(tǒng)開發(fā)中由于系 統(tǒng)資源沒有 pc
60、 豐富,不注意系統(tǒng)資源回收,往往會出現(xiàn)十分嚴(yán)重的錯誤,而導(dǎo)致系統(tǒng)崩潰。 這就關(guān)系到本系統(tǒng)中的兩個功能,一個是“停止攝像”功能,另一個是“退出程序”功能。 對于“停止攝像”功能,我們只需要讓當(dāng)前負(fù)責(zé)進(jìn)行圖像采集的線程結(jié)束,并回收其使用 的資源。而“退出程序”功能則需要將當(dāng)前的進(jìn)程結(jié)束,并回收所有的系統(tǒng)資源。其代碼 分別如下: (1) “停止攝像”代碼: dword dwrtn = 0; dwrtn = waitforsingleobject(m_hstopevent, 500); if (dwrtn = wait_timeout) 22 terminatethread(m_hthread, 0)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 舞蹈藝術(shù)之魅力
- 人事部在企業(yè)戰(zhàn)略中的角色計劃
- 感恩父母與愛同行的演講稿5篇
- 2024年員工三級安全培訓(xùn)考試題(滿分必刷)
- 2023-2024年項目安全培訓(xùn)考試題帶答案(奪分金卷)
- 社團(tuán)運(yùn)營與成員發(fā)展
- 《本科心律失?!氛n件
- 教授能量轉(zhuǎn)換守恒
- 北師大版八年級下冊數(shù)學(xué)期末測試題
- 印刷設(shè)備智能化升級-第1篇-洞察分析
- 2024-2025學(xué)年冀人版五年級第一學(xué)期期末科學(xué)試題(含答案)
- 部編版五年級語文上冊快樂讀書吧測試題及答案
- 盾構(gòu)始發(fā)施工技術(shù)要點PPT(44頁)
- 甲烷(沼氣)的理化性質(zhì)及危險特性表
- 某鋼鐵有限責(zé)任公司管理專案報告書---提升配電系統(tǒng)管理水平降低變配電裝置事故率
- 促銷費(fèi)用管理辦法15
- 《三國演義》整本書閱讀任務(wù)單
- GB 13296-2013 鍋爐、熱交換器用不銹鋼無縫鋼管(高清版)
- 企業(yè)信用管理制度
- 中醫(yī)院中藥的飲片處方用名與調(diào)劑給付規(guī)定
- 鉆孔灌注樁及后注漿施工方案施工方案
評論
0/150
提交評論