在Linux串口編程的一些問(wèn)題解決_第1頁(yè)
在Linux串口編程的一些問(wèn)題解決_第2頁(yè)
在Linux串口編程的一些問(wèn)題解決_第3頁(yè)
在Linux串口編程的一些問(wèn)題解決_第4頁(yè)
在Linux串口編程的一些問(wèn)題解決_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、在 Linux 串口編程的一些問(wèn)題解決其實(shí)在linux下對(duì)串口的設(shè)置主要是通過(guò)termios這個(gè)結(jié)構(gòu)體實(shí)現(xiàn)的,但是這個(gè)結(jié)構(gòu)體卻沒(méi)有提供控制RTS或獲得CTS等串口引腳狀態(tài)的接口,可以通過(guò)ioctl系統(tǒng)調(diào)用來(lái)獲得/控制。獲得:ioctl(fd, TIOCMGET, &controlbits);if (controlbits & TIOCM_CTS)printf(“有信n號(hào)” );elseprintf(“無(wú)信n號(hào)” );設(shè)置:ioctl(fd, TIOCMGET, &ctrlbits) ; if (flag)ctrlbits |= TIOCM_RTS;elsectrlbits &= TIOCM_R

2、TS;ioctl(fd, TIOCMSET, &ctrlbits);其實(shí) TIOCM_RTS有效后是把串口的RTS 設(shè)置為有信號(hào),但串口的電平為低時(shí)是有信號(hào),為高時(shí)為無(wú)信號(hào),和用TIOCMGET獲得的狀態(tài)正好相反,也就是說(shuō)TIOCMGET/TIOCMSET只是獲得 /控制串口的相應(yīng)引腳是否有信號(hào),并不反應(yīng)當(dāng)前串口的真實(shí)電平高低。網(wǎng)上許多流行的linux 串口編程的版本中都沒(méi)對(duì)c_iflag(termios 成員變量)這個(gè)變量進(jìn)行有效的設(shè)置,這樣傳送ASCII 碼時(shí)沒(méi)什么問(wèn)題,但傳送二進(jìn)制數(shù)據(jù)時(shí)遇到0 x0d,0 x11和 0 x13 卻會(huì)被丟掉。不用說(shuō)也知道, 這幾個(gè)肯定是特殊字符,被用作特殊

3、控制了。關(guān)掉 ICRNL 和 IXON 選項(xiàng)即可解決。c_iflag &= (ICRNL | IXON);0 x0d回車(chē)符 CR0 x11Q VSTART字符0 x13S VSTOP字符ICRNL 將輸入的CR 轉(zhuǎn)換為 NLIXON使起動(dòng) /停止輸出控制流起作用在 UNIX 環(huán)境高級(jí)編程第二版第 18 章第 11 小節(jié)看到把終端I/O 設(shè)置為原始模式(串口通訊就是終端I/O 的原始模式)時(shí)輸入屬性設(shè)置為term.c_iflag &= (BRKINT | ICRNL | INPCK |ISTRIP | IXON);屏蔽了許多屬性,怪不得有人說(shuō)如果是使用串口通訊c_iflag和 c_oflag 都

4、設(shè)置為 0 就行了!以下是我的設(shè)置的一些重要的串口屬性term.c_cflag |= CLOCAL | CREAD;term.c_lflag &= (ICANON | ECHO | ECHOE | ISIG);term.c_oflag &= OPOST;term.c_iflag &= (BRKINT | ICRNL | INPCK | ISTRIP | IXON);static void request_send(void)ioctl(fd,TIOCMGET, &status);status&= TIOCM_RTS;RTS 引腳高電平ioctl(fd,TIOCMSET, &status);st

