




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、通信軟件設(shè)計(jì)實(shí) 驗(yàn) 指 導(dǎo) 書通信工程系計(jì)算機(jī)通信教研室2008年6月前 言通信軟件幾乎存在于所有通信設(shè)備和系統(tǒng),通信工程專業(yè)的學(xué)生應(yīng)該了解通信軟件的組成和主要設(shè)計(jì)要點(diǎn),所以通信軟件設(shè)計(jì)(design of communications software)是通信工程專業(yè)一門重要的選修課。本課程技術(shù)性、實(shí)踐性很強(qiáng)。通信軟件的開發(fā)平臺(tái)和運(yùn)行平臺(tái)都是在某個(gè)操作系統(tǒng)之上,涉及到較多操作系統(tǒng)概念和技術(shù)。軟件的設(shè)計(jì)基礎(chǔ)是數(shù)據(jù)結(jié)構(gòu),這門課程也是操作系統(tǒng)、數(shù)據(jù)結(jié)構(gòu)、程序設(shè)計(jì)語言等基礎(chǔ)課程的綜合運(yùn)用。通信技術(shù)的范圍很大,就其軟件的類型來說,也非常復(fù)雜繁多。實(shí)驗(yàn)和課堂學(xué)時(shí)有限,只能選擇目前流行的ip和linux作
2、為實(shí)驗(yàn)環(huán)境和目標(biāo),目的是使學(xué)生了解通信軟件的設(shè)計(jì)過程和方法,了解通信軟件的核心問題,而非學(xué)習(xí)每個(gè)通信技術(shù)種類的軟件開發(fā)和運(yùn)行情況,比如程控交換機(jī)軟件、以太網(wǎng)絡(luò)交換機(jī)軟件、第三層交換機(jī)軟件等等。本實(shí)驗(yàn)選擇linux作為基礎(chǔ)操作系統(tǒng),所以實(shí)驗(yàn)要從linux的結(jié)構(gòu)/組成、開發(fā)入手,掌握基本的編輯、編譯、運(yùn)行方法;再深入進(jìn)程間通信、內(nèi)核構(gòu)造;最后是協(xié)議實(shí)現(xiàn)。目 錄前 言i目 錄ii實(shí)驗(yàn)要求1實(shí)驗(yàn)一 linux程序設(shè)計(jì)環(huán)境21實(shí)驗(yàn)?zāi)康?2實(shí)驗(yàn)內(nèi)容23實(shí)驗(yàn)步驟及調(diào)試環(huán)境23.1調(diào)試環(huán)境23.2實(shí)驗(yàn)步驟:23.3程序樣本:33.3.1 c-h.c文件33.3.2 makefile文件3實(shí)驗(yàn)二 利用linux
3、的/dev/tty接口的通信程序設(shè)計(jì)41實(shí)驗(yàn)?zāi)康?2實(shí)驗(yàn)內(nèi)容43實(shí)驗(yàn)步驟及調(diào)試環(huán)境43.1調(diào)試環(huán)境43.2實(shí)驗(yàn)步驟:43.3原理和程序樣本:53.3.1 串口簡(jiǎn)介53.3.2 計(jì)算機(jī)串口的引腳說明53.3.3 串口操作53.3.4 打開串口63.3.5 設(shè)置串口63.3.6 需要注意:103.3.7 讀寫串口103.3.8 關(guān)閉串口103.3.9 主程序例子103.3.10 例子程序(樣本1)113.3.10.1 makfile文件113.3.10.2 頭文件123.3.10.3 tty_comm_init.c文件(初始化子程序庫(kù))123.3.10.4 tty_send_file.c文件(文件
4、發(fā)送程序)183.3.10.5 tty_recv_file.c文件(文件接收程序)19實(shí)驗(yàn)三 底層232通信程序221實(shí)驗(yàn)?zāi)康?22實(shí)驗(yàn)內(nèi)容223實(shí)驗(yàn)步驟及調(diào)試環(huán)境223.1調(diào)試環(huán)境223.2實(shí)驗(yàn)步驟:223.3原理和程序樣本:233.3.1程序功能233.3.2 核外進(jìn)程進(jìn)入內(nèi)核原理233.3.3 核內(nèi)外的接口設(shè)備243.3.4 設(shè)備文件操作表和文件操作程序243.3.5 設(shè)備加載和注銷形式263.3.6 內(nèi)核程序的特殊性263.3.7 232串口的控制和數(shù)據(jù)讀寫寄存器263.3.8 232串口中斷服務(wù)程序273.3.9 xon/xoff協(xié)議程序273.3.10 編寫用戶空間串口通信程序28
5、3.3.11 例子程序(樣本2)283.3.11.1 makefile文件283.3.11.2 頭文件283.3.11.3 rs232_comm.c文件293.3.11.4 rs232_comm_send.c文件303.3.11.5 rs232_comm_recv.c文件323.3.11.6 rs232_comm_driver.c文件34實(shí)驗(yàn)四 狀態(tài)機(jī)程序設(shè)計(jì)481實(shí)驗(yàn)?zāi)康?82實(shí)驗(yàn)內(nèi)容483實(shí)驗(yàn)步驟及調(diào)試環(huán)境483.1調(diào)試環(huán)境483.2實(shí)驗(yàn)步驟:493.3簡(jiǎn)化的sdlc規(guī)程493.3.1體系關(guān)系493.3.2狀態(tài)機(jī)設(shè)計(jì)493.3.3幀結(jié)構(gòu)513.4系統(tǒng)結(jié)構(gòu)與實(shí)驗(yàn)環(huán)境523.4.1系統(tǒng)結(jié)構(gòu)52
6、3.4.2 任務(wù)設(shè)置533.4.3測(cè)試數(shù)據(jù)和運(yùn)行543.5流程與數(shù)據(jù)結(jié)構(gòu)543.5.1數(shù)據(jù)流程與緩沖區(qū)/隊(duì)列543.5.2主要程序流程553.5.2.1 s_open()流程553.5.2.2 s_write()流程553.5.2.3 s_close()流程553.5.2.4 文件發(fā)送流程(file_send)553.5.2.5 r_read()流程563.5.2.6 文件接收流程(file_recv)563.5.2.7 sdlc狀態(tài)機(jī)處理流程(sdlc_state_process()563.5.2.8事件隊(duì)列結(jié)構(gòu)(sdlc_event_q,sdlc_data)和sdlc_read()流程58
7、3.5.2.9 232接口中斷處理流程(232_intr()593.5.3 數(shù)據(jù)結(jié)構(gòu)說明593.5.4 程序樣本(樣本3)603.5.4.1 makefile文件603.5.4.2 file_copy.h 文件(上層文件傳輸頭文件)613.5.4.3 file_send.c 文件613.5.4.4 file_recv.c 文件643.5.4.5 file_copy.c 文件653.5.4.6 sdlc.h 文件663.5.4.7 sdev.c 文件693.5.4.8 rdev.c 文件723.5.4.9 sdlc.c 文件753.5.4.10 msdlc.c 文件763.5.4.11 ssdl
8、c.c 文件90實(shí)驗(yàn)五 ip交換軟件設(shè)計(jì)911實(shí)驗(yàn)?zāi)康?12實(shí)驗(yàn)內(nèi)容913實(shí)驗(yàn)步驟及調(diào)試環(huán)境923.1調(diào)試環(huán)境923.2實(shí)驗(yàn)步驟:923.2.1實(shí)驗(yàn)五.1實(shí)驗(yàn)步驟:923.2.2實(shí)驗(yàn)五.2實(shí)驗(yàn)步驟:943.3原理和要求943.3.1程序功能943.3.2 linux操作系統(tǒng)內(nèi)核原理943.3.3 ip原理和簡(jiǎn)化的ip轉(zhuǎn)發(fā)程序功能要求943.3.3.1 ip數(shù)據(jù)包格式953.3.3.2 ip路由表963.3.3.3路由選擇算法963.3.3.4 路由表的建立與刷新973.3.3.5 路由軟件應(yīng)處理的主要內(nèi)容973.3.3.6 簡(jiǎn)化的路由程序983.3.3.7 簡(jiǎn)單的維護(hù)程序983.4 緩沖區(qū)隊(duì)列
9、設(shè)計(jì)983.4.1 自由隊(duì)列983.4.2 接收隊(duì)列983.4.3 發(fā)送隊(duì)列983.5 程序流程設(shè)計(jì)993.5.1 文件接收和發(fā)送程序流程993.5.2 232驅(qū)動(dòng)程序流程993.5.3 簡(jiǎn)化的sdlc程序流程993.5.4 ip初始化和管理程序程序流程993.5.5 ip轉(zhuǎn)發(fā)程序流程1003.5.6 緩沖區(qū)操作程序流程1013.6 完整程序101實(shí)驗(yàn)六 rh linux 2.4版本下的u盤使用1021實(shí)驗(yàn)?zāi)康?022實(shí)驗(yàn)內(nèi)容1023實(shí)驗(yàn)步驟及調(diào)試環(huán)境1023.1調(diào)試環(huán)境1023.2實(shí)驗(yàn)步驟:102實(shí)驗(yàn)要求通信軟件設(shè)計(jì)實(shí)驗(yàn)課程主要是編寫程序和調(diào)試程序,要求在知道某個(gè)通信協(xié)議的情況下,學(xué)會(huì)如何在
10、設(shè)備中實(shí)現(xiàn)這個(gè)協(xié)議。因此學(xué)會(huì)開發(fā)環(huán)境的搭建、運(yùn)行、編寫程序、編輯、編譯、運(yùn)行、試驗(yàn)等等方法和步驟。本指導(dǎo)書已經(jīng)寫出了初步的實(shí)驗(yàn)步驟和程序樣本。整體步驟和完整程序必須要求學(xué)生自己去完成。所以在通信軟件設(shè)計(jì)的課程實(shí)驗(yàn)過程中,要求學(xué)生做到:(1)預(yù)習(xí)實(shí)驗(yàn)指導(dǎo)書有關(guān)部分,認(rèn)真做好實(shí)驗(yàn)內(nèi)容的準(zhǔn)備,就實(shí)驗(yàn)可能出現(xiàn)的情況提前作出思考和分析,提前編寫代碼。(2)仔細(xì)觀察調(diào)試時(shí)出現(xiàn)的各種現(xiàn)象,記錄主要情況,作出必要說明和分析。(3)認(rèn)真書寫實(shí)驗(yàn)報(bào)告。實(shí)驗(yàn)報(bào)告包括實(shí)驗(yàn)?zāi)康暮鸵螅瑢?shí)驗(yàn)情況及其分析。對(duì)需編程的實(shí)驗(yàn),寫出程序設(shè)計(jì)說明,給出源程序框圖和清單。(4)遵守機(jī)房紀(jì)律,服從老師指揮,愛護(hù)實(shí)驗(yàn)設(shè)備。(5)實(shí)驗(yàn)課程
11、不遲到。如有事不能出席,必須請(qǐng)假,且所缺實(shí)驗(yàn)不補(bǔ)。實(shí)驗(yàn)的驗(yàn)收將分為兩個(gè)部分。第一部分是上機(jī)操作,包括檢查程序運(yùn)行、設(shè)備配置和即時(shí)提問。第二部分是提交書面的實(shí)驗(yàn)報(bào)告。上機(jī)檢查逐個(gè)進(jìn)行,按初步規(guī)定的時(shí)間檢查,都將應(yīng)當(dāng)在規(guī)定的時(shí)間內(nèi)完成并檢查通過,過期視為未完成該實(shí)驗(yàn),不計(jì)成績(jī)。希望同學(xué)們抓緊時(shí)間,合理安排,認(rèn)真完成。實(shí)驗(yàn)報(bào)告格式:1)實(shí)驗(yàn)名稱三號(hào)字體、宋體2)實(shí)驗(yàn)日期、地點(diǎn)五號(hào)字體、宋體3)班級(jí)、年級(jí)、學(xué)號(hào)、姓名五號(hào)字體、宋體4)實(shí)驗(yàn)?zāi)康奈逄?hào)字體、標(biāo)題黑體、內(nèi)容宋體5)實(shí)驗(yàn)環(huán)境五號(hào)字體、標(biāo)題黑體、內(nèi)容宋體6)實(shí)驗(yàn)步驟五號(hào)字體、標(biāo)題黑體、內(nèi)容宋體7)實(shí)驗(yàn)關(guān)鍵程序分析五號(hào)字體、標(biāo)題黑體、內(nèi)容宋體8)實(shí)
12、驗(yàn)過程分析和體會(huì)五號(hào)字體、標(biāo)題黑體、內(nèi)容宋體9)實(shí)驗(yàn)結(jié)論分析五號(hào)字體、標(biāo)題黑體、內(nèi)容宋體實(shí)驗(yàn)一 linux程序設(shè)計(jì)環(huán)境(linux環(huán)境下的c語言源程序編輯、源程序編譯、可執(zhí)行文件的執(zhí)行)1實(shí)驗(yàn)?zāi)康恼莆誰inux程序設(shè)計(jì)的基本方法和linux的編輯和編譯操作。2實(shí)驗(yàn)內(nèi)容用c語言編寫和調(diào)試一個(gè)在顯示器上顯示“hello,xx!”的程序。xx可替代任何字串。3實(shí)驗(yàn)步驟及調(diào)試環(huán)境3.1調(diào)試環(huán)境pc以及l(fā)inux操作系統(tǒng)。3.2實(shí)驗(yàn)步驟:1) 安裝linux操作系統(tǒng)(請(qǐng)找到合適的pc機(jī)器上安裝,學(xué)校實(shí)驗(yàn)室-省略該步驟);2) 啟動(dòng)linux操作系統(tǒng),用root用戶登陸;3) 用鼠標(biāo)尋找主菜單-系統(tǒng)設(shè)置-
13、用戶和組管理-添加用戶,產(chǎn)生一個(gè)普通用戶(自己的選擇,比如stu1);注意觀察這個(gè)用戶的主目錄在整個(gè)linux中的位置4) 在主菜單中注銷并退出root用戶,然后再用你產(chǎn)生的用戶(比如stu1)登陸系統(tǒng);5) 在桌面上空白處點(diǎn)擊鼠標(biāo)右鍵,然后“新建終端”,并進(jìn)入終端窗口;終端是命令行操作模式6) 在終端命令提示狀態(tài)下,用mkdir c-test命令做一個(gè)子目錄(自己的選擇,比如c-test),并用cd c-test命令進(jìn)入這個(gè)子目錄;7) 在這個(gè)目錄下用vi c-h.c編輯源程序文件;學(xué)習(xí)vi編輯器或其它編輯器8) 用vi makefile編輯makefile文件;9) 用make命令編譯你剛
14、輸入的源程序;10) 在目錄/home/stu1/c-test下,出現(xiàn)命令行提示符號(hào)$,輸入./c-h lili就可以執(zhí)行你編寫的程序。觀察結(jié)果,思考編輯、編譯、執(zhí)行三者關(guān)系。11) 在主菜單中選擇關(guān)閉系統(tǒng)。3.3程序樣本:3.3.1 c-h.c文件int main(int argc, char *argv)if (argc 2) printf(“命令參數(shù)不正確n”);exit(-1);printf(“nhello,%s!n”,argv1);exit(1);3.3.2 makefile文件c-h:c-h.ogcc -o c-h c-h.c實(shí)驗(yàn)二 利用linux的/dev/tty接口的通信程序設(shè)
15、計(jì)(利用linux 串口設(shè)備文件編通信程序)1實(shí)驗(yàn)?zāi)康恼莆誰inux程序設(shè)計(jì)的基本方法和linux的操作;掌握linux串口文件的使用,學(xué)會(huì)如何在linux之上采用串口作通信。2實(shí)驗(yàn)內(nèi)容用c語言編寫一個(gè)基于/dev/ttysx串口設(shè)備的文件發(fā)送通信程序和文件接收通信程序(利用linux提供的串口內(nèi)核程序?qū)崿F(xiàn)),然后編輯輸入和編譯調(diào)試。完成任務(wù)的標(biāo)志是兩個(gè)機(jī)器之間通過232電纜實(shí)現(xiàn)任何文件的傳輸。3實(shí)驗(yàn)步驟及調(diào)試環(huán)境3.1調(diào)試環(huán)境pc以及l(fā)inux操作系統(tǒng)。3.2實(shí)驗(yàn)步驟:12) 脫機(jī)編寫基于/dev/ttysx串口設(shè)備的通信程序(參見樣本1);13) 做一個(gè)普通用戶并這個(gè)普通用戶登陸系統(tǒng);14
16、) 做一個(gè)子目錄,并在這個(gè)目錄下編輯文件;15) 學(xué)習(xí)vi編輯器或其它編輯器;16) 編輯輸入程序和編輯makefile文件;17) 編譯程序;18) 執(zhí)行程序;19) 退出系統(tǒng),關(guān)閉系統(tǒng)。3.3原理和程序樣本:3.3.1 串口簡(jiǎn)介串行口是計(jì)算機(jī)一種常用的接口,具有連接線少,通訊簡(jiǎn)單,得到廣泛的使用。常用的串口是 rs-232-c 接口(又稱 eia rs-232-c)它是在 1970 年由美國(guó)電子工業(yè)協(xié)會(huì)(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)該標(biāo)準(zhǔn)規(guī)定
17、采用一個(gè) 25 個(gè)腳的 db25 連接器,對(duì)連接器的每個(gè)引腳的信號(hào)內(nèi)容加以規(guī)定,還對(duì)各種信號(hào)的電平加以規(guī)定。傳輸距離在碼元畸變小于 4% 的情況下,傳輸電纜長(zhǎng)度應(yīng)為 15 米。linux 操作系統(tǒng)從一開始就對(duì)串行口提供了很好的支持,需要詳細(xì)了解串口使用,建議看參考書 serial programming guide for posix operating systems。3.3.2 計(jì)算機(jī)串口的引腳說明 序號(hào)信號(hào)名稱符號(hào)流向功能2發(fā)送數(shù)據(jù)txddtedcedte發(fā)送串行數(shù)據(jù)3接收數(shù)據(jù)rxddtedcedte 接收串行數(shù)據(jù)4請(qǐng)求發(fā)送rtsdtedcedte 請(qǐng)求 dce 將線路切換到發(fā)送方式5允
18、許發(fā)送ctsdtedcedce 告訴 dte 線路已接通可以發(fā)送數(shù)據(jù)6數(shù)據(jù)設(shè)備準(zhǔn)備好dsrdtedcedce 準(zhǔn)備好7信號(hào)地信號(hào)公共地8載波檢測(cè)dcddtedce表示 dce 接收到遠(yuǎn)程載波20數(shù)據(jù)終端準(zhǔn)備好dtrdtedcedte 準(zhǔn)備好22振鈴指示ridtedce表示 dce 與線路接通,出現(xiàn)振鈴3.3.3 串口操作串口操作需要的頭文件#include /*標(biāo)準(zhǔn)輸入輸出定義*/#include /*標(biāo)準(zhǔn)函數(shù)庫(kù)定義*/#include /*unix 標(biāo)準(zhǔn)函數(shù)定義*/#include #include #include /*文件控制定義*/#include /*ppsix 終端控制定義*/#i
19、nclude /*錯(cuò)誤號(hào)定義*/3.3.4 打開串口在 linux 下串口文件是位于 /dev 下的 串口一 為 /dev/ttys0 串口二 為 /dev/ttys1 打開串口是通過使用標(biāo)準(zhǔn)的文件打開函數(shù)操作:int fd;/*以讀寫方式打開串口*/fd = open( /dev/ttys0, o_rdwr);if (-1 = fd) /* 不能打開串口一*/ perror( 提示錯(cuò)誤!);3.3.5 設(shè)置串口最基本的設(shè)置串口包括波特率設(shè)置,效驗(yàn)位和停止位設(shè)置。串口的設(shè)置主要是設(shè)置 struct termios 結(jié)構(gòu)體的各成員值。struct termio unsigned short c_
20、iflag;/* 輸入模式標(biāo)志 */unsigned short c_oflag;/* 輸出模式標(biāo)志 */unsigned short c_cflag;/* 控制模式標(biāo)志*/unsigned short c_lflag;/* local mode flags */unsigned char c_line;/* line discipline */unsigned char c_ccncc; /* control characters */;設(shè)置這個(gè)結(jié)構(gòu)體很復(fù)雜,這里就只說說常見的一些設(shè)置:波特率設(shè)置下面是修改波特率的代碼struct termios opt;tcgetattr(fd, &opt
21、);cfsetispeed(&opt,b19200); /*設(shè)置為19200bps*/cfsetospeed(&opt,b19200);tcsetattr(fd,tcanow,&opt);設(shè)置波特率的例子函數(shù):/*set_speed(fd, speed) 設(shè)置串口通信速率參數(shù) fd 類型 int 打開串口的文件句柄參數(shù) speed 類型 int 串口速度返回 void*/int speed_arr = b38400, b19200, b9600, b4800, b2400, b1200, b300,b38400, b19200, b9600, b4800, b2400, b1200, b300
22、, ;int name_arr = 38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, ;void set_speed(int fd, int speed) int i; int status; struct termios opt;tcgetattr(fd, &opt); for (i= 0; i 0) printf(nlen %dn,nread); buffnread+1 = 0; printf( n%s, buff); / close(fd); / exit (0);3
23、.3.10 例子程序(樣本1)3.3.10.1 makfile文件all:send recvsend:tty_send_file.o tty_comm_init.ogcc -o send tty_send_file.o tty_comm_init.otty_send_file.o:tty_send_file.c tty_comm.hgcc -c tty_send_file.crecv:tty_recv_file.o tty_comm_init.ogcc -o recv tty_recv_file.o tty_comm_init.otty_recv_file.o:tty_recv_file.c
24、tty_comm.hgcc -c tty_recv_file.cclean:#rm *.o send recvtty_comm_init.o:tty_comm_init.c tty_comm.hgcc -c tty_comm_init.c3.3.10.2 頭文件#define false0#define true1#define name_len 50#define buffer_len 512#define c1 *#define e1 q#define e2 t#define s_n 0#define s_e1 1#define s_e2 2#define s_c 3void get_fi
25、le_end_flag(char *, int *);int check_file_end(char *, int *);void insert_chang_char(char *, int *);3.3.10.3 tty_comm_init.c文件(初始化子程序庫(kù))/-#include /*標(biāo)準(zhǔn)輸入輸出定義*/#include /*標(biāo)準(zhǔn)函數(shù)庫(kù)定義*/#include /*unix標(biāo)準(zhǔn)函數(shù)定義*/#include /*/#include /*/#include /*文件控制定義*/#include /*ppsix終端控制定義*/#include /*錯(cuò)誤號(hào)定義*/#include /*錯(cuò)誤號(hào)定
26、義*/#include tty_comm.h/*void set_speed(fd, speed) 設(shè)置串口通信速率參數(shù) fd 類型 int 打開串口的文件句柄參數(shù) speed 類型 int 串口速度返回 void*/int speed_arr = b38400, b19200, b9600, b4800, b2400, b1200, b300, b38400, b19200, b9600, b4800, b2400, b1200, b300, ;int name_arr = 38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 96
27、00, 4800, 2400, 1200, 300, ;void set_speed(int fd, int speed)int i;int status;struct termios opt;tcgetattr(fd, &opt);for ( i= 0; i sizeof(speed_arr) / sizeof(int); i+) if (speed = name_arri) tcflush(fd, tcioflush);cfsetispeed(&opt, speed_arri);cfsetospeed(&opt, speed_arri);status = tcsetattr(fd, tcs
28、anow, &opt); if (status != 0)perror(tcsetattr fd1); return; tcflush(fd, tcioflush);/*int set_parity(fd, databits, stopbits, parity) 設(shè)置串口數(shù)據(jù)位,停止位和效驗(yàn)位參數(shù) fd 類型 int 打開的串口文件句柄*參數(shù) databits類型 int 數(shù)據(jù)位 取值 為 7 或者8*參數(shù) stopbits類型 int 停止位 取值為 1 或者2*參數(shù) parity 類型 int 效驗(yàn)類型 取值為n,e,o,s*/int set_parity(int fd,int datab
29、its,int stopbits,int parity) struct termios options; if (tcgetattr(fd, &options) != 0) perror(setupserial 1); return(false); options.c_cflag &= csize; switch (databits) /*設(shè)置數(shù)據(jù)位數(shù)*/ case 7: options.c_cflag |= cs7; break; case 8: options.c_cflag |= cs8; break; default: fprintf(stderr,unsupported data s
30、izen); return (false); switch (parity) case n: case n: options.c_cflag &= parenb; /* clear parity enable */ options.c_iflag &= inpck; / enable parity checking break; case o: case o: options.c_cflag |= (parodd | parenb); /設(shè)置為奇效驗(yàn) options.c_iflag |= inpck; /* disnable parity checking */ break; case e:
31、case e: options.c_cflag |= parenb; /* enable parity */ options.c_cflag &= parodd; /* 轉(zhuǎn)換為偶效驗(yàn)*/ options.c_iflag |= inpck; /* disnable parity checking */ break; case s: case s: /*as no parity*/ options.c_cflag &= parenb; options.c_cflag &= cstopb; break; default: fprintf(stderr,unsupported parityn); re
32、turn (false); switch (stopbits) /* 設(shè)置停止位*/ case 1: options.c_cflag &= cstopb; break; case 2: options.c_cflag |= cstopb; break; default: fprintf(stderr,unsupported stop bitsn); return (false); if (parity != n) /* set input parity option */ options.c_iflag |= inpck; options.c_ccvtime = 150; / 15 secon
33、ds options.c_ccvmin = 0; tcflush(fd,tciflush); /* update the options and do it now */ if (tcsetattr(fd,tcsanow,&options) != 0) perror(setupserial 3); return (false); return (true);/* 打開串口*/int opendev(char *dev) int fd = open( dev, o_rdwr ); /| o_noctty | o_ndelay if (-1 = fd) /*設(shè)置數(shù)據(jù)位數(shù)*/ perror(cant
34、 open serial port); return -1; else return fd;/ 文件結(jié)束字段void get_file_end_flag(char *bufp, int *buf_len_p) /生成文件結(jié)束字串 char *p = bufp; *p+ = e1; *p+ = e2; *buf_len_p = 2;void memncopy(char *t1, char *f1, int n) register char *t = t1, *f = f1; register int i; for (i = 0; i n; i+) *t+ = *f+;static int endstat = s_n;int check_file_end(char *bufp, int *buf_len_p) /檢查文件傳輸完成否? char *p, *p1 = bufp; int ti = 0, bi = 0, ei = *buf_len_p; int r = false; p = malloc(ei); if (p = null) return false; memncopy(p, bufp, ei); while (bi ei) *p1+ = *p+; bi+; ti+; switch (*p) case e1: ends
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)??萍脊疚膯T聘用及綠色創(chuàng)新協(xié)議
- 二零二五年度農(nóng)村私人土地租賃與特色養(yǎng)殖合作合同
- 二零二五年度跨境電商金融服務(wù)商務(wù)協(xié)議書
- 小微企業(yè)市場(chǎng)開拓的營(yíng)銷推廣計(jì)劃
- 電商平臺(tái)用戶行為規(guī)范及免責(zé)聲明
- 車位抵押借款合同協(xié)議
- 企業(yè)信息化改造升級(jí)合作協(xié)議
- 設(shè)備采購(gòu)說明文書模板
- 提高團(tuán)隊(duì)協(xié)作效率的行動(dòng)計(jì)劃
- 物流運(yùn)輸安全及免責(zé)承諾書
- (三級(jí))工業(yè)機(jī)器人運(yùn)用與維護(hù)理論考試復(fù)習(xí)題庫(kù)(含答案)
- 2024年廣東省公務(wù)員錄用考試《行測(cè)》真題及解析
- 高中英語必背3500單詞表(完整版)
- 房產(chǎn)中介居間服務(wù)合同模板樣本
- 海洋工程裝備保險(xiǎn)研究
- 2024年廣東省深圳市中考英語試題含解析
- GB/T 16288-2024塑料制品的標(biāo)志
- 麻風(fēng)病防治知識(shí)課件
- 3素炒圓白菜 教案
- 透析患者營(yíng)養(yǎng)不良護(hù)理
- 學(xué)生消防安全常識(shí)問卷及答案
評(píng)論
0/150
提交評(píng)論