freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于嵌入式平臺(tái)的圖像采集與傳輸?shù)诙?編輯修改稿)

2025-01-12 09:20 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 開(kāi)發(fā)的關(guān)鍵技術(shù)。 本系統(tǒng)利用它來(lái)開(kāi)發(fā)主要是因?yàn)槠浼闪酥悄茉O(shè)備程序的開(kāi)發(fā)工具以及仿真程序,開(kāi)發(fā)人員調(diào)試程序只需在指定的仿真程序里面運(yùn)行調(diào)試,而不用每次都將程序下載到板子上。 其界面如下: 9 圖 24 Visual Studio 2021界面 開(kāi)發(fā) 流程 嵌入式系統(tǒng)是一個(gè)復(fù)雜而專(zhuān)用的系統(tǒng),在進(jìn)行系統(tǒng)開(kāi)發(fā) 之前,必須對(duì)系統(tǒng)的功能需求進(jìn)行分析并明確定義系統(tǒng)的外部功能和內(nèi)部軟硬件結(jié)構(gòu),然后對(duì)系統(tǒng)進(jìn)行總體結(jié)構(gòu)設(shè)計(jì)和系統(tǒng)的各個(gè)模塊分割,分別實(shí)現(xiàn)硬件的規(guī)劃與設(shè)計(jì),應(yīng)用軟件的規(guī)劃與設(shè)計(jì)以及操作系統(tǒng)的剪裁。在完成操作系統(tǒng)的剪裁和應(yīng)用軟件的開(kāi)發(fā)后,通常還需要將它們移植到同系統(tǒng)結(jié)構(gòu)的硬件平臺(tái)上進(jìn)行系統(tǒng)調(diào)試、功能模擬,明確系統(tǒng)調(diào)試無(wú)誤后,才將操作系統(tǒng)及相關(guān)軟件移植到自己的專(zhuān)用硬件平臺(tái)上,再進(jìn)行系統(tǒng)整體功能測(cè)試,其流程如圖 25所示。 圖 25 整體開(kāi)發(fā)流程圖 10 圖像采集與傳輸程序 的設(shè)計(jì) 關(guān)鍵技術(shù) bootloader BootLoade是系統(tǒng)加電后運(yùn)行的第一段代碼。一般只是在啟動(dòng)時(shí)運(yùn)行很短時(shí)間,然而對(duì)一個(gè)嵌入式系統(tǒng)來(lái)說(shuō),這一部分卻是整個(gè)系統(tǒng)的一個(gè)無(wú)比重要的組成部分,不可缺少。在一般嵌入式系統(tǒng)中,系統(tǒng)復(fù)位或者加電后通常從地址 Ox0000000O處開(kāi)始執(zhí)行,而這個(gè)地址一般正是存放的 BootLoader 啟動(dòng)代碼。通過(guò)這段程序,可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),以便為最終加載操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。 eboot Eboot 是通過(guò)以太網(wǎng)下載 WinCE 映像時(shí)的起作用的代碼。它通過(guò) USB 下載工具被下載到 SDRAM 和 PlatformBuilder 配合完成對(duì) NANDFlash 的 WinCE 映像的燒寫(xiě)工作。它是由MS提供好的代碼,不需要進(jìn)行任何修改 。 攝像頭 SDK 接口函數(shù) 本系統(tǒng)所用攝像頭的驅(qū)動(dòng)程序已由開(kāi)發(fā)商編寫(xiě)好的了,并將其封裝成動(dòng)態(tài)鏈接庫(kù)形式,即 。我們只需調(diào)用其提供的接口函數(shù)就可以實(shí)現(xiàn)其相應(yīng)的功能。 ZC030X SDK 接口函數(shù)說(shuō)明如下表: 表 31 ZC030X SDK接口函數(shù)說(shuō)明 函數(shù)名稱(chēng) 函數(shù)說(shuō)明 形式參數(shù) 參數(shù)說(shuō)明 返回值 capInitCamera 初始化并返回當(dāng)前活動(dòng)的攝象頭數(shù)目 void 無(wú) 當(dāng)前活動(dòng)的攝象頭數(shù)目 ,最多可支持 8個(gè)攝象頭 capGetCurrentVersion 獲得當(dāng)前驅(qū)動(dòng)程序版本信息 int index 攝象頭索引 當(dāng)前驅(qū)動(dòng)程序版本信息字符串長(zhǎng)度 unsigned char 用來(lái)接收版本信息的字符緩沖區(qū) 11 *pBufOut int lenOut 字符緩沖區(qū)長(zhǎng)度 capGetVideoFormat 獲取當(dāng)前視頻格式和尺寸模式 int index 攝象頭索引 0表 示調(diào)用成功 ,其他值表示調(diào)用失敗 int *pFormat 用來(lái)接收視頻格式的緩沖區(qū) int *pSizeMode 用來(lái)接收尺寸模式的緩沖區(qū) capSetVideoFormat 設(shè)置當(dāng)前視頻格式和尺寸模式 int index 攝象頭索引 0表示調(diào)用成功 ,其他值表示調(diào)用失敗 int format 要設(shè)置的視頻格式(VIDEO_PALETTE_RGB565 VIDEO_PALETTE _JPEG) int sizeMode 要設(shè)置的尺寸模式(VIDEO_SIZE_VGA, VIDEO_SIZE_SIF) capGetPicture 同時(shí)獲取一幀視頻圖象和JPEG圖片 int index 攝象頭索引 0表示調(diào)用成功 ,其他值表示調(diào)用失敗 unsigned char *pFrameBuf 用來(lái)接收一幀視頻圖象的緩沖區(qū) Unsigned int bufferLen pFrameBuf緩沖區(qū)長(zhǎng)度 Unsigned char *pJpgBuf 用來(lái)接收一幀JPEG圖片的緩沖區(qū) 12 Unsigned int jpgLen pJpgBuf緩沖區(qū)長(zhǎng)度 PDWORD pdwActualOut 用來(lái)接收返回長(zhǎng)度的整型數(shù)組地址 capGrabFrame 獲取一幀視頻圖象 int index 攝象頭索引 一幀視頻圖象的實(shí)際長(zhǎng)度 (字節(jié)數(shù) ) unsigned char *pFrameBuf 用來(lái)接收一幀視頻圖象的緩沖區(qū) unsigned int bufferLen 緩沖區(qū)長(zhǎng)度 capGetLastJpeg 獲取一幀JPEG靜態(tài)圖片 int index 攝象頭索引 一幀 JPEG靜態(tài)圖片的實(shí)際長(zhǎng)度 (字節(jié)數(shù) ) unsigned char *pFrameBuf 用來(lái)接收一幀JPEG靜態(tài)圖片的緩沖區(qū) unsigned int bufferLen 緩沖區(qū)長(zhǎng)度 capStartCamera 啟動(dòng)攝象頭開(kāi)始捕獲視頻 int index 攝象頭索引 0表示調(diào)用成功 ,其他值表示調(diào)用失敗 capStopCamera 停止攝象頭捕獲視頻 int index 攝象頭索引 0表示調(diào)用成功 ,其他值表示調(diào)用失敗 capCloseCamera 關(guān)閉所有活動(dòng)的攝象頭 void 無(wú) 無(wú) 13 MFC 微軟基礎(chǔ)類(lèi)庫(kù) 它是本文應(yīng)用程序的框架基礎(chǔ),很多軟件形式 都是基于 MFC 的,當(dāng)然它也帶來(lái)很多WINDOWS編程的便利。什么是 MFC? MFC 是 Application Framework 類(lèi)庫(kù),更確切的定義是 :微軟公司將數(shù)以千計(jì)的 WindowsAPI,利用面向?qū)ο蟮脑砗?C++語(yǔ) 言,有邏輯的組織起來(lái)。這種有邏輯的組織使得MFC是一組凝聚性強(qiáng)、組織性強(qiáng)的類(lèi)庫(kù)。如果要利用 MFC開(kāi)發(fā)你的應(yīng)用程序,必須同時(shí)引進(jìn)數(shù)個(gè)必要的類(lèi),互相搭配支持。而這些類(lèi)所實(shí)例后的對(duì)象關(guān)系在 MFC設(shè)計(jì)時(shí),便己經(jīng) 存在,信息的流動(dòng)機(jī)制也都已經(jīng)設(shè)定。 Application Framework對(duì)軟件設(shè)計(jì)帶來(lái) 的革命性的好處是 :程序的模型已經(jīng)存在 ,而且是標(biāo)準(zhǔn)、簡(jiǎn)潔、高效的。程序員只要依照各自的需求,在 Application Framework的派生類(lèi)中改寫(xiě)虛函數(shù),或者添加新的成員函數(shù),以滿(mǎn)足各自的應(yīng)用需要。這將大大縮短程序設(shè)計(jì)的時(shí)間,使得程序員可以將更多的精力花在程序特定的功能實(shí)現(xiàn)上,而不是關(guān)注繁瑣的、重復(fù)的 windows程序框架的搭建而且使得程序設(shè)計(jì)的方法標(biāo)準(zhǔn)化,程序的可讀性大大增強(qiáng)。 MFC將具有相當(dāng)固定程度的 WinMain內(nèi)部操作包含在 CWinAPP中,將有著相當(dāng)固定行為的 WndProc內(nèi)部操作包裝在 CFrameWind或 CDialog中。換句話說(shuō) :CWinAPP代表程序的主體。CFrameWnd 或 CDialog 代表程序的主窗口。雖然, WinMain內(nèi)部操作和 WndProc 內(nèi)部操作有著相當(dāng)程度的固定行為,但是它們畢竟需要針對(duì)不同的應(yīng)用程序而有某種變化。所以,你必須以這兩個(gè)類(lèi)為基礎(chǔ),派生出自己的類(lèi) CMyWinAPP和 CMyFrameWnd,并改寫(xiě)其中部分成員函數(shù) (虛函數(shù) )或添加成員函數(shù)。 MFC的程序員需要做的只是根據(jù)自己的應(yīng)用需要,在 MFC合適的類(lèi)下派生出子類(lèi),修改虛函數(shù)、添加新成員函數(shù)和添加消息響應(yīng)函數(shù)。 TCP 協(xié)議 TCP 位于 OSI 七層模型中的第四層 —— 傳輸層,是一種面向連接的、可靠的、基于字節(jié)流的 通信協(xié)議。 一個(gè) TCP連接有發(fā)送方的 IP 地址與 TCP 端口號(hào)和接收方的 IP 地址與 TCP端口號(hào)標(biāo)識(shí)。建立一個(gè) TCP 連接的作用就是讓發(fā)送方和接收方都做好準(zhǔn)備,準(zhǔn)備好之后就開(kāi)始數(shù)據(jù)傳輸。 總的來(lái)說(shuō), TCP具有以下特點(diǎn): 14 表 32 TCP特點(diǎn) 主要特性 含義 ( 1)面向流的投 遞服務(wù) 應(yīng)用程序之間傳輸?shù)臄?shù)據(jù)可視為無(wú)結(jié)構(gòu)的字節(jié)流,流投遞服務(wù)保證收發(fā)的字節(jié)順序完全一致。 ( 2)面向連接的投遞服務(wù) 數(shù)據(jù) 傳輸之前, TCP 模塊之間需建立連接,其后的 TCP 報(bào)文在此連接基礎(chǔ)上傳輸。 ( 3)可靠傳輸服務(wù) 接收方根據(jù)收到的報(bào)文中的校驗(yàn)和,判斷傳輸?shù)恼_性:如果正確,進(jìn)行應(yīng)答,否則丟棄報(bào)文。發(fā)送方如果在規(guī)定的時(shí)間內(nèi)未能獲得應(yīng)答報(bào)文,自動(dòng)進(jìn)行重傳。 ( 4)緩沖傳輸 TCP 模塊提供強(qiáng)制性傳輸(立即傳輸)和緩沖傳輸兩種手段。緩沖傳輸允許將應(yīng)用程序的數(shù)據(jù)流積累到一定的體積,形成報(bào)文,再進(jìn)行傳輸。 ( 5)全雙工傳輸 TCP模塊之間可以同時(shí)收發(fā)數(shù)據(jù)流。 ( 6)流量控制 TCP 模塊提供滑動(dòng)窗口機(jī)制,支持收發(fā) TCP 模塊之間的端 到端流量控制。 由于 UDP協(xié)議是無(wú)連接的,不可靠的傳輸,但也正是因?yàn)槠涫菬o(wú)連接的,而且不提供像TCP那樣的可靠機(jī)制,流控制以及錯(cuò)誤恢復(fù)功能 ,所以比 TCP負(fù)載消耗少, 傳輸速度 快,但也考慮到 本系統(tǒng)的數(shù)據(jù)傳輸必需做到準(zhǔn)確 無(wú)誤,所以本系統(tǒng)決定使用 TCP協(xié)議。 windows socket WinSock并不是一種網(wǎng)絡(luò)協(xié)議,它只是一個(gè)網(wǎng)絡(luò)編程接口,也就是說(shuō),它不是協(xié)議,但是它可以訪問(wèn)很多種網(wǎng)絡(luò)協(xié)議,你可以把他當(dāng)作一些協(xié)議的封裝?,F(xiàn)在的 WinSock已經(jīng)基本上實(shí)現(xiàn)了與協(xié)議無(wú)關(guān)。你可以使用 WinSock來(lái)調(diào) 用多種協(xié)議的功能。那么, WinSock和 TCP/IP協(xié)議到底是什么關(guān)系呢?實(shí)際上, WinSock 就是 TCP/IP 協(xié)議的一種封裝,你可以通過(guò)調(diào)用WinSock 的接口函數(shù)來(lái)調(diào)用 TCP/IP的各種功能 .例如我想用 TCP/IP協(xié)議發(fā)送數(shù)據(jù),我 就可以使用 WinSock的接口函數(shù) Send()來(lái)調(diào)用 TCP/IP的發(fā)送數(shù)據(jù)功能,至于具體怎么發(fā)送數(shù)據(jù),WinSock已經(jīng)幫你封裝好了這種功能 。 15 Inter套接字有兩種類(lèi)型 :一種是“ Stream Sockets” (流格式 ),另外一種 是“ datagram Sockets” (數(shù) 據(jù)報(bào)格式 )。數(shù)據(jù)報(bào)套接字有時(shí)也叫“無(wú)連接套接字”。流式套接字是可靠的雙向通訊的數(shù)據(jù)流,自身提供一種錯(cuò)誤控制機(jī)制。本系統(tǒng)正是采用流式套接字進(jìn)行設(shè)計(jì),圖31為面向 TCP的網(wǎng)絡(luò)通信流程。 圖 31 面向 TCP的網(wǎng)絡(luò)通信流程 進(jìn)行 socket編程時(shí),首先要調(diào)用 socket函數(shù)來(lái)進(jìn)行初始化并創(chuàng)建一個(gè)套接字,函數(shù)原型為 int socket(int domain, int type, int protocol):其中 domain 應(yīng)該設(shè)置成“ AF_INET” ,參數(shù) type是選擇用哪一種套接字,是 SOCK_STREAM類(lèi)型還是 SOCK_DGRAM 類(lèi)型,本系統(tǒng)中使用的是流式套接字,所以選擇 SOCK_STREAM。最后,把 protocol設(shè)置為 “ 0” 。socket()調(diào)用成功將返回一個(gè)在后面的系統(tǒng)調(diào)用中用到的 socket描述符,失敗返回 1。 當(dāng)套接字成功創(chuàng)建之后,要將套接字和機(jī)器上的一定的端口關(guān)聯(lián)起來(lái)。函數(shù)原型為 int bind(int sockfd, struct sockaddr*my_addr, int addrlen)。其中第一個(gè)參數(shù)為前面調(diào)用 socket函數(shù)所返回的套接字描述符,第二個(gè)參數(shù)為 sockaddr類(lèi)型的指針保存了地址和端口的信息,第三個(gè)參數(shù)一般為 sizeof(struct sockaddr)。調(diào)用成功后將可以在該端口監(jiān)聽(tīng)服務(wù)請(qǐng)求。 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,代表 Inter(TCP/IP)地址族 。sin_port 代表連接的端口 號(hào), sin_addr代表 IP 地址。 在調(diào)用 bind()的時(shí)候不可以使用小于 1024的端口號(hào),因?yàn)樗行∮? 1024的端口號(hào)都被系統(tǒng)保留,可以選擇從 1024 到 65535 中沒(méi)有被其它應(yīng)用程序占用的端口號(hào)即可。要使socket處于被動(dòng)的監(jiān)聽(tīng)模式,可以使用 listen 函數(shù),并為該 socket 建立一個(gè)輸入數(shù)據(jù)隊(duì)列,將到達(dá)的服務(wù)請(qǐng)求保存在此隊(duì)列中,直到用戶(hù)應(yīng)用程序處理 它們。函數(shù)調(diào)用的原型為:int listen(int sockfd, int backlog)。backlog 指定在請(qǐng)求隊(duì) 列中允許的最大請(qǐng)求數(shù),進(jìn)入的連接請(qǐng)求將在隊(duì)列中等待 accept()它們。 backlog對(duì)隊(duì)列中等待服務(wù)的請(qǐng)求的數(shù)目進(jìn)行了限制,大多數(shù)系統(tǒng)缺省值為 20,在本系統(tǒng)中設(shè)置為 8。如果一個(gè)服務(wù)請(qǐng)求到來(lái)時(shí),輸入隊(duì)列已滿(mǎn),該 socket 將拒絕連接請(qǐng)求,客戶(hù)將收到一個(gè)出錯(cuò)信息。當(dāng)出現(xiàn)錯(cuò)誤時(shí) listen函數(shù)返回 1。服務(wù)器接收客戶(hù)的連接請(qǐng)求使用 accept()函數(shù)。在建立好輸入隊(duì)列后,服務(wù)器就調(diào)用 accept 函數(shù),然后睡眠并等待客戶(hù)的連接請(qǐng)求。函數(shù)原型為 : int accept(int sockf
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1