5、atic void clear_send(void)ioctl(fd,TIOCMGET, &status);status |=TIOCM_RTS;/RTS引腳低電平ioctl(fd,TIOCMSET, &status);int main(int argc, char *argv)intfd;structtermios opt;intlen;charcmd;/待發(fā)送數(shù)據(jù)charsbuf128=Hello,this is a Serial_Port test!n0;/使用 open 函數(shù)打開(kāi)串口, 獲得串口設(shè)備文件的文件描述符if(fd=open(/dev/ttyAMA1,O_RDWR| O_NO

6、CTTY)=-1)perror(Cannot open the serial port);return 1;tcgetattr(fd, &opt);cfsetispeed(&opt,B115200 );/指定輸入波特率,9600bpscfsetospeed(&opt,B115200);/指定輸出波特率,9600bpsopt.c_cflag&=CSIZE;/將數(shù)據(jù)位修改為8bitopt.c_cflag|=CS8;opt.c_cflag|=CBAUD;無(wú)校驗(yàn)opt.c_cflag&= PARENB;opt.c_cflag|=IXON|IXOFF|IXANY;軟件數(shù)據(jù)流控制/opt.c_cflag|

7、=CRTSCTS;硬件數(shù)據(jù)流控制/opt.c_cflag &=CRTSCTS;/ 不使用數(shù)據(jù)流控制tcsetattr(fd, TCSANOW , &opt);intstatus;ioctl(fd,TIOCMGET, &status);printf(status = xn, status);status &=TIOCM_RTS;/ RTS引腳高電平status |=TIOCM_RTS;/RTS引腳低電平printf(status = xn, status);ioctl(fd,TIOCMSET, &status);ioctl(fd,TIOCMGET, &status);printf(status

8、= xn, status);while(1)printf(sellect: w|r|qn);cmd = getchar();switch(cmd)case w:printf(test writen);/發(fā)送緩沖區(qū)字節(jié)數(shù)定義len= write(fd,sbuf,strlen(sbuf);if(len = -1)printf(Wirte sbuf error.n);elseprintf(Wirte:%s, sbuf);break;case r:printf(test readn);len = read(fd, sbuf, sizeof(sbuf);if(len = -1)printf(Read s

9、buf error.n);elseprintf(Read:%s, sbuf);break;case q:close(fd);return 0;case n:break;default:printf(worry cmd!n);break;close(fd);return0;Linux下串口編程遇到的接收數(shù)據(jù)錯(cuò)誤及原因近日在調(diào)試串口的時(shí)候發(fā)現(xiàn),另一設(shè)備向我ARM板的串口發(fā)送 0 x0d ,我接收之后變成了0 x0a ,這是問(wèn)題一;另外當(dāng)對(duì)方向我發(fā)送一串?dāng)?shù)據(jù),如果其中有0 x11 ,那么我總是漏收此數(shù),這是問(wèn)題二。由于問(wèn)題莫名其妙,以為是筆記本的USB 轉(zhuǎn) 232 線(xiàn)纜的問(wèn)題,換,問(wèn)題依舊。以為是對(duì)

10、方設(shè)備的問(wèn)題,采用串口調(diào)試助手模擬通訊設(shè)備與 ARM 板通訊,問(wèn)題依舊。無(wú)奈才去查看資料,最終得以解決,現(xiàn)總結(jié)如下:1. 串口操作需要的頭文件#include /標(biāo)準(zhǔn)輸入輸出定義#include /標(biāo)準(zhǔn)函數(shù)庫(kù)定義#include /Unix標(biāo)準(zhǔn)函數(shù)定義#include #include #include /文件控制定義#include /POSIX中斷控制定義#include /錯(cuò)誤號(hào)定義2. 打開(kāi)串口串口位于/dev 中,可作為標(biāo)準(zhǔn)文件的形式打開(kāi),其中:串口 1 /dev/ttyS0串口 2 /dev/ttyS1代碼如下:int fd;fd = open(“ /dev/ttyS0” , O_

