




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式應(yīng)用程序設(shè)計(jì)嵌入式應(yīng)用程序設(shè)計(jì)第五章 嵌入式文件I/O編程2 5.1 Linux系統(tǒng)調(diào)用及用戶編程接口5.2 Linux文件I/O系統(tǒng)概述5.3 底層文件I/O操作5.4 嵌入式Linux串口應(yīng)用編程5.5 標(biāo)準(zhǔn)I/O編程5.6 實(shí)驗(yàn)內(nèi)容5.7 小結(jié)5.8 思考與練習(xí)本章課程:本章課程:35.1 Linux系統(tǒng)調(diào)用及用戶編程接口5.1.1 系統(tǒng)調(diào)用5.1.2 用戶編程接口5.1.3 系統(tǒng)命令45.1.1 系統(tǒng)調(diào)用 系統(tǒng)調(diào)用是指操作系統(tǒng)提供給用戶程序調(diào)用的一組“特殊”接口,用戶程序可以通過這組“特殊”接口獲得操作系統(tǒng)內(nèi)核提供的服務(wù)。例如用戶可以通過進(jìn)程控制相關(guān)的系統(tǒng)調(diào)用來創(chuàng)建進(jìn)程、實(shí)現(xiàn)進(jìn)程
2、之間的通信等。 在Linux中,為了更好地保護(hù)內(nèi)核空間,將程序的運(yùn)行空間分為內(nèi)核空間和用戶空間(也就是常稱的內(nèi)核態(tài)和用戶態(tài)),它們分別運(yùn)行在不同的級(jí)別上,邏輯上是相互隔離的。 因此,用戶進(jìn)程在通常情況下不允許訪問內(nèi)核數(shù)據(jù),也無法使用內(nèi)核函數(shù),它們只能在用戶空間操作用戶數(shù)據(jù),調(diào)用用戶空間的函數(shù)。但是,在有些情況下,用戶空間的進(jìn)程需要獲得一定的系統(tǒng)服務(wù)(調(diào)用內(nèi)核空間程序),這時(shí)操作系統(tǒng)就必須利用系統(tǒng)提供給用戶的“特殊接口”系統(tǒng)調(diào)用規(guī)定用戶進(jìn)程進(jìn)入內(nèi)核空間的具體位置。進(jìn)行系統(tǒng)調(diào)用時(shí),程序運(yùn)行空間需要從用戶空間進(jìn)入內(nèi)核空間,處理完后再返回到用戶空間。5 5.1.2 用戶編程接口在Linux中,用戶編程
3、接口(API)遵循了在Unix中最流行的應(yīng)用編程界面標(biāo)準(zhǔn)POSIX標(biāo)準(zhǔn)。POSIX標(biāo)準(zhǔn)是由IEEE和ISO/IEC共同開發(fā)的標(biāo)準(zhǔn)系統(tǒng)。該標(biāo)準(zhǔn)基于當(dāng)時(shí)現(xiàn)有的Unix實(shí)踐和經(jīng)驗(yàn),描述了操作系統(tǒng)的系統(tǒng)調(diào)用編程接口(實(shí)際上就是API),用于保證應(yīng)用程序可以在源代碼一級(jí)上在多種操作系統(tǒng)上移植運(yùn)行。這些系統(tǒng)調(diào)用編程接口主要是通過C庫(libc)實(shí)現(xiàn)的。 6 5.1.3 系統(tǒng)命令系統(tǒng)命令相對(duì)API更高了一層,它實(shí)際上一個(gè)可執(zhí)行程序,它的內(nèi)部引用了用戶編程接口(API)來實(shí)現(xiàn)相應(yīng)的功能 ,它們之間的關(guān)系如圖:7 5.2 Linux文件I/O系統(tǒng)概述5.2.1 虛擬文件系統(tǒng)5.2.2 通用文件模型 5.2.3
4、Linux中文件及文件描述符85.2.1 虛擬文件系統(tǒng)Linux系統(tǒng)成功的關(guān)鍵因素之一就是具有與其他操作系統(tǒng)和諧共存的能力。Linux的文件系統(tǒng)由兩層結(jié)構(gòu)構(gòu)建。第一層是虛擬文件系統(tǒng)(VFS),第二層是各種不同的具體的文件系統(tǒng)。VFS在linux系統(tǒng)中的位置如圖:95.2.2 通用文件模型 通用的文件模型(common file model),這個(gè)模型的核心是4個(gè)對(duì)象類型,即超級(jí)塊對(duì)象(superblock object)、索引節(jié)點(diǎn)對(duì)象(inode object)、文件對(duì)象(file object)和目錄項(xiàng)對(duì)象(dentry object)。 105.2.3 Linux中文件及文件描述符 對(duì)于L
5、inux而言,所有對(duì)設(shè)備和文件的操作都是使用文件描述符來進(jìn)行的。文件描述符是一個(gè)非負(fù)的整數(shù),它是一個(gè)索引值,并指向在內(nèi)核中每個(gè)進(jìn)程打開文件的記錄表。當(dāng)打開一個(gè)現(xiàn)存文件或創(chuàng)建一個(gè)新文件時(shí),內(nèi)核就向進(jìn)程返回一個(gè)文件描述符;當(dāng)需要讀寫文件時(shí),也需要把文件描述符作為參數(shù)傳遞給相應(yīng)的函數(shù)。 一個(gè)進(jìn)程啟動(dòng)時(shí),都會(huì)打開3個(gè)文件:標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò)處理 文件描述符宏標(biāo)準(zhǔn)輸入0STDIN_FILENO 標(biāo)準(zhǔn)輸出1STDOUT_FILENO 標(biāo)準(zhǔn)出錯(cuò)2STDERR_FILENO 115.3 底層文件I/O操作5.3.1 基本文件操作5.3.2 文件鎖5.3.3 多路復(fù)用12 5.3.1 基本文件操作op
6、en函數(shù)是用于打開或創(chuàng)建文件,在打開或創(chuàng)建文件時(shí)可以指定文件的屬性及用戶的權(quán)限等各種參數(shù)。所需頭文件:#include #include #include 原型:int open(const char *pathname, int flags, int perms) 135.3.1 基本文件操作open函數(shù)語法要點(diǎn)145.3.1 基本文件操作close()函數(shù)是用于關(guān)閉一個(gè)被打開的文件。 close函數(shù)語法要點(diǎn):155.3.1 基本文件操作read()函數(shù)是用于將從指定的文件描述符中讀出的數(shù)據(jù)放到緩存區(qū)中,并返回實(shí)際讀入的字節(jié)數(shù) 。 read函數(shù)語法要點(diǎn):16 5.3.1 基本文件操作writ
7、e()函數(shù)是用于向打開的文件寫數(shù)據(jù),寫操作從文件的當(dāng)前指針位置開始。 write函數(shù)語法要點(diǎn):175.3.1 基本文件操作lseek()函數(shù)是用于在指定的文件描述符中將文件指針定位到相應(yīng)的位置。 lseek函數(shù)語法要點(diǎn):185.3.2 文件鎖文件鎖包括建議性鎖和強(qiáng)制性鎖。建議性鎖要求每個(gè)上鎖文件的進(jìn)程都要檢查是否有鎖存在,并且尊重已有的鎖。在一般情況下,內(nèi)核和系統(tǒng)都不使用建議性鎖。強(qiáng)制性鎖是由內(nèi)核執(zhí)行的鎖,當(dāng)一個(gè)文件被上鎖進(jìn)行寫入操作的時(shí)候,內(nèi)核將阻止其他任何文件對(duì)其進(jìn)行讀寫操作。采用強(qiáng)制性鎖對(duì)性能的影響很大,每次讀寫操作都必須檢查是否有鎖存在。 在Linux中,實(shí)現(xiàn)文件上鎖的函數(shù)有l(wèi)ockf
8、()和fcntl(),其中l(wèi)ockf()用于對(duì)文件施加建議性鎖,而fcntl()不僅可以施加建議性鎖,還可以施加強(qiáng)制鎖。同時(shí),fcntl()還能對(duì)文件的某一記錄上鎖,也就是記錄鎖。記錄鎖又可分為讀取鎖和寫入鎖,其中讀取鎖又稱為共享鎖,它能夠使多個(gè)進(jìn)程都能在文件的同一部分建立讀取鎖。而寫入鎖又稱為排斥鎖,在任何時(shí)刻只能有一個(gè)進(jìn)程在文件的某個(gè)部分上建立寫入鎖。當(dāng)然,在文件的同一部分不能同時(shí)建立讀取鎖和寫入鎖。fcntl()函數(shù)具有很豐富的功能,它可以對(duì)已打開的文件描述符進(jìn)行各種操作,不僅包括管理文件鎖,還包括獲得設(shè)置文件描述符和文件描述符標(biāo)志、文件描述符的復(fù)制等很多功能。 195.3.2 文件鎖f
9、cntl()函數(shù)語法要點(diǎn) 20 5.3.2 文件鎖fcntl()函數(shù)第三個(gè)參數(shù)lock說明lock為結(jié)構(gòu)體flock它的定義為:struct flock flock成員取值含義如表:short l_type;off_t l_start;short l_whence;off_t l_len;pid_t l_pid; 21 5.3.3 多路復(fù)用I/O處理模型阻塞I/O模型 非阻塞模型 I/O多路轉(zhuǎn)接模型 信號(hào)驅(qū)動(dòng)I/O模型 異步I/O模型 select和poll的I/O轉(zhuǎn)接模型是處理I/O復(fù)用的一個(gè)高效的方法 22 5.3.3 多路復(fù)用select()函數(shù)的語法格式 : 23 5.3.3 多路復(fù)用
10、select()對(duì)文件描述符進(jìn)行了分類處理,處理涉及4個(gè)宏: 245.3.3 多路復(fù)用 poll函數(shù)語法格式: 255.4 嵌入式Linux串口應(yīng)用編程5.4.1 串口概述5.4.2 串口配置詳解5.4.3 串口使用詳解26 5.4.1 串口概述常見的數(shù)據(jù)通信的基本方式可分為并行通信與串行通信兩種。并行通信是指利用多條數(shù)據(jù)傳輸線將一個(gè)字?jǐn)?shù)據(jù)的各比特位同時(shí)傳送。它的特點(diǎn)是傳輸速度快,適用于傳輸距離短且傳輸速度較高的通信。串行通信是指利用一條傳輸線將數(shù)據(jù)以比特位為單位順序傳送。特點(diǎn)是通信線路簡(jiǎn)單,利用簡(jiǎn)單的線纜就可實(shí)現(xiàn)通信,降低成本,適用于傳輸距離長(zhǎng)且傳輸速度較慢的通信。275.4.1 串口概述串
11、口是計(jì)算機(jī)一種常用的接口,常用的串口有RS-535-C接口。DB9串口接口:285.4.2 串口配置詳解串口設(shè)置主要是設(shè)置struct termios結(jié)構(gòu)體的各個(gè)成員#include struct termios unsigned short c_iflag;/* 輸入模式標(biāo)志 */unsigned short c_oflag;/* 輸出模式標(biāo)志 */unsigned short c_cflag;/* 控制模式標(biāo)志*/unsigned short c_lflag;/* 本地模式標(biāo)志 */unsigned char c_line;/* 線路規(guī)程 */unsigned char c_ccNCC;
12、/* 控制特性 */speed_t c_ispeed;/* 輸入速度 */speed_t c_ospeed;/* 輸出速度 */;295.4.2 串口配置詳解 保存原先串口設(shè)置為了安全起見和以后調(diào)試程序方便,可以先保存原先串口的配置,在這里可以使用函數(shù)tcgetattr(fd, &old_cfg)。該函數(shù)得到由fd指向的終端的配置參數(shù),并將它們保存于termios結(jié)構(gòu)變量old_cfg中。該函數(shù)還可以測(cè)試配置是否正確、該串口是否可用等。若調(diào)用成功,函數(shù)返回值為0,若調(diào)用失敗,函數(shù)返回值為1示例:if (tcgetattr(fd, &old_cfg) != 0) perror(tcgetattr
13、);return -1;305.4.2 串口配置詳解 激活選項(xiàng)CLOCAL和CREAD分別用于本地連接和接受使能,因此,首先要通過位掩碼的方式激活這兩個(gè)選項(xiàng)。newtio.c_cflag |= CLOCAL | CREAD;調(diào)用cfmakeraw()函數(shù)可以將終端設(shè)置為原始模式,在后面的實(shí)例中,采用原始模式進(jìn)行串口數(shù)據(jù)通信。cfmakeraw(&new_cfg);315.4.2 串口配置詳解 設(shè)置波特率設(shè)置波特率有專門的函數(shù),用戶不能直接通過位掩碼來操作。設(shè)置波特率的主要函數(shù)有:cfsetispeed()和cfsetospeed()。 示例:cfsetispeed(&new_cfg, B115
14、500);cfsetospeed(&new_cfg, B115500);325.4.2 串口配置詳解 設(shè)置字符大小與設(shè)置波特率不同,設(shè)置字符大小并沒有現(xiàn)成可用的函數(shù),需要用位掩碼。一般首先去除數(shù)據(jù)位中的位掩碼,再重新按要求設(shè)置示例:new_cfg.c_cflag &= CSIZE; /* 用數(shù)據(jù)位掩碼清空數(shù)據(jù)位設(shè)置 */new_cfg.c_cflag |= CS8;335.4.2 串口配置詳解 設(shè)置奇偶校驗(yàn)位設(shè)置奇偶校驗(yàn)位需要用到termios中的兩個(gè)成員:c_cflag和c_iflag。首先要激活c_cflag中的校驗(yàn)位使能標(biāo)志PARENB和是否要進(jìn)行校驗(yàn),這樣會(huì)對(duì)輸出數(shù)據(jù)產(chǎn)生校驗(yàn)位,而輸入
15、數(shù)據(jù)進(jìn)行校驗(yàn)檢查。同時(shí)還要激活c_iflag中的對(duì)于輸入數(shù)據(jù)的奇偶校驗(yàn)使能(INPCK)。 示例:奇校驗(yàn)new_cfg.c_cflag |= (PARODD | PARENB); new_cfg.c_iflag |= INPCK;偶校驗(yàn)new_cfg.c_cflag |= PARENB;new_cfg.c_cflag &= PARODD; new_cfg.c_iflag |= INPCK;345.4.2 串口配置詳解 設(shè)置停止位設(shè)置停止位是通過激活c_cflag中的CSTOPB而實(shí)現(xiàn)的。若停止位為一個(gè),則清除CSTOPB,若停止位為兩個(gè),則激活CSTOPB。示例:new_cfg.c_cflag
16、 &= CSTOPB;/* 將停止位設(shè)置為一個(gè)比特 */new_cfg.c_cflag |= CSTOPB;/* 將停止位設(shè)置為兩個(gè)比特 */355.4.2 串口配置詳解 設(shè)置最少字符和等待時(shí)間在對(duì)接收字符和等待時(shí)間沒有特別要求的情況下,可以將其設(shè)置為0,則在任何情況下read()函數(shù)立即返回,此時(shí)串口操作會(huì)設(shè)置為非阻塞方式。示例:new_cfg.c_ccVTIME = 0;new_cfg.c_ccVMIN = 0;365.4.2 串口配置詳解 清除串口緩沖由于串口在重新設(shè)置之后,需要對(duì)當(dāng)前的串口設(shè)備進(jìn)行適當(dāng)?shù)奶幚恚@時(shí)就可調(diào)用在中聲明的tcdrain()、tcflow()、tcflush()
17、等函數(shù)來處理目前串口緩沖中的數(shù)據(jù)。原型:int tcflush(int fd, int queue_selector); /* 用于清空輸入/輸出緩沖區(qū)*/tcflush()函數(shù),對(duì)于在緩沖區(qū)中的尚未傳輸?shù)臄?shù)據(jù),或者收到的但是尚未讀取的數(shù)據(jù),其處理方法取決于queue_selector的值,它可能的取值有以下幾種。 TCIFLUSH:對(duì)接收到而未被讀取的數(shù)據(jù)進(jìn)行清空處理。 TCOFLUSH:對(duì)尚未傳送成功的輸出數(shù)據(jù)進(jìn)行清空處理。 TCIOFLUSH:包括前兩種功能,即對(duì)尚未處理的輸入輸出數(shù)據(jù)進(jìn)行清空處理。示例:tcflush(fd, TCIFLUSH);375.4.2 串口配置詳解 激活配置在
18、完成全部串口配置之后,要激活剛才的配置并使配置生效。這里用到的函數(shù)是tcsetattr(),它的函數(shù)原型是:tcsetattr(int fd, int optional_actions, const struct termios *termios_p);其中參數(shù)termios_p是termios類型的新配置變量。參數(shù)optional_actions可能的取值有以下三種: TCSANOW:配置的修改立即生效。 TCSADRAIN:配置的修改在所有寫入fd的輸出都傳輸完畢之后生效。 TCSAFLUSH:所有已接受但未讀入的輸入都將在修改生效之前被丟棄。該函數(shù)若調(diào)用成功則返回0,若失敗則返回1385
19、.4.3 串口使用詳解 打開串口使用open函數(shù)打開串口fd = open( /dev/ttyS0, O_RDWR|O_NOCTTY|O_NDELAY);接下來可恢復(fù)串口的狀態(tài)為阻塞狀態(tài),用于等待串口數(shù)據(jù)的讀入,可用fcntl()函數(shù)實(shí)現(xiàn),如下所示:fcntl(fd, F_SETFL, 0);再接著可以測(cè)試打開的文件描述符是否連接到一個(gè)終端設(shè)備,以進(jìn)一步確認(rèn)串口是否正確打開,如下所示:isatty(fd);該函數(shù)調(diào)用成功則返回0,若失敗則返回-1。讀寫串口使用read/write函數(shù)讀寫串口 write(fd, buff, strlen(buff); read(fd, buff, BUFFER
20、_SIZE); 395.5 標(biāo)準(zhǔn)I/O編程標(biāo)準(zhǔn)I/O提供流緩沖的目的是盡可能減少使用read()和write()等系統(tǒng)調(diào)用的數(shù)量。標(biāo)準(zhǔn)I/O提供了3種類型的緩沖存儲(chǔ)。 全緩沖:在這種情況下,當(dāng)填滿標(biāo)準(zhǔn)I/O緩存后才進(jìn)行實(shí)際I/O操作。對(duì)于存放在磁盤上的文件通常是由標(biāo)準(zhǔn)I/O庫實(shí)施全緩沖的。標(biāo)準(zhǔn)I/O盡量多讀寫文件到緩沖區(qū),當(dāng)緩沖區(qū)已滿或手動(dòng)flush時(shí)才會(huì)進(jìn)行磁盤操作。 行緩沖:在這種情況下,當(dāng)在輸入和輸出中遇到行結(jié)束符時(shí),標(biāo)準(zhǔn)I/O庫執(zhí)行I/O操作。這允許我們一次輸出一個(gè)字符(如fputc()函數(shù)),但只有寫了一行之后才進(jìn)行實(shí)際I/O操作。標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)輸出就是使用行緩沖的典型例子。 不帶緩
21、沖:標(biāo)準(zhǔn)I/O庫不對(duì)字符進(jìn)行緩沖。如果用標(biāo)準(zhǔn)I/O函數(shù)寫若干字符到不帶緩沖的流中,則相當(dāng)于用系統(tǒng)調(diào)用write()函數(shù)將這些字符全寫到被打開的文件上。標(biāo)準(zhǔn)出錯(cuò)stderr通常是不帶緩存的,這就使得出錯(cuò)信息可以盡快顯示出來,而不管它們是否含有一個(gè)行結(jié)束符。405.5.1 基本操作打開文件打開文件有三個(gè)標(biāo)準(zhǔn)函數(shù),分別為:fopen()、fdopen()和freopen()。它們可以以不同的模式打開,但都返回一個(gè)指向FILE的指針,該指針指向?qū)?yīng)的I/O流。fopen()可以指定打開文件的路徑和模式 fopen函數(shù)格式: 415.5.1 基本操作打開文件mode類似于open()函數(shù)中的flag,可
22、以定義打開文件的訪問權(quán)限等,下面為mode的各種取值: 425.5.1 基本操作打開文件fdopen()可以指定打開的文件描述符和模式。fdopen函數(shù)格式:mode取值同fopen 435.5.1 基本操作打開文件freopen()除可指定打開的文件、模式外,還可指定特定的I/O流。 freopen函數(shù)格式:mode取值同fopen 445.5.1 基本操作關(guān)閉文件關(guān)閉標(biāo)準(zhǔn)流文件的函數(shù)為fclose(),該函數(shù)將緩沖區(qū)內(nèi)的數(shù)據(jù)全部寫入到文件中,并釋放系統(tǒng)所提供的文件資源。fclose()函數(shù)格式: 455.5.1 基本操作讀文件在文件流被打開之后,可對(duì)文件流進(jìn)行讀寫等操作,其中讀操作的函數(shù)為
23、fread()。fread()函數(shù)格式: 465.5.1 基本操作寫文件fwrite()函數(shù)是用于對(duì)指定的文件流進(jìn)行寫操作。fwrite()函數(shù)格式: 475.5.2 其他操作字符輸入/輸出字符輸入函數(shù):字符輸出函數(shù):485.5.2 其他操作行輸入/輸出行輸入函數(shù):行輸出函數(shù):49 5.5.2 其他操作格式化輸入/輸出格式化輸入函數(shù):505.5.2 其他操作格式化輸入/輸出格式化輸出函數(shù):51 5.6 實(shí)驗(yàn)內(nèi)容文件的讀寫與上鎖實(shí)驗(yàn)?zāi)康耐ㄟ^編寫文件讀寫及上鎖的程序,進(jìn)一步熟悉Linux中文件I/O相關(guān)的應(yīng)用開發(fā),并且熟練掌握open()、read()、write()、fcntl()等函數(shù)的使用。
24、實(shí)驗(yàn)內(nèi)容在Linux中FIFO是一種進(jìn)程之間的管道通信機(jī)制。Linux支持完整的FIFO通信機(jī)制。本實(shí)驗(yàn)內(nèi)容比較有趣,我們通過使用文件操作,仿真FIFO(先進(jìn)先出)結(jié)構(gòu)以及生產(chǎn)者-消費(fèi)者運(yùn)行模型。本實(shí)驗(yàn)中需要打開兩個(gè)虛擬終端,分別運(yùn)行生產(chǎn)者程序(producer)和消費(fèi)者程序(customer)。此時(shí)兩個(gè)進(jìn)程同時(shí)對(duì)同一個(gè)文件進(jìn)行讀寫操作。因?yàn)檫@個(gè)文件是臨界資源,所以可以使用文件鎖機(jī)制來保證兩個(gè)進(jìn)程對(duì)文件的訪問都是原子操作。先啟動(dòng)生產(chǎn)者進(jìn)程,它負(fù)責(zé)創(chuàng)建仿真FIFO結(jié)構(gòu)的文件(其實(shí)是一個(gè)普通文件)并投入生產(chǎn),就是按照給定的時(shí)間間隔,向FIFO文件寫入自動(dòng)生成的字符(在程序中用宏定義選擇使用數(shù)字還是
25、使用英文字符),生產(chǎn)周期以及要生產(chǎn)的資源數(shù)通過參數(shù)傳遞給進(jìn)程(默認(rèn)生產(chǎn)周期為1秒,要生產(chǎn)的資源總數(shù)為10個(gè)字符,顯然默認(rèn)生產(chǎn)總時(shí)間為10秒鐘)。后啟動(dòng)的消費(fèi)者進(jìn)程按照給定的數(shù)目進(jìn)行消費(fèi),首先從文件中讀取相應(yīng)數(shù)目的字符并在屏幕上顯示,然后從文件中刪除剛才消費(fèi)過的數(shù)據(jù)。為了仿真FIFO結(jié)構(gòu),此時(shí)需要使用兩次拷貝來實(shí)現(xiàn)文件內(nèi)容的偏移。每次消費(fèi)的資源數(shù)通過參數(shù)傳遞給進(jìn)程,默認(rèn)值為10個(gè)字符。525.6 實(shí)驗(yàn)內(nèi)容文件的讀寫與上鎖535.6 實(shí)驗(yàn)內(nèi)容 多路復(fù)用式串口操作實(shí)驗(yàn)?zāi)康耐ㄟ^編寫多路復(fù)用串口讀寫,進(jìn)一步理解多路復(fù)用函數(shù)的用法,同時(shí)更加熟練掌握Linux設(shè)備文件的讀寫方法。實(shí)驗(yàn)內(nèi)容本實(shí)驗(yàn)中,實(shí)現(xiàn)兩臺(tái)機(jī)器(宿主機(jī)和目標(biāo)板)之間的串口通信,而且每臺(tái)機(jī)器均可以發(fā)送和接收數(shù)據(jù)。 除了串口設(shè)備名稱不同(宿主機(jī)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024~2025學(xué)年遼寧撫順東洲區(qū)七年級(jí)下冊(cè)5月期中考試數(shù)學(xué)試題
- 潔具生產(chǎn)能源審計(jì)對(duì)企業(yè)能效認(rèn)證的影響考核試卷
- 糧食儲(chǔ)存通風(fēng)設(shè)備批發(fā)商合作政策考核試卷
- 心理危機(jī)干預(yù)中的心理急救知識(shí)普及考核試卷
- 公共衛(wèi)生事件監(jiān)測(cè)系統(tǒng)性能評(píng)估考核試卷
- 勞務(wù)派遣服務(wù)中的企業(yè)戰(zhàn)略規(guī)劃與執(zhí)行考核試卷
- 住宿救助機(jī)構(gòu)的社會(huì)企業(yè)風(fēng)險(xiǎn)管理考核試卷
- 跑道擴(kuò)建項(xiàng)目勘察成果與工程設(shè)計(jì)銜接研究考核試卷
- 農(nóng)業(yè)資源環(huán)境保護(hù)政策與農(nóng)村環(huán)境教育推廣考核試卷
- 金屬涂層技術(shù)考核試卷
- 2025年高考化學(xué)總復(fù)習(xí)試題分類訓(xùn)練:硫及其化合物(解析卷)
- 2023-2024學(xué)年廣東省深圳市龍華區(qū)八年級(jí)(下)期末英語試卷
- 濕疹護(hù)理課件教學(xué)課件
- 相關(guān)方需求和期望表
- 胃腸內(nèi)鏡護(hù)士進(jìn)修匯報(bào)
- 23J916-1 住宅排氣道(一)
- 生物基復(fù)合材料的LCA(生命周期評(píng)估)
- 【核心素養(yǎng)目標(biāo)】人教版物理九年級(jí) 13.1分子熱運(yùn)動(dòng) 教案
- 第四課 拗音 課件初中日語人教版七年級(jí)第一冊(cè)
- 廣東省廣州市天河區(qū)2023-2024學(xué)年八年級(jí)下學(xué)期期末物理模擬試卷
- 甲乙方施工合同范本
評(píng)論
0/150
提交評(píng)論