基于S3C2410的嵌入式圖象傳輸系統(tǒng)設(shè)計(jì)
截取圖象方法有兩種:直接讀取設(shè)備文件和內(nèi)存影射的方法,本文采用后面一種。采用這種方法后,普通文件被映射到內(nèi)存地址空間,進(jìn)程可以象訪(fǎng)問(wèn)普通文件一樣訪(fǎng)問(wèn)內(nèi)存,這樣做的一個(gè)好處是可以提高效率。做視頻截取的兩個(gè)主要函數(shù)是:
ioctl(vd->fd, VIDIOCMCAPTURE, (vd->mmap)) 若調(diào)用成功,開(kāi)始一副圖象的截取。是否截取完畢留給VIDIOCSYNC來(lái)判斷。
ioctl(vd->fd, VIDIOCSYNC, frame) 若調(diào)用成功,表明一幀截取已完成。可以開(kāi)始做下一次截取
對(duì)于網(wǎng)絡(luò)發(fā)送部分,主要是linux下的socket編程,調(diào)用的主要函數(shù)有:創(chuàng)建套接字函數(shù)socket、端口綁定函數(shù)bind、監(jiān)聽(tīng)函數(shù)listen、等到連接函數(shù)accept、數(shù)據(jù)接收函數(shù)read、數(shù)據(jù)發(fā)送函數(shù)write等。這些函數(shù)的具體定義和用法具體可以查閱相關(guān)資料。需要說(shuō)明的是為了能夠正確發(fā)送一幀數(shù)據(jù),要把定義的幀的結(jié)構(gòu)體設(shè)置為單字節(jié)對(duì)齊,具體方法是在結(jié)構(gòu)體的定義后面加上 _attribute_((packed))。
多線(xiàn)程編程部分用到的主要函數(shù)有:互斥量初始化函數(shù)pthread_mutex_init、互斥量鎖定函數(shù) pthread_mutex_lock、互斥量解鎖函數(shù)pthread_mutex_unlock、互斥量注銷(xiāo)函數(shù)pthread_ mutex _destroy、線(xiàn)程創(chuàng)建函數(shù)pthread _ create、線(xiàn)程同步函數(shù)pthread_join。此外,程序中為了能更好的實(shí)現(xiàn)兩個(gè)進(jìn)程的同步,還需要用到信號(hào)量機(jī)制的一些內(nèi)容。受篇幅所限,這些函數(shù)的具體定義和用法請(qǐng)參考相關(guān)資料 。
3.2 客戶(hù)機(jī)端軟件系統(tǒng)設(shè)計(jì)
客戶(hù)端是建立在一臺(tái)PC機(jī)上,用Visual C++ 6.0設(shè)計(jì)一個(gè)基于MFC的界面作為接收端。在接收端主要完成從網(wǎng)絡(luò)緩沖區(qū)內(nèi)讀取數(shù)據(jù),并保存成文件的形式,文件以接收到數(shù)據(jù)的時(shí)間為名。圖2為圖象采集時(shí)間間隔為1秒時(shí)程序執(zhí)行的結(jié)果。圖象大小為320 象素。需要說(shuō)明的是:服務(wù)器端發(fā)送的數(shù)據(jù)采用了單字節(jié)對(duì)齊,對(duì)應(yīng)的在客戶(hù)端接收的時(shí)候也要采用單字節(jié)對(duì)齊。在WINDOWS下實(shí)現(xiàn)內(nèi)存單字節(jié)對(duì)齊的方法是在定義的幀結(jié)構(gòu)體前面加上#pragma pack (1),并在其定義之后加上#pragma pack ()。
圖2 客戶(hù)端程序執(zhí)行結(jié)果(1秒種采集一次圖象)
4 結(jié)束語(yǔ)
本文提出了一套基于S3C2410平臺(tái)和linux系統(tǒng)的嵌入式圖象采集、傳輸系統(tǒng)的具體實(shí)現(xiàn),并給出了實(shí)驗(yàn)結(jié)果。實(shí)驗(yàn)結(jié)果證明:系統(tǒng)很好的完成了圖象采集和傳輸。得到的圖象清晰。服務(wù)器可以穩(wěn)定運(yùn)行,不會(huì)發(fā)生斷開(kāi)或退出的現(xiàn)象。本系統(tǒng)可應(yīng)用于工業(yè)現(xiàn)場(chǎng)的監(jiān)控,也可以與其他系統(tǒng)如門(mén)禁系統(tǒng)相結(jié)合獲得門(mén)開(kāi)或關(guān)時(shí)現(xiàn)場(chǎng)的重要圖象數(shù)據(jù)。
參考文獻(xiàn)
[1] Alessandro Rubini著 LISOLEG譯,linux設(shè)備驅(qū)動(dòng)程序開(kāi)發(fā),中國(guó)電力出版社,2002
[2] 喬曉丹張鵬,一個(gè)基于Linux操作系統(tǒng)的嵌入式網(wǎng)關(guān)的實(shí)現(xiàn),微計(jì)算機(jī)信息,2005年第21卷第7-2期
[3] 朱剛 等,Linux網(wǎng)絡(luò)編程,科學(xué)出版社,2000.
[4] 于明儉 等,linux程序設(shè)計(jì)權(quán)威指南 機(jī)械工業(yè)出版社 2001.
[5] http://mxhaard.free.fr/embedded.html
評(píng)論