11、RDWR);if(fd = -1)Perror(“串口1 打開(kāi)失敗!”);/else/fcntl(fd, F_SETFL, FNDELAY);除了使用 O_RDWR標(biāo)志之外,通常還會(huì)使用O_NOCTTY和 O_NDELAY 這兩個(gè)標(biāo)志。O_NOCTTY :告訴 Unix 這個(gè)程序不想成為“控制終端”控制的程序,不說(shuō)明這個(gè)標(biāo)志的話(huà), 任何輸入都會(huì)影響你的程序。O_NDELAY :告訴 Unix 這個(gè)程序不關(guān)心DCD 信號(hào)線(xiàn)狀態(tài),即其他端口是否運(yùn)行,不說(shuō)明這個(gè)標(biāo)志的話(huà),該程序就會(huì)在DCD 信號(hào)線(xiàn)為低電平時(shí)停止。3. 設(shè)置波特率最基本的串口設(shè)置包括波特率、校驗(yàn)位和停止位設(shè)置,且串口設(shè)置主要使用ter

12、mios.h 頭文件中定義的termios 結(jié)構(gòu),如下:struct termiostcflag_t c_iflag; / 輸入模式標(biāo)志tcflag_t c_oflag; /輸出模式標(biāo)志tcflag_t c_cflag; /控制模式標(biāo)志tcflag_t c_lflag; / 本地模式標(biāo)志cc_t c_line; /line disciplinecc_t c_ccNCC; /control characters代碼如下: int speed_arr = B38400, B19200, B9600, B4800, B2400, B1200, B300, B38400, B19200, B9600,

13、 B4800, B2400, B1200, B300, ;int name_arr = 38400, 19200, 9600, 4800, 2400, 1200, 300, 38400, 19200, 9600, 4800, 2400, 1200, 300, ;voidSetSpeed(int fd, int speed)int i;struct termios Opt; / 定義 termios 結(jié)構(gòu) if(tcgetattr(fd, &Opt) != 0)perror(“ tcgetattr fd” );return;for(i = 0; i sizeof(speed_arr) / siz

14、eof(int); i+)if(speed = name_arri)tcflush(fd, TCIOFLUSH);cfsetispeed(&Opt, speed_arri);cfsetospeed(&Opt, speed_arri);if(tcsetattr(fd, TCSANOW, &Opt) != 0)perror(“ tcsetattr fdreturn;tcflush(fd, TCIOFLUSH);” );注意 tcsetattr 函數(shù)中使用的標(biāo)志:TCSANOW :立即執(zhí)行而不等待數(shù)據(jù)發(fā)送或者接受完成。TCSADRAIN :等待所有數(shù)據(jù)傳遞完成后執(zhí)行。TCSAFLUSH :Flush

15、 input and output buffers and make thechange4. 設(shè)置數(shù)據(jù)位、停止位和校驗(yàn)位以下是幾個(gè)數(shù)據(jù)位、停止位和校驗(yàn)位的設(shè)置方法:(以下均為1 位停止位)位數(shù)據(jù)位、無(wú)校驗(yàn)位:Opt.c_cflag &= PARENB;Opt.c_cflag &= CSTOPB;Opt.c_cflag &= CSIZE;Opt.c_cflag |= CS8;位數(shù)據(jù)位、奇校驗(yàn):Opt.c_cflag |= PARENB;Opt.c_cflag |= PARODD;Opt.c_cflag &= CSTOPB;Opt.c_cflag &= CSIZE;Opt.c_cflag |= C

16、S7;位數(shù)據(jù)位、偶校驗(yàn):Opt.c_cflag |= PARENB;Opt.c_cflag &= PARODD;Opt.c_cflag &= CSTOPB;Opt.c_cflag &= CSIZE;Opt.c_cflag |= CS7;7 位數(shù)據(jù)位、 Space 校驗(yàn):Opt.c_cflag &= PARENB;Opt.c_cflag &= CSTOPB;Opt.c_cflag &= CSIZE;Opt.c_cflag |= CS7;代碼如下: int SetParity(int fd, int databits, int stopbits, int parity)struct termios

17、 Opt;if(tcgetattr(fd, &Opt) != 0)perror(tcgetattr fd);return FALSE;Opt.c_cflag |= (CLOCAL | CREAD); / 一般必設(shè)置的標(biāo)志 switch(databits) / 設(shè)置數(shù)據(jù)位數(shù)case 7:Opt.c_cflag &= CSIZE;Opt.c_cflag |= CS7;break;case 8:Opt.c_cflag &= CSIZE;Opt.c_cflag |= CS8;berak;default:fprintf(stderr, Unsupported data size.n);return FA

