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