畢業(yè)設(shè)計(論文)-基于嵌入式平臺的圖像采集與傳輸.doc_第1頁
畢業(yè)設(shè)計(論文)-基于嵌入式平臺的圖像采集與傳輸.doc_第2頁
畢業(yè)設(shè)計(論文)-基于嵌入式平臺的圖像采集與傳輸.doc_第3頁
畢業(yè)設(shè)計(論文)-基于嵌入式平臺的圖像采集與傳輸.doc_第4頁
畢業(yè)設(shè)計(論文)-基于嵌入式平臺的圖像采集與傳輸.doc_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

I 摘摘 要要 本課題分析了國內(nèi)外嵌入式系統(tǒng)的發(fā)展現(xiàn)狀 針對當前嵌入式的應用 介紹了一種基 于 ARM 的嵌入式圖像采集與傳輸方案 該方案借助 WINCE 的強大功能 具體積小 穩(wěn)定性 高和快速開發(fā)的優(yōu)點 課題完成了基本的硬件設(shè)計和軟件開發(fā) 硬件方面采用了 USB 攝像頭與 S3C2440 處理器組成嵌入式圖像采集裝置 并通過以太 網(wǎng)連接宿主機 軟件方面分為系統(tǒng)軟件的移植和應用軟件開發(fā)方面 系統(tǒng)軟件方面包含 ARM 平臺的 BOOTLOADER 燒寫和嵌入式 WINCE 系統(tǒng)定制和移植以及攝像球驅(qū)動的開發(fā) 應用軟件方面包 括圖像采集模塊的設(shè)計和 TCP 傳輸模塊的設(shè)計兩個部分 課題的最后對系統(tǒng)設(shè)計過程中遇到的問題進行了總結(jié) 并提出了改進方法 關(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 embedded 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 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 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 Embedded 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 嵌入式圖像采集與傳輸程序的設(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ù)傳輸模塊 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)機總體測試 30 結(jié)論與尚存在問題 32 參考文獻 35 致謝 36 1 基于嵌入式平臺的圖像采集與傳輸 姓名 陸志生 學號 2005394122 班級 網(wǎng)絡(luò)工程 051 1 緒論 嵌入式系統(tǒng)把微處理器的系統(tǒng)電路與其專用的軟件平臺相結(jié)合 從而實現(xiàn)了系統(tǒng)操作的 最高效率 嵌入式系統(tǒng)早已融入了人們的日常生活 嵌入式系統(tǒng)的產(chǎn)品主要集中在信息家電 通信產(chǎn)品 工業(yè)控制器 掌上電腦領(lǐng)域 家電 玩具 汽車 新一代手機 數(shù)碼相機等設(shè) 備也都采用了嵌入式系統(tǒng)的核心技術(shù) 隨著后PC 時代的到來 有理由相信嵌入式系統(tǒng)會呈 現(xiàn)出蓬勃發(fā)展的趨勢 日常生活中所見到的數(shù)碼相機 可視電話 多媒體IP 電話和電話會議等產(chǎn)品 其中圖 像采集是最核心的技術(shù) 圖像采集的速度 質(zhì)量直接影響到產(chǎn)品的整體效果 采用USB 接 口的攝像頭在一定程度上突出了采樣速率高 圖像質(zhì)量高 通用性好的特點 1 1 嵌入式軟硬件的現(xiàn)狀與發(fā)展 嵌入式系統(tǒng)分為嵌入式軟件和硬件兩大類 其中嵌入式硬件一般由嵌入式處理器及其 外圍設(shè)備組成 而嵌入式軟件一般包括嵌入式操作系統(tǒng) 嵌入式支撐軟件和應用軟件三大 類 嵌入式處理器是嵌入式系統(tǒng)的核心 它與通用處理器最大的區(qū)別便是其大多數(shù)工作是 為特定的用戶群 為特定的應用而專門定制 嵌入式處理器可以分為低端的微控制器 MCU 中高端的嵌入式微處理器 EMPU 通信領(lǐng)域的 DSP 處理器和高度集成的片商系統(tǒng) SOC 典 型的嵌入式處理器有 ARM MlpS powerpc 等等 嵌入式外圍設(shè)備一般是指一個嵌入式系統(tǒng)中除了處理器外用于完成存儲 通信 調(diào)試 顯示等輔助功能的其他部件 一般可以分為存儲器 FLASH 應用最為廣泛 接口 并口 RS 一 232 串口 nC 總線接口等等 和人機交互 LCD 鍵盤和觸摸屏等 三大部分 嵌入式操作 系統(tǒng)是一種用途廣泛的系統(tǒng)軟件 過去它主要應用于工業(yè)控制和國防系統(tǒng)領(lǐng)域 負責嵌入 系統(tǒng)的全部軟 硬件資源的分配 調(diào)度工作 控制 協(xié)調(diào)并發(fā)活動 它必須體現(xiàn)其所在系統(tǒng) 的特征 能夠通過裝卸某些模塊來達到系統(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 攝像 頭作為硬件環(huán)境 在開發(fā)板上燒寫一個 WINCE5 0 的操作系統(tǒng) 并編寫一個服務端程序 而 這個服務端程序運行在 WINCE5 0 上 主要完成的功能是調(diào)用攝像頭進行圖像的采集 然后 將采集到的圖像數(shù)據(jù)通過以太網(wǎng)傳送到 PC 機上 也就實現(xiàn)了一個基于嵌入式平臺的圖像采 集與傳輸系統(tǒng)的簡單架構(gòu) 日后可根據(jù)實際的需要 在這個架構(gòu)的基礎(chǔ)上進行改進以及增 加需要的功能 因此 本課題主要針對以下內(nèi)容進行分析研究 1 ARM9 S3C2440A 開發(fā)板的功能結(jié)構(gòu) 2 WINCE5 0 操作系統(tǒng)的定制與燒寫 3 如何識別以及調(diào)用中星微 USB 攝像頭 4 圖像采集與傳輸?shù)姆斩顺绦虻脑O(shè)計 2 開發(fā)方法綜述 2 1 需求分析 本課題 設(shè)計分為硬件和軟件兩大部分 硬件部分包括攝像頭和開發(fā)平臺的選擇 軟 件部分包括系統(tǒng)級軟件 BootLoader 操作系統(tǒng)和驅(qū)動程序 與用戶級軟件 服務端 客戶端 2 2 1 攝像頭的選擇 攝像頭是由 Sensor 傳感器 DSP 即 數(shù)字信號處理器 lens 鏡頭 外殼模具 USB 連線 電路板及阻容等周邊器件構(gòu)成 其最關(guān)鍵的是鏡頭 傳感器和 DSP 選擇標準是以 清晰度高 圖像流暢的為好 鏡頭是對光線的最重要部位 一般按照材料分主要有 3 種 有玻璃鏡片 塑膠鏡片和化合物的 這里最好的要算是玻璃的 其通光系數(shù)大 一般好的 鏡頭的通光口徑也會做的較大 在光線不是很好的時候也可以得到較好的效果 但是價格 要高點 塑膠的通光要差點 但是價格便宜 就這點也得到了一些中低端用戶的認可 化 合物的比較少 本系統(tǒng)中選用的攝像頭鏡頭便是塑膠鏡片的 傳感器是將光信號轉(zhuǎn)換成電 信號的器件 目前市場見到的主要有兩種 一種是 CCD 一種是 CMOS 而兩者的主要區(qū)別在 于 CCD 成像像素高 清晰度高 但價格昂貴 主要應用于高端的數(shù)碼相機市場 而 CMOS 在成像方面稍微差一些 特別光線差時 速度較慢 但是其價格低廉 適合中低端市場 綜合考慮 本系統(tǒng)中使用的傳感器是 CMOS 目前用于攝像頭的 DSP 主要有中國中星微公司的 DSP 芯片 ZC030X 和美國 OV 公司的 0V511 芯片 在國內(nèi)市場上的 USB 攝像頭基本上采用的是中星微公司的 DSP 芯片 而 OVS11 的芯片的攝像頭則比較難找到 考慮到中星微的市場普及率 本系統(tǒng)中采用了 3 ZC030 x 的 DSP 芯片 2 2 2 嵌入式處理器的選擇 嵌入式處理器是嵌入式系統(tǒng)的核心 所以選擇一款合適的嵌入式處理器則是非常重要 的 嵌入式處理器的選擇應該從應用工程背景 處理器性能 處理器功耗 開發(fā)成本 開 發(fā)難易程度等方面綜合考慮 目前 市面上的嵌入式處理器種類十分多 據(jù)不完全統(tǒng)計 全世界嵌入式處理器的品 種總量己經(jīng)超過一千多種 典型的嵌入式處理器有 ARM MIPS PowerPC 等等 ARM 公司是全球領(lǐng)先的 16 32 位 RISC 微處理器產(chǎn)權(quán)設(shè)計供應商 在移動通信 手持 設(shè)備領(lǐng)域上占主導地位 MIPS 技術(shù)公司是一家設(shè)計制造高性能 高檔次的嵌入式 32 64 位 處理器廠商 PowerPC 以其可伸縮性好和方便靈活的特點也成為應用十分廣泛的嵌入式處 理器 從高端的工作站 服務器到臺式計算機系統(tǒng) 從消費類電子產(chǎn)品到大型通信設(shè)備 無所不包 根據(jù)本系統(tǒng)的需求分析 需要對視頻數(shù)據(jù)進行采集和傳輸 對處理器的性能有 一定要求 由于 ARM 價格低廉 功耗低 處理能力較強 所以決定選用 ARM 作為本系 統(tǒng)的核心處理器 本系統(tǒng)硬件平臺是基于 ARM9 的 S3C2440A 開發(fā)板 這款開發(fā)板是三星公司主要為高 性價比 低功耗的應用場合而設(shè)計 其資源豐富 十分適合本系統(tǒng)開發(fā) 2 2 3 嵌入式操作系統(tǒng)的選擇 嵌入式操作系統(tǒng)與嵌入式系統(tǒng)密不可分 是嵌入式系統(tǒng)的一個十分重要的組成部分 一個嵌入式系統(tǒng)如果沒有嵌入式操作系統(tǒng)的支持 其實現(xiàn)的應用將變得十分有限 嵌入式 系統(tǒng)的優(yōu)勢也將不能發(fā)揮出來 嵌入式操作系統(tǒng)能有效管理越來越復雜的系統(tǒng)資源 能夠 把硬件虛擬化 使得開發(fā)人員從繁忙的驅(qū)動程序移植和維護中解脫出來并且能夠提供庫函 數(shù) 驅(qū)動程序 工具集以及應用程序 大大提高了應用系統(tǒng)的開發(fā)效率 嵌入式操作系統(tǒng) 的選擇主要從以下幾個方面考慮 l 操作系統(tǒng)的硬件支持 包括操作系統(tǒng)是否支持目標硬件平臺 基于該選擇的操作系 統(tǒng)上開發(fā)的嵌入式應用軟件是否具有很好的移植性 2 開發(fā)工具的支持程度 包括在線仿真器 編譯器 匯編器 連接器 調(diào)試器等能否 支持操作系統(tǒng) 3 應用需求 包括操作系統(tǒng)的性能 兼容性 技術(shù)支持等 目前嵌入式操作系統(tǒng)己經(jīng)從簡單走向成熟 主要有 vxworks windowsCE 和嵌入式 Linux 等 Windows CE 是微軟公司開發(fā)的一個 32 位 多任務 多線程的嵌入式操作系統(tǒng) 它可 以用在手機 機頂盒 智能手持設(shè)備 網(wǎng)關(guān) 數(shù)字媒體設(shè)備 工業(yè)控制等多種場合 Windows CE 支持 X86 ARM MIPS 和 SH 四種處理器架構(gòu) 并支持 WiFi USB 2 0 等新型設(shè) 備 并具有強大的多媒體功能 Windows CE 操作系統(tǒng)是模塊化設(shè)計的 整個系統(tǒng)被劃分為數(shù)百個模塊 嵌入式系統(tǒng)開 4 發(fā)人員可以根據(jù)系統(tǒng)的需要 來選擇自己需要的模塊 從而達到減小系統(tǒng)體積目的 一個 最小的 Windows CE 可運行內(nèi)核只需要幾百 KB 而一個功能完備的 Windows CE 映像也不會 超過 64MB 與其他嵌入式操作系統(tǒng)相比 Windows CE 的優(yōu)點有如下幾點 學習 使用簡單 微軟提供了方便的 IDE 和開發(fā)工具 對于 OS 的定制 裁減 交叉 編譯等都相對簡單 此外 Windows CE 的應用程序開發(fā)接口也是 Win32 API 與桌面 Windows 的基本一致 這也方便了桌面 Windows 開發(fā)人員向 Windows CE 嵌入式開發(fā)過渡 圖形界面優(yōu)秀 這個理由或許是許多人員選用 Windows CE 的主要原因 Windows CE 的圖形和多媒體能力是非常優(yōu)秀的 可以方便的支持多種視頻音頻格式 此外還支持 DirectX 多媒體接口 這對于開發(fā)多媒體應用 例如電子地圖導航 多媒體播放器等 非 常方便 應用集成度高 Windows CE 自帶了很多應用程序 例如 Web 瀏覽器 多媒體播放器 Office 文件察看器等 這對于快速的開發(fā)一款產(chǎn)品相當有用 此外 互聯(lián)網(wǎng)上有數(shù)以萬計 的為 Windows CE 開發(fā)的應用程序 VxWorks 是 WindRiver 公司的實時操作系統(tǒng) 它支持各種工業(yè)標準 包括 POSIX ANSIC 和 TCP IP 網(wǎng)絡(luò)協(xié)議 VxWorks 運行系統(tǒng)的核心是一個高效率的微內(nèi)核 該微 內(nèi)核支持各種實時功能 包括快速多任務處理 中斷支持 搶占式和輪轉(zhuǎn)式調(diào)度 微內(nèi)核 設(shè)計減輕了系統(tǒng)負載并可快速響應外部事件 目前在全世界裝有 VxWorks 系統(tǒng)的智能設(shè)備 數(shù)以百萬計 其應用范圍遍及互聯(lián)網(wǎng) 電信和數(shù)據(jù)通信 數(shù)字影像 網(wǎng)絡(luò) 醫(yī)學 計算機 外設(shè) 汽車 火控 導航與制導 航空 指揮 控制 通信和情報 聲納與雷達 空間與 導彈系統(tǒng) 模擬和測試等眾多領(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)核復雜 產(chǎn)品開發(fā)周期相對較長 本系統(tǒng)對操作系統(tǒng)的要求是需要有強大的網(wǎng)絡(luò)支持 最重要一點就是開發(fā)周期短 容 易上手 所以綜合考慮 本系統(tǒng)將采用嵌入式 WindowsCE 操作系統(tǒng)來進行開發(fā) 2 2 開發(fā)環(huán)境及工具 2 2 1 ARM9 S3C2440A 開發(fā)板 1 板子布局 5 圖 2 1 S3C2440A 開發(fā)板整體布局 表 2 1 S3C2440A 開發(fā)板開參數(shù)說明 序號說明 1 12V 電源接口 2 電源開關(guān) 3 COM1 串口 0 RS232 4 標準 JATG 5 GPIO 引出接口 6COM2 7 SD MMC 卡 8 音頻輸入 MIC 9 音頻輸出 10 USB 從設(shè)備 11 USB 主設(shè)備 用來連接 USB 鼠標 鍵盤 優(yōu)盤等 12 10M 以太網(wǎng)口 13 復位鍵 6 續(xù)表2 1 S3C2440A開發(fā)板開參數(shù)說明 14 K1 4 用戶按鈕 15 RTC 電源 時鐘備份電池 16 核心板下載接口 17 LCD 接口 18 CAMERA 攝像頭接口 其主要的特性是 CPU處理器 Samsung S3C2440A 主頻400MHz 最高533Mhz SDRAM 內(nèi)存 在板64M SDRAM 32bit 數(shù)據(jù)總線 SDRAM 時鐘頻率高達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和一片64M的 NANDFLASH SDRAM是嵌入式系統(tǒng)的內(nèi)存 具有單位空間存儲容量大和價格便宜的優(yōu)點 已 廣泛應用在各種嵌入式系統(tǒng)中 當系統(tǒng)啟動時 CPU首先從復位地址0X0000000處讀取啟動 代碼 在完成系統(tǒng)的初始化后 程序代碼一般應調(diào)入SDRAM中運行 以提高系統(tǒng)的運行速度 同時 系統(tǒng)及用戶堆棧 運行數(shù)據(jù)也都放在SDRAM中 FLASH 存儲器是一種可電擦寫 掉電后信息不丟失的存儲器 它具有低功耗 大容量 擦寫速度快 可整片或分扇區(qū)在系統(tǒng)編程 燒寫 擦除等特點 并且可由內(nèi)部嵌入的算法 完成對芯片的操作 因而在各種嵌入式系統(tǒng)中得到了廣泛的應用 作為一種非易失性存儲 器 FLASH 在系統(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í)行 這樣應用程序可以直接在 FLASH 內(nèi)運行 不必再把代碼讀到系 統(tǒng) RAM 中 NOR 的傳輸效率很高 在 1 一 4MB 的小容量時具有很高的成本效益 但是很低 的寫入和擦除速度大大影響了它的性能 由于制造商的原因 本系統(tǒng)使用到的 S3C2440A 開發(fā)板只有 NAND FALSH 所以操作 系統(tǒng)的啟動代碼 操作系統(tǒ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 PlatformBullder 附帶有設(shè)計 創(chuàng)建 構(gòu)建 測試和調(diào)試 一個基于 WindowsCE 的平臺所需的所有開發(fā)工具 本設(shè)計同樣離不開這個工具 它是定制 我們嵌入式平臺 WinCE 映像唯一工具 platformBuilder 中的主要特性包括 新的 PlatformWizard 平臺向?qū)?可幫助您創(chuàng)建一個新的平臺 基礎(chǔ)配置 為各種流行的設(shè)備類別預置的定制操作系統(tǒng) 為自定義操作系統(tǒng)的創(chuàng)建提供 了一個起點 仿真器 Emulator 通過硬件仿真加速和簡化了系統(tǒng)的開發(fā) 使用戶可以在開發(fā)工作站 上對平臺和應用程序進行測試 BSPWizard BSP 向?qū)?提高了 BSP 主板支持軟件包 創(chuàng)建過程的效率 其中 BSP 是 WinCE 操作系統(tǒng)提供出來的一個自由度 這個是 WinCE 適應不同硬件的機制 適配層以 WinCE 的驅(qū)動接口要求 完成不同板級驅(qū)動 這樣定制出來的 WinCE 可以在 任何的硬件環(huán)境一下運轉(zhuǎn) 目錄 一個操作系統(tǒng)特性的列表 您可以使用列表中的特性對平臺進行定制 WilldowsCETestKit 測試工具包 提供了一個驅(qū)動程序測試工具集 內(nèi)核調(diào)試器 可以對自定義的操作系統(tǒng)映像進行調(diào)試 并且向用戶提供有關(guān)映像性能的 信息 應用程序調(diào)試器 可以在自定義的操作系統(tǒng)映像上對應用程序進行調(diào)試 自動化的依靠性檢查 可以確保支持平臺配置所需的所有特性都包括在操作系統(tǒng)映像之 中 導出向?qū)?ExportWizard 可以向其他 PlatformBuilde 用戶導出自定義的目錄 Catalog 特性 導出 SDK 向?qū)?ExportsDKwizard 使用戶可以導出一個自定義的軟件開發(fā)工具包 SDK 這個也是重要的環(huán)節(jié) 進行 winCE 開發(fā)的 SDK 是需要 PB 針對每個項目導出的 每個項目 是不同 當然肯定一種冗余的解決方案 但是對于每個項目而言 它們是專用且方便的 遠程工具 可以執(zhí)行同基于 WindowsCE 的目標設(shè)備有關(guān)的各種調(diào)試任務和信息收集任務 8 其界面下圖 圖 2 3 Platform Builder 5 0 界面 2 Visual Studio 2005 Visual Studio 是一套完整的開發(fā)工具集 用于生成 ASP NET Web 應用程序 XML Web Services 桌面應用程序和移動應用程序 Visual Basic Visual C Visual C 和 Visual J 全都使用相同的集成開發(fā)環(huán)境 IDE 利用此 IDE 可以共享工具且有助于 創(chuàng)建混合語言解決方案 另外 這些語言利用了 NET Framework 的功能 通過此框架可 使用簡化 ASP Web 應用程序和 XML Web Services 開發(fā)的關(guān)鍵技術(shù) 本系統(tǒng)利用它來開發(fā) 主要是因為其集成了智能設(shè)備程序的開發(fā)工具以及仿真程序 開發(fā)人員調(diào)試程序只需在指 定的仿真程序里面運行調(diào)試 而不用每次都將程序下載到板子上 其界面如下 9 圖 2 4 Visual Studio 2005 界面 2 3 開發(fā)流程 嵌入式系統(tǒng)是一個復雜而專用的系統(tǒng) 在進行系統(tǒng)開發(fā)之前 必須對系統(tǒng)的功能需求 進行分析并明確定義系統(tǒng)的外部功能和內(nèi)部軟硬件結(jié)構(gòu) 然后對系統(tǒng)進行總體結(jié)構(gòu)設(shè)計和 系統(tǒng)的各個模塊分割 分別實現(xiàn)硬件的規(guī)劃與設(shè)計 應用軟件的規(guī)劃與設(shè)計以及操作系統(tǒng) 的剪裁 在完成操作系統(tǒng)的剪裁和應用軟件的開發(fā)后 通常還需要將它們移植到同系統(tǒng)結(jié) 構(gòu)的硬件平臺上進行系統(tǒng)調(diào)試 功能模擬 明確系統(tǒng)調(diào)試無誤后 才將操作系統(tǒng)及相關(guān)軟 件移植到自己的專用硬件平臺上 再進行系統(tǒng)整體功能測試 其流程如圖 2 5 所示 圖 2 5 整體開發(fā)流程圖 10 3 嵌入式圖像采集與傳輸程序的設(shè)計 3 1 關(guān)鍵技術(shù) 3 1 1 bootloader BootLoade 是系統(tǒng)加電后運行的第一段代碼 一般只是在啟動時運行很短時間 然而 對一個嵌入式系統(tǒng)來說 這一部分卻是整個系統(tǒng)的一個無比重要的組成部分 不可缺少 在一般嵌入式系統(tǒng)中 系統(tǒng)復位或者加電后通常從地址 Ox0000000O 處開始執(zhí)行 而這個地 址一般正是存放的 BootLoader 啟動代碼 通過這段程序 可以初始化硬件設(shè)備 建立內(nèi)存 空間的映射圖 從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài) 以便為最終加載操作系統(tǒng) 內(nèi)核準備好正確的環(huán)境 3 1 2 eboot Eboot 是通過以太網(wǎng)下載 WinCE 映像時的起作用的代碼 它通過 USB 下載工具被下載 到 SDRAM 和 PlatformBuilder 配合完成對 NANDFlash 的 WinCE 映像的燒寫工作 它是 由 MS 提供好的代碼 不需要進行任何修改 3 1 3 攝像頭 SDK 接口函數(shù) 本系統(tǒng)所用攝像頭的驅(qū)動程序已由開發(fā)商編寫好的了 并將其封裝成動態(tài)鏈接庫形式 即 ZC030X DLL 文件 我們只需調(diào)用其提供的接口函數(shù)就可以實現(xiàn)其相應的功能 ZC030X SDK 接口函數(shù)說明如下表 表 3 1 ZC030X SDK 接口函數(shù)說明 函數(shù)名稱函數(shù)說明形式參數(shù)參數(shù)說明返回值 capInitCamera 初始化并 返回當前 活動的攝 象頭數(shù)目 void 無 當前活動的攝 象頭數(shù)目 最多 可支持 8 個攝 象頭 int index 攝象頭索引 capGetCurrentVersion 獲得當前 驅(qū)動程序 版本信息 unsigned char 用來接收版本信 息的字符緩沖區(qū) 當前驅(qū)動程序 版本信息字符 串長度 11 pBufOut int lenOut 字符緩沖區(qū)長度 int index 攝象頭索引 int pFormat 用來接收視頻格 式的緩沖區(qū) capGetVideoFormat 獲取當前 視頻格式 和尺寸模 式 int pSizeMode 用來接收尺寸模 式的緩沖區(qū) 0 表示調(diào)用成 功 其他值表示 調(diào)用失敗 int index 攝象頭索引 int format 要設(shè)置的視頻格 式 VIDEO PALETTE RGB565 VIDEO PALETTE JPEG capSetVideoFormat 設(shè)置當前 視頻格式 和尺寸模 式 int sizeMode 要設(shè)置的尺寸模 式 VIDEO SIZE VGA VIDEO SIZE SIF 0 表示調(diào)用成 功 其他值表示 調(diào)用失敗 int index 攝象頭索引 unsigned char pFrameBuf 用來接收一幀視 頻圖象的緩沖區(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ū) capGrabFrame 獲取一幀 視頻圖象 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 停止攝象 頭捕獲視 頻 int index 攝象頭索引0 表示調(diào)用成 功 其他值表示 調(diào)用失敗 capCloseCamera 關(guān)閉所有 活動的攝 象頭 void 無無 13 3 1 4 MFC 微軟基礎(chǔ)類庫 它是本文應用程序的框架基礎(chǔ) 很多軟件形式都是基于 MFC 的 當然它也帶來很多 WINDOWS 編程的便利 什么是 MFC MFC 是 Application Framework 類庫 更確切的定義是 微軟公司將數(shù)以千計的 WindowsAPI 利用面向?qū)ο蟮脑砗?C 語言 有邏輯的組織起來 這種有邏輯的組織使 得 MFC 是一組凝聚性強 組織性強的類庫 如果要利用 MFC 開發(fā)你的應用程序 必須同時 引進數(shù)個必要的類 互相搭配支持 而這些類所實例后的對象關(guān)系在 MFC 設(shè)計時 便己經(jīng) 存在 信息的流動機制也都已經(jīng)設(shè)定 Application Framework 對軟件設(shè)計帶來的革命性 的好處是 程序的模型已經(jīng)存在 而且是標準 簡潔 高效的 程序員只要依照各自的需求 在 Application Framework 的派生類中改寫虛函數(shù) 或者添加新的成員函數(shù) 以滿足各自 的應用需要 這將大大縮短程序設(shè)計的時間 使得程序員可以將更多的精力花在程序特定 的功能實現(xiàn)上 而不是關(guān)注繁瑣的 重復的 windows 程序框架的搭建而且使得程序設(shè)計的 方法標準化 程序的可讀性大大增強 MFC 將具有相當固定程度的 WinMain 內(nèi)部操作包含在 CWinAPP 中 將有著相當固定行 為的 WndProc 內(nèi)部操作包裝在 CFrameWind 或 CDialog 中 換句話說 CWinAPP 代表程序的 主體 CFrameWnd 或 CDialog 代表程序的主窗口 雖然 WinMain 內(nèi)部操作和 WndProc 內(nèi)部 操作有著相當程度的固定行為 但是它們畢竟需要針對不同的應用程序而有某種變化 所 以 你必須以這兩個類為基礎(chǔ) 派生出自己的類 CMyWinAPP 和 CMyFrameWnd 并改寫其中 部分成員函數(shù) 虛函數(shù) 或添加成員函數(shù) MFC 的程序員需要做的只是根據(jù)自己的應用需要 在 MFC 合適的類下派生出子類 修改虛函數(shù) 添加新成員函數(shù)和添加消息響應函數(shù) 3 1 5 TCP 協(xié)議 TCP 位于 OSI 七層模型中的第四層 傳輸層 是一種面向連接的 可靠的 基于字 節(jié)流的通信協(xié)議 一個 TCP 連接有發(fā)送方的 IP 地址與 TCP 端口號和接收方的 IP 地址與 TCP 端口號標識 建立一個 TCP 連接的作用就是讓發(fā)送方和接收方都做好準備 準備好之 后就開始數(shù)據(jù)傳輸 總的來說 TCP 具有以下特點 14 表 3 2 TCP 特點 主要特性含義 1 面向流的投遞 服務 應用程序之間傳輸?shù)臄?shù)據(jù)可視為無結(jié)構(gòu)的字節(jié)流 流投遞服務保 證收發(fā)的字節(jié)順序完全一致 2 面向連接的投 遞服務 數(shù)據(jù)傳輸之前 TCP 模塊之間需建立連接 其后的 TCP 報文在此連 接基礎(chǔ)上傳輸 3 可靠傳輸服務 接收方根據(jù)收到的報文中的校驗和 判斷傳輸?shù)恼_性 如果正 確 進行應答 否則丟棄報文 發(fā)送方如果在規(guī)定的時間內(nèi)未能 獲得應答報文 自動進行重傳 4 緩沖傳輸 TCP 模塊提供強制性傳輸 立即傳輸 和緩沖傳輸兩種手段 緩沖 傳輸允許將應用程序的數(shù)據(jù)流積累到一定的體積 形成報文 再 進行傳輸 5 全雙工傳輸TCP 模塊之間可以同時收發(fā)數(shù)據(jù)流 6 流量控制 TCP 模塊提供滑動窗口機制 支持收發(fā) TCP 模塊之間的端到端流量 控制 由于 UDP 協(xié)議是無連接的 不可靠的傳輸 但也正是因為其是無連接的 而且不提供 像 TCP 那樣的可靠機制 流控制以及錯誤恢復功能 所以比 TCP 負載消耗少 傳輸速度快 但也考慮到本系統(tǒng)的數(shù)據(jù)傳輸必需做到準確無誤 所以本系統(tǒng)決定使用 TCP 協(xié)議 3 1 6 windows socket WinSock 并不是一種網(wǎng)絡(luò)協(xié)議 它只是一個網(wǎng)絡(luò)編程接口 也就是說 它不是協(xié)議 但是它可以訪問很多種網(wǎng)絡(luò)協(xié)議 你可以把他當作一些協(xié)議的封裝 現(xiàn)在的 WinSock 已經(jīng) 基本上實現(xiàn)了與協(xié)議無關(guān) 你可以使用 WinSock 來調(diào)用多種協(xié)議的功能 那么 WinSock 和 TCP IP 協(xié)議到底是什么關(guān)系呢 實際上 WinSock 就是 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ù)流 自身提供一種錯誤控制機制 本系統(tǒng)正是采用流式套接字 進行設(shè)計 圖 3 1 為面向 TCP 的網(wǎng)絡(luò)通信流程 圖 3 1 面向 TCP 的網(wǎng)絡(luò)通信流程 進行 socket 編程時 首先要調(diào)用 socket 函數(shù)來進行初始化并創(chuàng)建一個套接字 函數(shù) 原型為 int socket int domain int type int protocol 其中 domain 應該設(shè)置成 AF INET 參數(shù) type 是選擇用哪一種套接字 是 SOCK STREAM 類型還是 SOCK DGRAM 類 型 本系統(tǒng)中使用的是流式套接字 所以選擇 SOCK STREAM 最后 把 protocol 設(shè)置為 0 socket 調(diào)用成功將返回一個在后面的系統(tǒng)調(diào)用中用到的 socket 描述符 失敗返回 1 當套接字成功創(chuàng)建之后 要將套接字和機器上的一定的端口關(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)聽服務請求 sockaddr in 結(jié)構(gòu)如下 16 struct sockaddr in short sin family u short sin prot struct in addr sin addr char sin sero 8 其中 sin family 一般為 AF INET 代表 Internet TCP IP 地址族 sin port 代表連 接的端口號 sin addr 代表 IP 地址 在調(diào)用 bind 的時候不可以使用小于 1024 的端口號 因為所有小于 1024 的端口號 都被系統(tǒng)保留 可以選擇從 1024 到 65535 中沒有被其它應用程序占用的端口號即可 要使 socket 處于被動的監(jiān)聽模式 可以使用 listen 函數(shù) 并為該 socket 建立一個輸入數(shù)據(jù)隊 列 將到達的服務請求保存在此隊列中 直到用戶應用程序處理它們 函數(shù)調(diào)用的原型為 int listen int sockfd int backlog backlog 指定在請求隊列中允許的最大請求數(shù) 進入的連接請求將在隊列中等待 accept 它們 backlog 對隊列中等待服務的請求的數(shù)目 進行了限制 大多數(shù)系統(tǒng)缺省值為 20 在本系統(tǒng)中設(shè)置為 8 如果一個服務請求到來時 輸入隊列已滿 該 socket 將拒絕連接請求 客戶將收到一個出錯信息 當出現(xiàn)錯誤時 listen 函數(shù)返回 1 服務器接收客戶的連接請求使用 accept 函數(shù) 在建立好輸入隊列后 服務器就調(diào)用 accept 函數(shù) 然后睡眠并等待客戶的連接請求 函數(shù)原型為 int accept int sockfd void addr int addrlen addr 通常是一個指向 sockaddr in 變 量的指針 該變量用來存放提出連接請求服務的主機的信息 整型指針變量 addrten 一般 為 sizeof struct sockaddr in 的 出現(xiàn)錯誤時 accept 函數(shù)返回 l 當 accept 函數(shù)監(jiān)視 的 socket 收到連接請求時 socket 執(zhí)行體將建立一個新的 socket 執(zhí)行體將這個新 socket 和請求連接進程的地址聯(lián)系起來 收到服務請求的初始 socket 仍可以繼續(xù)在以前 的 socket 上監(jiān)聽 同時可以在新的 socket 描述符上進行數(shù)據(jù)傳輸操作 函數(shù) send 和 recv 用于流式套接字或者數(shù)據(jù)報套接字的通訊 函數(shù) send 的原型 為 int send int sockfd const void msg int len int flags s sockfd 是準 備發(fā)送數(shù)據(jù)的套接字描述符 msg 是指發(fā)送的數(shù)據(jù)的指針 len 是數(shù)據(jù)的長度 把 flags 設(shè) 置為 0 就可以了 函數(shù) recv 和 send 用法差不多 int recv int sockfd void buf int len unsigned 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ā) 板 上位機 相連 PC 機 下位機 通過網(wǎng)絡(luò)接口 網(wǎng)卡 和以太網(wǎng)線與 ARM 開發(fā)板相連 攝像頭負責對圖像數(shù)據(jù)的采集 然后將數(shù)據(jù)傳送到運行在 WINCE 上的服務端程序 服務端 程序負責將采集到的圖像數(shù)據(jù)進行處理 然后再將其傳送到運行在 PC 機上客戶端程序并顯 示出來 3 3 WINCE 驅(qū)動架構(gòu) 在 WinCE 下的驅(qū)動開發(fā) 需要面向的是上下兩個界面 WinCE 的驅(qū)動結(jié)構(gòu)和具體硬件的 Datasheet 所以首先我們必須深入了解一下 WinCE 整個系統(tǒng)驅(qū)動架構(gòu) 在 WinCE 下驅(qū)動模 型分為本機驅(qū)動模型和流接口驅(qū)動模型 本機驅(qū)動程序用于低級 內(nèi)置設(shè)備 提供一組微 軟定制的接口 可以通過移植和定制微軟提供的驅(qū)動樣例來實現(xiàn) 本地驅(qū)動分為單片驅(qū)動程序和分層驅(qū)動程序 單片驅(qū)動程序直接將硬件功能傳遞給操 作系統(tǒng) 這類驅(qū)動程序在發(fā)展的過程中已越來越少見 分層驅(qū)動程序 是微軟提供的一種本 機驅(qū)動程序的設(shè)計模型 分層設(shè)計是作為一個平臺提供商微軟常用手段 來逐步透明差異 和提供接口規(guī)范 分層驅(qū)動程序的優(yōu)點 便于移植 把很多瑣碎的工作和通用的過程放在 mdd 中 pdd 中實現(xiàn)與特定硬件設(shè)備相關(guān)聯(lián)的功能 一個 mdd 可以和多個 pdd 相連 mdd 可 以管理多個同類的設(shè)備 通過分層的思想 我們可以知道 如果 WINCE 系統(tǒng)頭提供對攝像 頭的 MDD 庫 那么我們就只需要針對特定的攝像頭類型進行 PDD 層的改寫就可以實現(xiàn)攝像 頭的驅(qū)動了 但是很遺憾 在 WINCE6 0 以前的版本中 都沒有提供對攝像頭的 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í)行需要用到的代碼函數(shù)關(guān)聯(lián) 起來 因此 我們大可以將 MDD 庫與 PDD 庫鏈接起來 形成一個動態(tài)鏈接庫文件 而這個 DLL 文件就是我們所需的攝像頭驅(qū)動了 我們只需在注冊表中進行相關(guān)鍵值的設(shè)置 就能 使系統(tǒng)在啟動的時候加載指定的攝像頭的驅(qū)動 從而達到系統(tǒng)能夠識別 USB 攝像頭的目的 了 其模型如圖 3 4 所示 至于本設(shè)計所用到的中星微 ZC030X 系列攝像頭的 MDD 庫與 PDD 庫的編寫 是需要根據(jù)具體硬件的 Datasheet 來進行設(shè)計與開發(fā)的 是一個很復雜并長時 間的過程 所以在這里就不對其進行更深入的論述了 本設(shè)計用到的攝像頭驅(qū)動是由中星 微開發(fā)商提供 能夠直接從網(wǎng)上下載得到 19 圖 3 4 攝像頭驅(qū)動程序的交互 3 4 圖像采集模塊設(shè)計 圖像數(shù)據(jù)是通過攝像頭來采集的 那服務端如何來調(diào)用攝像頭成為了問題的關(guān)鍵 硬 件與軟件之間的聯(lián)系 必須通過驅(qū)程來實現(xiàn) 上文提到 攝像頭的驅(qū)動已經(jīng)封裝成動態(tài)鏈 接庫 DLL 文件了 而且還提供了所有的功能接口函數(shù) 所以 我們只要直接調(diào)用其接口函 數(shù)就能夠?qū)崿F(xiàn)相應的功能 3 4 1 打開攝像頭設(shè)備 打開攝像頭設(shè)備 只需要直接調(diào)用 capStartCamera index 函數(shù)就能夠?qū)崿F(xiàn)了這個 因為這個函數(shù)的功能已經(jīng)被封裝好了 至于其具體的實現(xiàn)過程我們在這里就不進行深究了 我們只要利用其返回的值來判斷是否調(diào)用成功 然后分別作相應的處理就可以了 其代碼 如下 if capStartCamera index 0 判斷攝像頭是否打開成功 goto finish 3 4 2 始化攝像頭設(shè)備 在上文 3 13 節(jié)介紹的 ZC030X SDK 接口函數(shù)說明表格中可以得知 要初始化攝像頭 我們可以直接調(diào)用其提供的 capInitCamera 接口函數(shù) 該函數(shù)能夠初始化攝像頭并返回 當前活動的攝像頭數(shù)目 我們只要設(shè)置一個變量來接收這個函數(shù)返回的值 然后根據(jù)該變 量的值來判斷攝像頭是否初始化成功 代碼如下 20 int i capInitCamera if i 0 for int j 0 j SetWindowTextW s2ws Int2Str dwRtnSize 1 c str char buf char lpJpgBuffer string message JPEGData Int2Str dwRtnSize 1 pTcp SendData tmp message c str message length Sleep 1500 pTcp SendData tmp buf dwRtnSize 1 Sleep 1500 3 4 5 關(guān)閉視頻設(shè)備 在采集完成后 需要關(guān)閉設(shè)備 并收回系統(tǒng)資源 特別是在嵌入式系統(tǒng)開發(fā)中由于系 統(tǒng)資源沒有 PC 豐富 不注意系統(tǒng)資源回收 往往會出現(xiàn)十分嚴重的錯誤 而導致系統(tǒng)崩潰 這就關(guān)系到本系統(tǒng)中的兩個功能 一個是 停止攝像 功能 另一個是 退出程序 功能 對于 停止攝像 功能 我們只需要讓當前負責進行圖像采集的線程結(jié)束 并回收其使用 的資源 而 退出程序 功能則需要將當前的進程結(jié)束 并回收所有的系統(tǒng)資源 其代碼 分別如下 1 停止攝像 代碼 DWORD dwRtn 0 dwRtn WaitForSingleObject m hStopEvent 500 if dwRtn WAIT TIMEOUT 22 TerminateThread m hThread 0 CloseHandle m hThread m hThread NULL 上面代碼中 利用 WaitForSingleObjec m hStopEvent 500 函數(shù)來檢測窗體事件 句柄 m hStopEvent 的信號狀態(tài) 當接收到 m hStopEvent 句柄信號狀態(tài)時 則返回 WAIT OBJECT 0 如果時間超過 500 毫秒但 m hStopEvent 事件還是無信號則返回 WAIT TIMEOUT 當事件超時 說明系統(tǒng)可能因為某些意外而出現(xiàn)了異常 則執(zhí)行 TerminateThread m hThread 0 將當前線程強制結(jié)束 最后回收線程句柄釋放資源 2 退出程序 代碼 void CWebcamDlg OnExit capCloseCamera if m hDispla

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論