18、LSE;switch(parity) /設(shè)置校驗(yàn)位case n:case N:Opt.c_cflag &= PARENB; /清除校驗(yàn)位Opt.c_iflag &= INPCK; /enable parity checkingbreak;case o:case O:Opt.c_cflag |= PARENB; /enable parityOpt.c_cflag |= PARODD; /奇校驗(yàn)Opt.c_iflag |= INPCK /disable parity checkingbreak;case e:case E:Opt.c_cflag |= PARENB; /enable parityO

19、pt.c_cflag &= PARODD; /偶校驗(yàn)Opt.c_iflag |= INPCK; /disable pairty checkingbreak;case s:case S:Opt.c_cflag &= PARENB; /清除校驗(yàn)位Opt.c_cflag &= CSTOPB; /?Opt.c_iflag |= INPCK; /disable pairty checkingbreak;default:fprintf(stderr, Unsupported parity.n);return FALSE;switch(stopbits) /設(shè)置停止位case 1:Opt.c_cflag &

20、= CSTOPB;break;case 2:Opt.c_cflag |= CSTOPB;break;default:fprintf(stderr, Unsupported stopbits.n);return FALSE;opt.c_cflag |= (CLOCAL | CREAD);opt.c_lflag &= (ICANON | ECHO | ECHOE | ISIG);opt.c_oflag &= OPOST;opt.c_oflag &= (ONLCR | OCRNL); /添加的opt.c_iflag &= (ICRNL | INLCR);opt.c_iflag &= (IXON |

21、IXOFF | IXANY); /添加的tcflush(fd, TCIFLUSH);Opt.c_ccVTIME = 0; /設(shè)置超時(shí)為15secOpt.c_ccVMIN = 0; /Update the Opt and do it nowif(tcsetattr(fd, TCSANOW, &Opt) != 0)perror(tcsetattr fd);return FALSE;return TRUE;5.某些設(shè)置項(xiàng)在第四步中我們看到一些比較特殊的設(shè)置,下面簡(jiǎn)述一下他們的作用。c_cc 數(shù)組的 VSTART 和 VSTOP 元素被設(shè)定成 DC1 和 DC3 ,代表 ASCII 標(biāo)準(zhǔn)的 XON 和

22、 XOFF 字符,如果在傳輸這兩個(gè)字符的時(shí)候就傳不過(guò)去,需要把軟件流控制屏蔽,即:Opt.c_iflag &= (IXON | IXOFF | IXANY);有時(shí)候,在用write 發(fā)送數(shù)據(jù)時(shí)沒(méi)有鍵入回車(chē),信息就發(fā)送不出去,這主要是因?yàn)槲覀冊(cè)谳斎胼敵鰰r(shí)是按照規(guī)范模式接收到回車(chē)或換行才發(fā)送,而更多情況下我們是不必鍵入回車(chē)或換行的。此時(shí)應(yīng)轉(zhuǎn)換到行方式輸入,不經(jīng)處理直接發(fā)送,設(shè)置如下:Opt.c_lflag &= (ICANON | ECHO | ECHOE | ISIG);還存在這樣的情況:發(fā)送字符0X0d 的時(shí)候,往往接收端得到的字符是0X0a,原因是因?yàn)樵诖谠O(shè)置中c_iflag和c_ofla

23、g中存在從NL-CR和CR-NL的映射,即串口能把回車(chē)和換行當(dāng)成同一個(gè)字符,可以進(jìn)行如下設(shè)置屏蔽之:Opt.c_iflag &= (INLCR | ICRNL | IGNCR);Opt.c_oflag &= (ONLCR | OCRNL);6.讀寫(xiě)串口發(fā)送數(shù)據(jù)方式如下, write 函數(shù)將返回寫(xiě)的位數(shù)或者當(dāng)錯(cuò)誤時(shí)為-1 。char buffer1024;int length;int nByte;nByte = write(fd, buffer, length);讀取數(shù)據(jù)方式如下,原始數(shù)據(jù)模式下每個(gè)read 函數(shù)將返回實(shí)際串口收到的字符數(shù),如果串口中沒(méi)有字符可用,回叫將會(huì)阻塞直到以下幾種情況:有

