課程設(shè)計(jì)(實(shí)訓(xùn))報(bào)告書_第1頁
課程設(shè)計(jì)(實(shí)訓(xùn))報(bào)告書_第2頁
課程設(shè)計(jì)(實(shí)訓(xùn))報(bào)告書_第3頁
課程設(shè)計(jì)(實(shí)訓(xùn))報(bào)告書_第4頁
課程設(shè)計(jì)(實(shí)訓(xùn))報(bào)告書_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

PAGEPAGE1九江學(xué)院信息科學(xué)與技術(shù)學(xué)院《嵌入式應(yīng)用開發(fā)》課程設(shè)計(jì)報(bào)告書題目:多路復(fù)用串口通信程序設(shè)計(jì)專業(yè):計(jì)算機(jī)應(yīng)用技術(shù) 班級:B1012 姓名:祝木賢學(xué)號:17同組人員:無 指導(dǎo)老師:袁斯昊 設(shè)計(jì)時間:2012年10月29日~2012年11月02日目錄1.實(shí)訓(xùn)計(jì)劃 12.問題描述 13.問題分析 14.業(yè)務(wù)邏輯 25.程序模塊設(shè)計(jì) 36.技術(shù)原理與分析 47.系統(tǒng)測試 58.心得體會 69.參考文獻(xiàn) 71.實(shí)訓(xùn)計(jì)劃2012.10.29~2012.10.29選擇實(shí)驗(yàn)任務(wù),明確項(xiàng)目需求,查閱參考書籍2012.10.30~2012.10.30業(yè)務(wù)邏輯的分析和確定2012.10.31~2012.11.1項(xiàng)目分析和代碼實(shí)現(xiàn)2012.11.2~2012.11.2項(xiàng)目演示、驗(yàn)收、評分2.問題描述在Linux環(huán)境下,通過編寫多路復(fù)用式串口讀寫程序,實(shí)現(xiàn)兩臺機(jī)器(宿主機(jī)和目標(biāo)版)之間的串口通信,而且每臺機(jī)器均可以發(fā)送和接收數(shù)據(jù)。 3.問題分析3.1可行性分析本系統(tǒng)主要目的是實(shí)現(xiàn)宿主機(jī)與目標(biāo)機(jī)之間的近距離串行通信,采用的宿主機(jī)是IntelX86架構(gòu)的RedHatLinux9環(huán)境PC機(jī),而目標(biāo)機(jī)是ARM架構(gòu)的開發(fā)板MagicARM2410。本系統(tǒng)中目標(biāo)機(jī)開發(fā)板的內(nèi)核采用的是三星的S3C2410,該開發(fā)板采用核心板加底板的模式.核心板接口采用DIMM200標(biāo)準(zhǔn)連接器.工作非??煽?,可穩(wěn)定運(yùn)行在203MHz的時鐘頻率下。串口線采用常用的RS232C型接口模式,能實(shí)現(xiàn)計(jì)算機(jī)與開發(fā)板間的數(shù)據(jù)傳輸與控制。3.1系統(tǒng)需求本系統(tǒng)采用Linux的minicom來控制開發(fā)板,不使用WINDOWS的超級終端。這樣才能實(shí)現(xiàn)Linux系統(tǒng)與開發(fā)板的數(shù)據(jù)傳輸和控制。Minicom控制的開發(fā)板和Linux終端同時運(yùn)行各自程序通過串口分別向PC端,目標(biāo)板傳送信息,如下圖所示:PC端向開發(fā)板發(fā)送信息(圖1)通過Minicom控制開發(fā)板向宿主機(jī)發(fā)送信息(圖2)這樣,我們就實(shí)現(xiàn)了兩臺機(jī)器之間的多路復(fù)用式串口操作,每臺機(jī)器均可以發(fā)送和接收數(shù)據(jù)。4.業(yè)務(wù)邏輯此系統(tǒng)是實(shí)現(xiàn)兩臺機(jī)器,即PC端和開發(fā)板之間的串口通信。PC機(jī)和開發(fā)板同時運(yùn)行程序,PC端監(jiān)視標(biāo)準(zhǔn)輸入上的數(shù)據(jù),如果有數(shù)據(jù)則寫入到串口,使目標(biāo)板讀取。同時監(jiān)視串口設(shè)備上的輸入,如果有則將數(shù)據(jù)寫入到普通文件中。開發(fā)板和PC端一樣,監(jiān)視標(biāo)準(zhǔn)輸入上的數(shù)據(jù),如果有數(shù)據(jù)則寫入到串口,使PC端讀取。同時監(jiān)視串口設(shè)備上的輸入,如果有則將數(shù)據(jù)寫入到普通文件中。 以下是圖示:PC端業(yè)務(wù)流程(圖3)開發(fā)板端業(yè)務(wù)流程(圖4)5.程序模塊設(shè)計(jì)串口通信軟件的設(shè)計(jì)是系統(tǒng)成功運(yùn)行的關(guān)鍵。C語言在結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢.更利于程序移植和擴(kuò)展。因此本系統(tǒng)采用C語言進(jìn)行程序的編寫。PC端和開發(fā)板采用相同的程序,因此兩臺機(jī)器的程序使用相同的流程圖。整個程序首先打開串口設(shè)備文件并進(jìn)行相關(guān)配置。調(diào)用select()函數(shù),使它等待從標(biāo)準(zhǔn)輸入(終端)文件中的輸入以及從串口設(shè)備的輸入。如果有標(biāo)準(zhǔn)輸入上的數(shù)據(jù),則寫入到串口,使對方讀取。如果有串口設(shè)備上的輸入,則將數(shù)據(jù)寫入到普通文件中。程序的流程圖如下:6.技術(shù)原理與分析總的來說,I/O處理的模型有5種。阻塞I/O模型:在這種模型下,若所調(diào)用的I/O函數(shù)沒有完成相關(guān)的功能,則會使進(jìn)程掛起,直到相關(guān)數(shù)據(jù)到達(dá)才會返回。如常見對管道設(shè)備、終端設(shè)備和網(wǎng)絡(luò)設(shè)備進(jìn)行讀寫時經(jīng)常會出現(xiàn)這種情況。非阻塞模型:在這種模型下,當(dāng)請求的I/O操作不能完成時,則不讓進(jìn)程睡眠,而且立即返回。非阻塞I/O使用戶可以調(diào)用不會阻塞的I/O操作,如open()、write()和read()。如果該操作不能完成,則會立即返回出錯(例如:打不開文件)或者返回0(例如:在緩沖區(qū)中沒有數(shù)據(jù)可以讀取或者沒空間可以寫入數(shù)據(jù))。I/O多路轉(zhuǎn)接模型:在這種模型下,如果請求的I/O操作阻塞,且它不是真正阻塞I/O,而是讓其中的一個函數(shù)等待,在這期間,I/O還能進(jìn)行其他操作。如本小節(jié)要介紹的select()和poll函數(shù)(),就是屬于這種模型。信號驅(qū)動I/O模型:在這種模型下,進(jìn)程要定義一個信號處理程序,系統(tǒng)可以自動捕獲特定信號的到來,從而啟動I/O。這是由內(nèi)核通知用戶何時可以啟動一個I/O操作決定的。它是非阻塞的。當(dāng)有就緒的數(shù)據(jù)時,內(nèi)核就向該進(jìn)程發(fā)送SIGIO信號。無論我們?nèi)绾翁幚鞸IGIO信號,這種模型的好處是當(dāng)?shù)却龜?shù)據(jù)到達(dá)時,可以不阻塞。主程序繼續(xù)執(zhí)行,只有收到SIGIO信號時才去處理數(shù)據(jù)即可。異步I/O模型:在這種模型下,進(jìn)程先讓內(nèi)核啟動I/O操作,并在整個操作完成后通知該進(jìn)程。這種模型與信號驅(qū)動模型的主要區(qū)別在于:信號驅(qū)動I/O是有內(nèi)核通知我們何時可以啟動一個I/O操作,而異步I/O模型是由內(nèi)核通知進(jìn)程I/O操作何時完成?,F(xiàn)在,并不是所有的系統(tǒng)都支持這種模型。select()和poll()的I/O多路轉(zhuǎn)接模型是處理I/O復(fù)用的一個高效的方法。它可以具體設(shè)置程序中每一個所關(guān)心的文件描述符的條件、希望等待的時間等,從select()和poll()函數(shù)返回時,內(nèi)核會通知用戶已準(zhǔn)備好的文件描述符的數(shù)量、已準(zhǔn)備好的條件(或事件)等。通過使用select()和poll()函數(shù)的返回結(jié)果(可能是檢測到某個文件描述符的注冊事件、或是超時、或是調(diào)用出錯),就可以調(diào)用相應(yīng)的I/O處理函數(shù)了。一般來說,在每次使用select()函數(shù)之前,首先使用FD_ZERO()和FD_SET()來初始化文件描述符集(在需要重復(fù)調(diào)用select()函數(shù)的時候,先把一次初始化好的文件描述符集備份下來,每次讀取它即可)。在select()函數(shù)返回之后,可循環(huán)使用FD_ISSET()來測試描述符集,在執(zhí)行完對相關(guān)文件描述符的操作之后,使用FD_CLR()來清除描述符集。當(dāng)使用select()函數(shù)時,存在一系列的問題,例如:內(nèi)核必須檢查多余的文件描述符,每次調(diào)用select()之后必須重置被監(jiān)聽的文件描述符集,而且可監(jiān)聽的文件個數(shù)受限制等。串口是計(jì)算機(jī)一種常用的接口,常用的串口有RS-232-C接口。它是于1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn),它的全稱是“數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)。RS-232采取不平衡傳輸方式,即所謂單端通訊。由于其發(fā)送電平與接收電平的差僅為2V至3V左右,所以其共模抑制能力差,再加上雙絞線上的分布電容,其傳送距離最大為約15米,最高速率為20kb/s。RS-232是為點(diǎn)對點(diǎn)(即只用一對收、發(fā)設(shè)備)通訊而設(shè)計(jì)的,其驅(qū)動器負(fù)載為3~7kΩ。所以RS-232適合本地設(shè)備之間的通信。在對串口進(jìn)行打開和讀寫操作之前,必須進(jìn)行串口的相關(guān)屬性設(shè)置。例如波特率,起始位比特?cái)?shù),數(shù)據(jù)位比特?cái)?shù),和流控制模式設(shè)置等。串口的打開用open函數(shù)。電腦主板上的串口,進(jìn)行串行傳輸?shù)慕涌?,它一次只能傳?Bit。使用文件操作read函數(shù)讀取,如果設(shè)置為原始模式(RawMode)傳輸數(shù)據(jù),那么read函數(shù)返回的字符數(shù)是實(shí)際串口收到的字符數(shù)。使用write函數(shù)寫入,如果設(shè)置為原始模式(RawMode)傳輸數(shù)據(jù),那么write函數(shù)返回的字符數(shù)是寫入成功的字符數(shù)。可以使用操作文件的函數(shù)來實(shí)現(xiàn)異步讀取,使用select函數(shù)實(shí)現(xiàn)多道復(fù)用等操作。7.系統(tǒng)測試宿主機(jī)(PC端)上的運(yùn)行結(jié)果如下:宿主機(jī)(PC端)上/root/zhumuxian/目錄下的sel_name.txt文件內(nèi)容:這個結(jié)果有些錯誤,提示輸入的語句不應(yīng)該寫入文件中的。目標(biāo)板上的運(yùn)行結(jié)果如下:運(yùn)行結(jié)果出現(xiàn)異常,每次輸入一個字符就自動出現(xiàn)輸入提示語句。本來是輸完整個字符串,回車之后才出現(xiàn)提示語句。目標(biāo)板上/root/zhumuxian/目錄下的sel_name.txt文件內(nèi)容:結(jié)果也出現(xiàn)異常,有些字符丟掉了。為了驗(yàn)證目標(biāo)板收到了信息,將目標(biāo)板的程序換成com_reader.c,運(yùn)行結(jié)果如下:結(jié)果表明目標(biāo)板還是接收到了宿主機(jī)發(fā)送的信息,并回送到Minicom上。8.心得體會這次嵌入式應(yīng)用開發(fā)課程設(shè)計(jì)確確實(shí)實(shí)讓我學(xué)到了很多課堂上學(xué)不到的東西,加深了我對多路復(fù)用函數(shù)用法的理解,對嵌入式的開發(fā)也有了一定的了解。設(shè)計(jì)過程中也遇到很多問題,但通過翻閱圖書資料,與老師交流,與同學(xué)溝通學(xué)習(xí),最終都迎刃而解。不過由于自己能力有限,當(dāng)中的缺點(diǎn)還是無可非議的存在著。以下是我這次課程設(shè)計(jì)需要注意的地方和不足:不能用WINDOWS的超級終端控制開發(fā)板,因?yàn)檫@樣WINDOWS就會占用這個串口,造成Linux不能和開發(fā)板之間進(jìn)行通信,因而要使用Linux的Minicom來控制開發(fā)板。代碼的編寫中,由于‘uart_api.h’頭文件沒給出,因此要刪掉,自己在加上沒有定義的宏,和函數(shù)。PC端將輸入提示語句“Inputsomewords(enter'quit'toexit):”寫到了接收對方串口信息的sel_name.txt文件中,目標(biāo)板每輸入一個就自動出現(xiàn)輸入提示語句,且接收宿主機(jī)信息會丟失,不會全部寫進(jìn)sel_name.txt文件里。對于第三點(diǎn)的問題,我猜測造成的原因是Minicom控制開發(fā)板也要用串口,Linux通信也要用同一串口,因此造成了沖突,導(dǎo)致結(jié)果出錯。解決的方法:宿主機(jī)和目標(biāo)板分別用兩個串口,一個用于控制,一個通信,應(yīng)該可以解決這個問題。同時非常感謝指導(dǎo)老師袁斯昊老師對我設(shè)計(jì)的悉心指導(dǎo),在整個課程設(shè)計(jì)的過程給予我真誠的鼓勵、中肯的建議和指導(dǎo)。在此期間,我還得到了很多同學(xué)的幫助,在此一并向他們表示感謝。9.參

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論