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

正文內(nèi)容

一個(gè)linux下基于電話線路的數(shù)據(jù)通信程序的設(shè)計(jì)與實(shí)現(xiàn)—免費(fèi)計(jì)算機(jī)畢業(yè)設(shè)計(jì)論文-在線瀏覽

2025-02-01 11:23本頁(yè)面
  

【正文】 豐富的應(yīng)用程序和開(kāi)發(fā)工具,可以支持各種硬件平臺(tái)和外部設(shè)備; Linux 又是完全開(kāi)放的操作系統(tǒng),很大程度上, Linux 的開(kāi)放性,賦予了其無(wú)窮的生命力。所以在 Linux 平臺(tái)的基礎(chǔ)上,選用 GCC編繹代碼。 理論依據(jù) 本次設(shè)計(jì)所需要的開(kāi)發(fā)環(huán)境的搭建并不復(fù)雜,可是因?yàn)?程序直接對(duì)計(jì)算機(jī)硬件進(jìn)行操作,需要對(duì) RS232 串行端口有比較深入的了解,必須清楚各引腳電信號(hào)的作用,串口的工作方式,針對(duì)不同工作的方式,進(jìn)行不同的設(shè)置。通過(guò)完成本設(shè)計(jì),既有助于深入了解計(jì)算機(jī)接口,又為硬件控制編程打下了一定基礎(chǔ),而且還能熟悉 Linux程序設(shè)計(jì)。 本設(shè)計(jì)中使用的 POSIX(UNIX 可移植標(biāo)準(zhǔn) )終端控制函數(shù),少量修改就可以運(yùn)行于 IRIX174。, Solaris174。, Linux174。在不同的類 UNIX 操作系統(tǒng)之間的最大差別是串口設(shè)備和鎖定文件的名字。 串行端口簡(jiǎn)介 串行通迅 計(jì)算機(jī)一次傳輸一 位 或多位的信息(數(shù)據(jù)) ,串行是指一次傳輸一位數(shù)據(jù)。當(dāng)進(jìn)行串行通訊時(shí),傳送或接 收 的每個(gè)字(例如:字節(jié)或字符)是以每次一位傳輸?shù)摹S袝r(shí)也能聽(tīng)到以 mark 表示 on 狀態(tài)和 space 表示 off 狀態(tài)。這只是用于表示每秒能夠傳送的 1和 0的數(shù)量。對(duì)于超過(guò) 1,000,000 的速度表示為兆波特,或者 Mbps (例如 )。由于通信設(shè)備廠商都生產(chǎn)與 RS232C 制式兼容的通信設(shè)備,因此,它作為一種標(biāo)準(zhǔn),目前已在微機(jī)通信中廣泛采用,它不僅已被內(nèi)置于每一臺(tái)計(jì)算機(jī),同時(shí)也已被內(nèi)置于從微控制器到主機(jī)的多種類型的計(jì)算機(jī)及其相連接的設(shè)備。另外, RS232 也 可以直接應(yīng)用于任何類型計(jì)算機(jī)之間的簡(jiǎn)單連接。 在 TxD 和 RxD 上: 第 4 頁(yè) 共 24頁(yè) 在 RTS、 CTS、 DSR、 DTR 和 DCD等控制線上: 由于 RS232C 并未定義連接器的物理特性,因此,出現(xiàn)了 DB2 DB15和 DB9 各種類 型的連接器,其引腳的定義也各不相同,現(xiàn)在最常見(jiàn)的是 DB9連接器。 RS422使用低電壓和微分信號(hào),允許線纜長(zhǎng)度到 1000 英尺 (300 米 )。 異步通迅 為使計(jì)算機(jī)理解進(jìn)入它的串行數(shù)據(jù),它需要一些途徑?jīng)Q定 哪 里是字符的開(kāi)始和結(jié)束。 在異步模式下,串行數(shù)據(jù)線保持在 mark (1)狀態(tài),直到有字符傳送。起始位始終是一個(gè) space (0),從而告訴計(jì)算機(jī)新的串行數(shù)據(jù)到來(lái)。 圖 1 異步數(shù)據(jù)通訊 可選的校驗(yàn)是一個(gè)簡(jiǎn)單數(shù)據(jù)位的加和,表明了數(shù)據(jù)位包含偶數(shù)或奇數(shù)個(gè) 1。 其它常見(jiàn)的校驗(yàn)如 space 校驗(yàn) , mark 校驗(yàn) , 和無(wú)校驗(yàn)。無(wú)校驗(yàn)意味校驗(yàn)不存在或不傳輸。這可以是 1, , 或 2 位停止位在字符之間,始終是 1。異步數(shù)據(jù)格式通常表示為 8N1, 7E1,諸如此類。 MODEM 簡(jiǎn)介 MODEM 目前最廣泛使用的數(shù)據(jù)傳輸通道就是模擬電話線路。 MODEM 從發(fā)送方串行接收數(shù)據(jù),然后經(jīng)過(guò)調(diào)制,將數(shù)字信號(hào)轉(zhuǎn)換為模擬信號(hào),最后通過(guò)電話網(wǎng)絡(luò)傳送到接收方,然后接收方的 MODEM 將電話線上信號(hào)解調(diào),將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),然后進(jìn)入計(jì)算機(jī)通道。 MODEM的分類和型號(hào)眾多,為了方便 Linux 操作系統(tǒng)設(shè)置,本次設(shè)計(jì)選用外置 56K MODEM。 Hayes 公司的 SmartMODEM 系列產(chǎn)品已成為 MODEM 的事實(shí)上的標(biāo)準(zhǔn),而幾乎所有應(yīng)用于計(jì)算機(jī)通信的 MODEM 均號(hào)稱與 Hayes SmartMODEM 兼容。目前各廠家生產(chǎn)的 MODEM 除了可以執(zhí)行最基本的 Hayes 命令集外,還有自己特有的命令。此時(shí) TXD 和 RXD 不僅僅是傳輸數(shù)據(jù),還傳送 AT 命令。這些命令和返回結(jié)果符合 RS232C 數(shù)據(jù)格式。 3 系統(tǒng)開(kāi)發(fā)環(huán)境 系統(tǒng)開(kāi)發(fā)環(huán)境 本系統(tǒng)采用的軟件工具有 : Windows 平臺(tái)虛擬機(jī): 操作系統(tǒng) : Radhat 編輯器: VI 編譯器: gcc 20200222 函 數(shù)庫(kù): glibc 系統(tǒng)頭文件: glibc_header gcc簡(jiǎn)介 Linux 系統(tǒng)下的 gcc( GNU C Compiler)是 GNU 推出的功能強(qiáng)大、性能優(yōu)越的多平臺(tái)編譯器,是 GNU 的代表作品之一。 Gcc 編譯器能將 C、 C++語(yǔ)言源程序、匯 編 程序和目標(biāo)程序編譯、連接成可執(zhí)行文件,如果沒(méi)有給出可執(zhí)行文件的名字, gcc 將生成一個(gè)名為 的文件。而 gcc 則通過(guò)后綴來(lái)區(qū)別輸入文件的類別 。 命令 gcc 首先調(diào)用 cpp 進(jìn)行預(yù)處理,在預(yù)處理過(guò)程中,對(duì)源代碼文件中的文件包含 (include)、預(yù)編譯語(yǔ)句 (如宏定義 define 等 )進(jìn)行分析。匯編過(guò)程是針對(duì)匯編語(yǔ)言的步驟 。在連接階段,所有的目標(biāo)文件被安排在可執(zhí)行程序中的恰當(dāng)?shù)奈恢?,同時(shí),該程序所調(diào)用到的庫(kù)函數(shù)也從各自所在的檔案庫(kù)中連到合適的地方。 4 程序的設(shè)計(jì) 設(shè)計(jì)概要 此次設(shè)計(jì)之所以選擇 Linux,是因?yàn)?Linux 支持各種硬件平臺(tái)和外部設(shè)備,Linux 對(duì)串口的操作非常簡(jiǎn)單,功能齊全,且 Linux 有功能強(qiáng)大的 C語(yǔ)言編譯器(gcc),使程序的可移植性非常好。 本設(shè)計(jì)基于 Linux 操作系統(tǒng),利用 POSIX termios 函數(shù)控制計(jì)算機(jī)串口,通過(guò) AT 命令初始化本地 MODEM 并讓本地 MMODEM 與異地 MODEM 進(jìn)行撥號(hào)連接。 連接成功后,通過(guò)讀寫計(jì)算機(jī)串口來(lái)實(shí)現(xiàn)文件傳輸 這個(gè)過(guò)程是用一個(gè)自編的文件傳輸協(xié)議來(lái)完成的??傮w設(shè)想如圖 3 所示: 圖 3 預(yù)期設(shè)計(jì)效果 總體來(lái)說(shuō),設(shè)計(jì)可以分成兩部分來(lái)進(jìn)行: RS232C 與 MODEM。兩部分的關(guān)系如圖 4 如示: 第 8 頁(yè) 共 24頁(yè) 圖 4 RS232C 所以設(shè)計(jì)的關(guān)鍵是現(xiàn)實(shí)對(duì) RS232C控制,然后再完成 MODEM 的部分。 ttyS0 和 ttyS2使用同一個(gè)中斷 IRQ4, ttyS1 和 ttyS3 使用同一個(gè)中斷 IRQ3,所以如果同時(shí)使用了 ttyS0 和 ttyS2 或者 ttyS1 和 ttyS3,就必須重設(shè)它們的中斷才可以,幸運(yùn)的是,現(xiàn)在常見(jiàn)的設(shè)備都不使用串口,所以連接 56K MODEM 時(shí),多數(shù)情況都不必再重設(shè)串口中斷,如果是外置 MODEM,則它占用的是 ttyS0,如果是內(nèi)置 MODEM,則它占用的很可能是 ttyS2。 此次設(shè)計(jì)是在 Windows VMware Workstation虛擬機(jī)環(huán)境下安裝的 操作系統(tǒng),所以在進(jìn)行設(shè)計(jì)之前,必須為虛擬機(jī)添加串口設(shè)備,具體是在設(shè)置中點(diǎn)擊 添加,選擇串口設(shè)備,然后一直選擇下一步即可。設(shè)置成功后,可以像使用真正的操作系統(tǒng)一樣使用虛擬機(jī),虛擬機(jī)下面的串口是真實(shí)的物理串口,而并非是虛擬出來(lái)的。 確定串口正確建立以后,使用 open()函數(shù)來(lái)打開(kāi)它。要訪問(wèn)一個(gè)串行端口,只要像訪問(wèn)文件一樣來(lái)訪問(wèn)設(shè)備文件即可。 以 ttyS0 以例, int fd。 O_RDWR 代表可讀可寫, O_NOCTTY 告訴 Linux 該程序不想成為那個(gè)端口的“控制終端”。 O_NDELAY 標(biāo)志該程序不關(guān)心 DCD 信號(hào)的輸入狀態(tài),即無(wú)論另一端端口是否啟用和運(yùn)行。 如果不是以 root 身份登陸,在打開(kāi)串口時(shí),可能會(huì)發(fā)生權(quán)限不允 許的情況,這時(shí)候使用 chmod a+rw /dev/ttyS0 命令改變文件權(quán)限即可,或者直接用 root身份登陸。串口技術(shù)已經(jīng)很成熟,相應(yīng)的它的設(shè)置也變得很復(fù)雜,但相當(dāng)一部分功能是針對(duì)已經(jīng)被淘汰的外部設(shè)備,所以這里只用到了其中一部分 的功能 。首先必須引入文件 。 termios 是一個(gè)結(jié)構(gòu)體,它的結(jié)構(gòu)成員如表 2如示: 表 2 Termios 結(jié)構(gòu)成員 成員 描述 c_cflag 控制項(xiàng) c_lflag 線路項(xiàng) c_iflag 輸入項(xiàng) c_oflag 輸出項(xiàng) c_cc 控制字符 c_ispeed 輸入波特 (新接口 ) c_ospeed 輸出波特 (新接口 ) 在對(duì) termios 成員進(jìn)行設(shè)置之前,首先要使用 tcgetattr(fd, amp。option)將設(shè)置的內(nèi)容寫入計(jì)算機(jī)串口, option 是 termios 類型 第 10 頁(yè) 共 24頁(yè) 變量, TCSANOW 表明所有的改變立即生效,而不等待發(fā)送或者接收的數(shù)據(jù)結(jié)束。對(duì)應(yīng)此次設(shè)計(jì)的 c_cflag 設(shè)置如下: cfsetispeed(amp。 //Buadrate 115200 cfsetospeed(amp。 |= (CLOCAL | CREAD)。= ~CSIZE。 //Select 8 data bits amp。 //NO amp。 //One Stop bit cfsetispeed 和 cfsetospeed 函數(shù)用于設(shè)備波特率,上面設(shè)置的是 115200波特,可供選擇的還有 B76800, B19200, B1200 等等。 不同于波特率,沒(méi)有函數(shù)可以用來(lái)設(shè)置字符尺寸,需要使用比特掩碼的操作來(lái)完成。 CLOCAL | CREAD 將保證這個(gè)程序不會(huì)成為端口 的擁有者,從而不會(huì)妨礙控制工作和掛起信號(hào)并使串行接口驅(qū)動(dòng)讀取進(jìn)入的數(shù)據(jù)。最后的停止位也可以設(shè)置成 1位或者 2位。CSIZE 是數(shù)據(jù)位數(shù)掩碼,必須在設(shè)置 CS8之前使用,起清除的作用,會(huì)把之前對(duì)數(shù)據(jù)位數(shù)的設(shè)置清除掉。 c_iflag、 c_lflag 和 c_oflag 設(shè)置 amp。= ~(INPCK | IGNPAR |IXON |IXOFF |IXANY)。= ~OPOST。 IXON、 IXOFF、 IXANY 分別是軟件流控制 開(kāi)啟、軟件流控制關(guān)閉和允許任何字符再次啟動(dòng)流,為簡(jiǎn)單起見(jiàn),設(shè)計(jì)中不使用軟件流控制串行通迅,所以屏 第 11 頁(yè) 共 24頁(yè) 蔽這三項(xiàng)。簡(jiǎn)單講,串行設(shè)備有三種不同的的輸入方式,需要為程序選擇合適的工作方式: ◆ 標(biāo)準(zhǔn)輸入模式。 ◆ 非標(biāo)準(zhǔn)輸入模式。這種模式可以用在每次讀取固定長(zhǎng)度字符串的程序中,或者所連接的設(shè)備會(huì)突然大量字符的情況下。實(shí)際上這并不是另一種輸入方式,它用于處理來(lái)自多個(gè)設(shè)備的數(shù)據(jù)。 ECHO和 ECHOE 是關(guān)于回顯的選項(xiàng),如果串口另一端也要求回顯的話,那就會(huì)造成串口兩端反饋死循環(huán),所以屏蔽它們。 而 c_oflag 是對(duì)輸出數(shù)據(jù)進(jìn)行 處理的成員項(xiàng),相應(yīng)的就有標(biāo)準(zhǔn)輸出模式和非標(biāo)準(zhǔn)輸出模式。如果選擇了 OPOST 項(xiàng),那么就是標(biāo)準(zhǔn)輸出模式。 c_cc控制字符設(shè)置 [VMIN] = 0。 c_cc 的結(jié)構(gòu)是一個(gè)字符數(shù)組,它包含了控制字符和超時(shí)參數(shù)。 VMIN 和 VTIME 只有在非標(biāo)準(zhǔn)輸入時(shí)才有效。這兩個(gè)參數(shù)控制這種模式的輸入行為: c_cc[VTIME]設(shè)定字符輸入間隔時(shí)間計(jì)時(shí)器,而 c_cc[VMIN]設(shè)置滿足讀取函數(shù)的最少字節(jié)數(shù)。 MIN = 0, TIME 0: TIME 決定了超時(shí)值,讀取函數(shù)在讀到一個(gè)字節(jié)的字符,或者等待讀取時(shí)間超了 TIME(t = TIME*)以后返回,也就是說(shuō),即使沒(méi)有從 第 12 頁(yè) 共 24頁(yè) 串口讀到數(shù)據(jù),讀取函數(shù)會(huì)在 TIME 時(shí)間后返回。此時(shí)計(jì)時(shí)器會(huì)在每次收到字符的時(shí)候重新計(jì)時(shí),且只在收到第一個(gè)字節(jié)后才啟動(dòng)。 MIN = 0, TIME = 0: 讀取函數(shù)會(huì)立即返回。 設(shè)計(jì)時(shí)考慮到不能讓串口接收不到數(shù)據(jù)陷入無(wú)限等待的僵死狀態(tài),并且又得讓串口有一定長(zhǎng)的等待時(shí)間等待數(shù)據(jù)到來(lái),所以選擇了 MIN = 0, TIME 0 的組合,即在沒(méi)有數(shù)據(jù)到來(lái)時(shí),會(huì)等待 TIME 時(shí)間,如果超過(guò) TIME 仍沒(méi)有數(shù)據(jù)到來(lái),則讀取串口的函數(shù)仍可以返回。 MIN 和 TIME 需要配合 ftl(fd, F_SETFL,0)使用, ftl(fd, F_SETFL,0)作用是當(dāng)串口沒(méi)有接收到字符時(shí),阻塞等待一段時(shí)間。如果不想讓串口阻塞,則可以設(shè)置 ftl(fd, F_SETFL,FNDELAY),這時(shí)它與 MIN = 0, TIME = 0得到的結(jié)果相同。可以用 include 將其函數(shù)聲明加入程序。option),串口設(shè)置就完成了。 if( n 4 ) printf(“ write to serial port failed!\n” )。串口本身有 4K 的讀寫緩存,不同的計(jì)算機(jī)可能緩存大小不一樣。 向串口寫數(shù)據(jù)往往一次性就能成功,例如一次性往串 口寫 100 個(gè)字符,但若從串口讀這 100 個(gè)字符,根據(jù) MIN 和 TIME 設(shè)置的不同,可能需要讀取兩次才能將這 100 個(gè)字符完整讀出來(lái)。同時(shí),串口波特率越高,一次性把串口數(shù)據(jù)讀完的機(jī)率也越小。除了撥號(hào)占據(jù)短暫的時(shí)間之外, MODEM 總是處于其中一種狀態(tài)。在命令狀態(tài)下 MODEM 以 AT 命令形式接受命令,例指示 MODEM去撥號(hào)或當(dāng)電話響鈴時(shí)給 予自動(dòng)應(yīng)答。這時(shí) MODEM 不再嘗對(duì)發(fā)送給它的數(shù)據(jù)進(jìn)行解釋,而是直接將其發(fā)送出去。 當(dāng) MODEM 處于命令狀態(tài)時(shí), MODEM 不是和遠(yuǎn)端系統(tǒng)通信,而是準(zhǔn)備接受命令,此時(shí) MODEM 一般處于掛機(jī)狀態(tài) (離線命令狀態(tài) ),但也可以處于摘機(jī)狀態(tài) (在線命令狀態(tài) )。在線狀態(tài)又稱為聯(lián)機(jī)狀態(tài)或數(shù)據(jù)狀態(tài),當(dāng)通信雙方握手完成,建立通信鏈路后, MODEM 就可以發(fā)送和接收數(shù)據(jù)
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1