24、字符進(jìn)入;一個(gè)間隔計(jì)時(shí)器失效;錯(cuò)誤發(fā)送。在打開(kāi)串口成功后,使用fcntl(fd, F_SETFL, FNDELAY)語(yǔ)句,可以使 read 函數(shù)立即返回而不阻塞。FNDELAY選項(xiàng)使read 函數(shù)在串口無(wú)字符時(shí)立即返回且為0。char buffer1024;int length;int readByte;readByte = read(fd, buffer, len);注意:設(shè)置為原始模式傳輸數(shù)據(jù)的話(huà),read 函數(shù)返回的字符數(shù)是實(shí)際串口收到的字符數(shù)。Linux 下直接用read 讀串口可能會(huì)造成堵塞,或者數(shù)據(jù)讀出錯(cuò)誤,此時(shí)可使用tcntl 或者 select 等函數(shù)實(shí)現(xiàn)異步讀取。用selec

25、t 先查詢(xún) com 口,再用 read 去讀就可以避免上述錯(cuò)誤。關(guān)閉串口串口作為文件來(lái)處理,所以一般的關(guān)閉文件函數(shù)即可:close(fd);8. 例子這個(gè)例子中,需要打開(kāi)串口1,設(shè)置 9600波特率、8 位數(shù)據(jù)位、 1 位停止位以及空校驗(yàn), 之后利用 while 語(yǔ)句循環(huán)判斷串口中是否可以讀出數(shù)據(jù),將串口中數(shù)據(jù)連續(xù)讀出后重新寫(xiě)回到串口中。該程序可與minicom 聯(lián)合測(cè)試。 #include #include #include #include #include #include #include #include main()int fd;int i;int len;int n = 0;ch

26、ar read_buf256;char write_buf256;struct termios opt;fd = open(/dev/ttyS0, O_RDWR | O_NOCTTY); / 默認(rèn)為阻塞讀方式if(fd = -1)perror(open serial 0n);exit(0);tcgetattr(fd, &opt);cfsetispeed(&opt, B9600);cfsetospeed(&opt, B9600);if(tcsetattr(fd, TCSANOW, &opt) != 0 )perror(tcsetattr error);return -1;opt.c_cflag

27、&= CSIZE;opt.c_cflag |= CS8;opt.c_cflag &= CSTOPB;opt.c_cflag &= PARENB;opt.c_cflag &= INPCK;opt.c_cflag |= (CLOCAL | CREAD);opt.c_lflag &= (ICANON | ECHO | ECHOE | ISIG);opt.c_oflag &= OPOST;opt.c_oflag &= (ONLCR | OCRNL); /添加的opt.c_iflag &= (ICRNL | INLCR);opt.c_iflag &= (IXON | IXOFF | IXANY); /添

28、加的opt.c_ccVTIME = 0;opt.c_ccVMIN = 0;tcflush(fd, TCIOFLUSH);printf(configure completen);if(tcsetattr(fd, TCSANOW, &opt) != 0)perror(serial error);return -1;printf(start send and receive datan);while(1)n = 0;len = 0;bzero(read_buf, sizeof(read_buf); /類(lèi)似于 memsetbzero(write_buf, sizeof(write_buf);while

29、( (n = read(fd, read_buf, sizeof(read_buf) 0 )for(i = len; i (len + n); i+)write_bufi = read_bufi - len;len += n;write_buflen = 0;printf(Len %d n, len);printf(%s n, write_buf);n = write(fd, write_buf, len);printf(write %d charsn,n);sleep(2);9.附錄 c_cflag 用于設(shè)置控制參數(shù),除了波特率外還包含以下內(nèi)容:EXTA External rate cloc

30、kEXTB External rate clockCSIZE Bit mask for data bitsCS5 5 個(gè)數(shù)據(jù)位CS6 6 個(gè)數(shù)據(jù)位CS7 7 個(gè)數(shù)據(jù)位CS8 8 個(gè)數(shù)據(jù)位CSTOPB 2個(gè)停止位(清除該標(biāo)志表示1 個(gè)停止位PARENB允許校驗(yàn)位PARODD使用奇校驗(yàn)(清除該標(biāo)志表示使用偶校驗(yàn))CREAD Enable receiverHUPCL Hangup (drop DTR) on last closeCLOCAL Local linedo not change“ owner ” of portLOBLK Block job control outpuc_cflag 標(biāo)志可

31、以定義CLOCAL 和 CREAD ,這將確保該程序不被其他端口控制和信號(hào)干擾,同時(shí)串口驅(qū)動(dòng)將讀取進(jìn)入的數(shù)據(jù)。 CLOCAL 和 CREAD 通??偸潜皇悄艿?。c_lflag 用于設(shè)置本地模式,決定串口驅(qū)動(dòng)如何處理輸入字符,設(shè)置內(nèi)容如下:ISIG Enable SIGINTR, SIGSUSP, SIGDSUSP, and SIGQUIT signalsICANON Enable canonical input (else raw)XCASE Map uppercase lowercase (obsolete)ECHO Enable echoing of input charactersECH

32、OE Echo erase character as BS-SP-BSECHOK Echo NL after kill characterECHONL Echo NLNOFLSH Disable flushing of input buffers after interrupt or quit charactersIEXTEN Enable extended functionsECHOCTL Echo control characters as char and delete as ?ECHOPRT Echo erased character as character erasedECHOKE

33、 BS-SP-BS entire line on line killFLUSHO Output being flushedPENDIN Retype pending input at next read or input charTOSTOP Send SIGTTOU for background outputc_iflag 用于設(shè)置如何處理串口上接收到的數(shù)據(jù),包含如下內(nèi)容:INPCK Enable parity checkIGNPAR Ignore parity errorsPARMRK Mark parity errorsISTRIP Strip parity bitsIXON Enabl

34、e software flow control (outgoing)IXOFF Enable software flow control (incoming)IXANY Allow any character to start flow againIGNBRK Ignore break conditionBRKINT Send a SIGINT when a break condition is detectedINLCR Map NL to CRIGNCR Ignore CRICRNL Map CR to NLIUCLC Map uppercase to lowercaseIMAXBEL E

35、cho BEL on input line too longc_oflag用于設(shè)置如何處理輸出數(shù)據(jù),包含如下內(nèi)容:OPOST Postprocess output (not set = raw output)OLCUC Map lowercase to uppercaseONLCR Map NL to CR-NLOCRNL Map CR to NLNOCR No CR output at column 0ONLRET NL performs CR functionOFILL Use fill characters for delayOFDEL Fill character is DELNLDL

36、Y Mask for delay time needed between linesNL0 No delay for NLsNL1 Delay further output after newline for 100 millisecondsCRDLY Mask for delay time needed to return carriage to left columnCR0 No delay for CRsCR1 Delay after CRs depending on current column positionCR2 Delay 100 milliseconds after send

37、ing CRsCR3 Delay 150 milliseconds after sending CRsTABDLY Mask for delay time needed after TABsTAB0 No delay for TABsTAB1 Delay after TABs depending on current column positionTAB2 Delay 100 milliseconds after sending TABsTAB3 Expand TAB characters to spacesBSDLY Mask for delay time needed after BSsB

38、S0 No delay for BSsBS1 Delay 50 milliseconds after sending BSsVTDLY Mask for delay time needed after VTsVT0 No delay for VTsVT1 Delay 2 seconds after sending VTsFFDLY Mask for delay time needed after FFsFF0 No delay for FFsFF1 Delay 2 seconds after sending FFsc_cc定義了控制字符,包含以下內(nèi)容:VINTR Interrupt CTRL-CVQUIT Quit CTRL-ZVERASE Erase Backspace (BS)VKILL Kill-line CTRL-UVEOF End-of-file CTRL-DVEOL End-of-line Carriage return (CR)VEOL2 Second end-of-line Line feed (LF)VMIN Minimum number of characters to readVSTART Start flow CTRL-Q (XON)VS

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論