基于嵌入式Linux的温度采集系统的设计与实现.docx
《基于嵌入式Linux的温度采集系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于嵌入式Linux的温度采集系统的设计与实现.docx(29页珍藏版)》请在咨信网上搜索。
. 课 程 设 计 论文题目 基于嵌入式Linux的温度采集系统 的设计与实现 学 院 专 业 班 级 学 号 学生姓名 指导教师 完成时间 2016 年 5 月 精品word文档 . 摘要 数据采集系统是信息科学的一个重要分支,它研究信息数据的采集、存储、处理以及控制等。本文提出采用嵌入式Linux作为操作系统,针对三星公司的S5PV210嵌入式处理器,设计一个嵌入式温度采集系统。论文在分析了Linux设备驱动程序的基本工作原理基础上,讨论了开发中经常会碰到的中断处理、拥塞处理、I/O端口,并在此基础上实现了基于S5PV210嵌入式处理器的开、读、写、关外部RAM的字符设备驱动和网络驱动。结合高精度温度传感器DS18B20,实现温度的正确采集,并通过以太网络将数据上传给上位服务器。 论文首先介绍了通信网络中各种设备特性、总线结构及传输技术,然后介绍根据单片机与PC机之间的串行通信原理,用ubantu完成数据采集系统的软件设计与实现,为用户提供一个友好的人机界面,对采集系统进行控制并显示采集后的数据。使用串口线传输数据,为数据采集系统和计算机之间的通讯开辟了新的道路。 关键词:数据采集系统;以太网络;S5PV210;DS18B20 精品word文档 . I Design and Implementation of an Embedded Temperature Acquisition System based on Linux Abstract Data Acquisition System is an important branch of information science, it studies the collection, storage, processing and control of information data. In this paper, the embedded Linux is used as the operating system, and the embedded S5PV210 processor is designed to design an embedded temperature acquisition system. Based on the analysis of the Linux device driver based on the basic working principle discussed development often encounter interruption congestion handling, processing, I / O ports, and on this basis, realized s5pv210 embedded processor open, read, write, outside the ram of the character set by driver and the network drive on. Combined with the high precision temperature sensor DS18B20, to achieve the correct temperature collection, and through the Ethernet network to upload data to the host server. At first, the paper introduces the communication network characteristics of various devices, bus structure and transmission technology, and then introduce according to the principle of serial communication between MCU and PC, ubantu completed software design and implementation of data acquisition system, to provide users with a friendly man-machine interface, to control the acquisition system and display after the collection of the data. The use of serial data transmission, for the data acquisition system and the communication between the computer has opened up a new path. Key words: Data acquisition system; Ethernet; S5PV210; DS18B20 精品word文档 . 目录 第一章 需求分析 1 1.1 总体设计 1 1.2 客户端界面设计(app:Linux_client) 1 1.3 服务器设计(linux) 1 1.4 硬件设计 2 第二章 详细设计 3 2.1 代码调用过程 3 2.2 文件IO (系统库函数) 3 2.3 网络编程 4 2.4 内核驱动开发:(模块编程) 6 2.5 注册字符设备驱动 7 2.6 操作硬件的过程:(裸奔代码) 8 第三章 测试过程 10 3.1 测试 10 第四章 项目拓展 11 4.1 项目拓展 11 附录 12 总结 23 精品word文档 . 精品word文档 . 第一章 需求分析 1.1 总体设计 图1-1 总体设计图 1.2 客户端界面设计(app:Linux_client) 1. 作为用户操作的简单界面 2. 用于发送命令控制硬件 3. 接收server传输的数据 4. 显示数据。 1.3 服务器设计(linux) 1. 用于接收(app)客户端发送的命令 2. 处理命令 3. 转发给硬件 4. 读取硬件传输数据 5. 把数据传回(app)客户端 精品word文档 . 1.4 硬件设计 1. Led灯 点亮灯:led1、led2。 2. 温度传感器 把温度数据读取到客户端。 3.蜂鸣器 用于报警以及音乐播放。 精品word文档 . 第二章 详细设计 2.1 代码调用过程 代码调用过程如图所示: 图2-1 代码调用图 分析代码调用过程: 0. 准备工作: 1. 先调用insmodled.ko插入模块 2. register_chrdev注册字符设备驱动 1. App: fd = open("/dev/led",O_RDONLY); 2. drivers: 2. sys_open("/dev/led",O_RDONLY) 3.由内核为我们匹配,看是否能够找到设备号为249的led-drivers 4.如果匹配成功,继续找到structfile_operationsled_fops结构体 5.通过结构体找到 open函数的入口led_fops.open 6.led_open 7.arm_init 2.2 文件IO (系统库函数) 精品word文档 . 1. Open 打开文件 返回一个文件描述符 2. Read 通过文件描述符fd,读取文件 3. Write 通过文件描述符fd,写文件 4. Close (进程结束的时候,会自动关闭,可以不必显示的调用close) 阻塞:poll机制解决 客户端如果要接收服务器回发的数据,则需要读取网络套接字,此时,客户端涉及到读终端和读服务器,而读终端和读服务器都是会阻塞的,所以调用poll机制解决。 int poll(structpollfd *fds, nfds_tnfds, int timeout); 功能:把所关心的文件描述符加入到structpollfd结构中,告诉内核我要非阻塞的读这个文件描述符,内核为我们判断,如果不阻塞,则相应的状态, 参数1 : structpollfd { intfd; /*所关心的文件描述符 */ short events; /* 告诉内核我要做什么:POLLIN:非阻塞的读*/ short revents; /*内核返回的状态 */ }; 参数2: 关心的描述符的个数 参数3:愿意等待多长时间 -1 : 一直等待 > 0 : 表示愿意等待的时间 返回值: 大于0 :表示至少有一个已经成功返回 == 0 : 表示超时 < 0 : 表示失败 2.3 网络编程 TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)。 适用情况: 1.适合于对传输质量要求较高,以及传输大量数据的通信。 2.在需要可靠数据传输的场合,通常使用TCP协议 3.MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议 项目需求: 1. Linux平台下 精品word文档 . a) 服务器(server) i. 等待连接客户端 ii. 接收客户端发送的数据[字符串和文件] iii. 处理客户端发送的数据和命令 iv. 发送处理结果给客户端 b) 客户端 i. 简单的界面 ii. 从键盘接收用户输入命令 iii. 发送数据或者命令给服务器 iv. 接收服务器返回的结果 c) 协议:tcp 2. 实现编程 a) TCP四次握手协议 b) TCP编程模型 图2-2 TCP编程模型图 3. 网络编程所需要的API函数 a) 服务器 i. Socket ii. Bind iii. Listen iv. Accept v. Read/read vi. Close b) 客户端 i. Socket ii. Connect iii. Read/read 精品word文档 . iv. Close 通用地址结构 structsockaddr { u_shortsa_family; // 地址族, AF_xxx char sa_data[14]; // 14字节协议地址 }; Internet协议地址结构 structsockaddr_in { sa_family_tsin_family; /*地址族: AF_INET */ in_port_tsin_port; /*端口号*/ structin_addrsin_addr; /* IPV4地址internet address */ }; /* IPv4地址结构*/ structin_addr { uint32_t s_addr; /* address in network byte order */ }; 2.4 内核驱动开发:(模块编程) 1. 模块入口moude_init 2. 模块出口module_exit 3. 语法 : c语言 4. 编译(Makefile) a) make install b) make c) cpled.ko /opt/filesystem/test 5. 执行: 驱动模块后缀:led.ko a) 插入内核: insmodled.ko b) 查看模块:lsmod c) 移除模块:rmmod led 精品word文档 . 2.5 注册字符设备驱动 static inline intregister_chrdev(unsigned int major, const char *name, conststructfile_operations *fops) 功能:把设备注册,添加到字符设备的表格中 图2-3 字符设备驱动图 insmodled.ko调用内核驱动模块注册设备到内核字符设备管理注册表中 精品word文档 . 图2-4 打开文件设备过程图 2.6 操作硬件的过程:(裸奔代码) 1. 找到外设(led),分析外设功能 a) 原厂提供 b) Google ,baidu 2. led原理图 图2-5 led点灯流程图 操作led的GPIO控制器,主要有以下两个: 精品word文档 . GPC0CON : 用于控制GPIO引脚输入还是输出 GPC0CON[32] LED1 ->GPC0CON[3] -> [15-12] --> 0001 = Output LED2 ->GPC0CON[4] -> [19-16] --> 0001 = Output GPC0DAT : 用于设置电平的高低 GPC0DAT[3] -->GPC0CON[15-12] àled1 à亮 ->高电平1 GPC0DAT[4] -->GPC0CON[19-16] àled2 ->灭 ->低电平 0 Led: GPC0CON寄存器地址0xE0200060 #define GPC0CON (*(volitale unsigned long *)0xE0200060) GPC0DAT 寄存器地址0xE0200064 #define GPC0DAT (*(volitale unsigned long *)0xE0200064) MMU 当开启了MMU之后,我们是不能直接访问到物理地址的。需要通过ioreamp把物 理地址映射为虚拟地址,我们只能通过虚拟地址操作硬件 Virt = ioremap(phy); intstrncasecmp(const char *s1, const char *s2, size_t n); 比较字符s1和s2的前n个字符是否相等,如果相等,则返回0 5. 裸奔代码操作硬件过程 图2-6 操作硬件流程图 精品word文档 . 第三章 测试过程 3.1 测试 1.用户登录 输入用户名和密码进行校验 2.登录成功进入到用户操作界面(如图3-1所示) 输入要控制硬件的命令:如:打开led1,则输入on1 关闭led1,则输入off1 打开音乐播放器,则输入song 获取温度,则输入get …… 退出,则输入quit 图3-1 用户操作界面 精品word文档 . 第四章 项目拓展 4.1 项目拓展 目前本项目实现了通过客户端操作硬件,实现了点亮灯/蜂鸣器报警/音乐播放/温度数据采集功能。除用于温度监测外,在系统中的ARM外围可接入控制电路、其他性能的传感器甚至摄像头等,还可以实现多种其他特殊需要的远程监测及控制,如水位监测、视频监控等,具有十分广阔的应用背景。智能硬件框架(如图4-1所示) 图4-1 智能硬件框架图 精品word文档 . 精品word文档 . 附录 服务器模块: /*1.调用socket函数创建套接字。 TCP协议:SOCK_STREAM*/ sockfd = socket(AF_INET,SOCK_STREAM,0); if(-1 == sockfd){ perror("socket"); return -1; } /*填充服务器信息*/ struct sockaddr_in servaddr; memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; //PF_INET servaddr.sin_port = htons(PORT); //端口号(5001-65536) servaddr.sin_addr.s_addr = inet_addr(SERVERIP); //ip地址 socklen_t adrlen = sizeof(servaddr); /*2.调用bind指定本地地址和端口。*/ ret = bind(sockfd,(struct sockaddr *)&servaddr,adrlen); if(-1 == ret){ perror("bind"); return -1; } /*3.调用listen启动监听。*/ ret = listen(sockfd,1000); if(-1 == ret){ perror("listen"); return -1; } printf("server init.d success...\n"); int newfd; char buf[BUFSZ] = {0}; pthread_t tid; while(1) { /*4.调用accept从已连接列队中提取客户连接。*/ 精品word文档 . newfd = accept(sockfd,NULL,NULL); if(newfd <= 0){ continue; } printf("%d connect success...\n",newfd); /*为每个客户创建线程去维护它 ==> tid : 用于存放新建线程ID ==> do_work : 新建线程从这里开始执行 ==> newfd : 传给执行函数的参数*/ ret = pthread_create(&tid,NULL,do_work,&newfd); if(0 != ret){ continue; } /*设置为可分离态*/ pthread_detach(tid); } /*6.调用close关闭连接。*/ close(sockfd); close(newfd); return 0; } /*执行函数 (void * 表示可以接收任意类型)*/ void *do_work(void *arg) { int ret; char buf[BUFSZ]; int newfd = *(int *)arg; char *strerr = "密码或者用户名输入有误!"; unsigned int cmd = -1; unsigned long val = -1; int i = 0; int n = 2; int dev_fd; /*5.调用I/O函数(read/write)与客户端通讯。*/ int fd_led; fd_led = open("/dev/led",O_RDWR); if(fd_led < 0){ perror("open"); 精品word文档 . return (void *)-1; } /*开辟一个线程不停的发送温度给客户*/ pthread_t tid1; ret = pthread_create(&tid1,NULL,do_temp,&newfd); pthread_detach(tid1); while(1) { /*读取客户端信息*/ memset(buf,0,sizeof(buf)); ret = read(newfd,buf,sizeof(buf)-1); if(ret > 0){ /*发送命令给硬件*/ if(!strncasecmp(buf,"on1",3)){ cmd = LED_ON; val = 3; }else if(!strncasecmp(buf,"on2",3)){ cmd = LED_ON; val = 4; }else if(!strncasecmp(buf,"off1",4)){ cmd = LED_OFF; val = 3; }else if(!strncasecmp(buf,"off2",4)){ cmd = LED_OFF; val = 4; }else if(!strncasecmp(buf,"onb",3)){ pwm_on(); }else if(!strncasecmp(buf,"song",4)){ pwm_music_fun(); } if(ioctl(fd_led,cmd,(unsigned long)val) < 0){ perror("ioctl failed\n"); exit(1); } } } 客户端模块: int main(int argc,char **argv) { 精品word文档 . int ret; char buf[BUFSZ] = {0}; char temp[BUFSZ] = "26.234000"; /*1.调用socket函数创建套接字。 TCP协议:SOCK_STREAM*/ sockfd = socket(AF_INET,SOCK_STREAM,0); if(-1 == sockfd){ perror("socket"); return -1; } /*填充服务器信息*/ struct sockaddr_in servaddr; memset(&servaddr,0,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); //端口号 servaddr.sin_addr.s_addr = inet_addr(SERVERIP); //ip地址 socklen_t adrlen = sizeof(servaddr); /*2.调用connect连接服务器端*/ ret = connect(sockfd,(struct sockaddr *)&servaddr,adrlen); if(-1 == ret){ perror("connect"); return -1; } printf("client connect success..\n"); struct pollfd pfd[2] = {0}; pfd[0].fd = 0; pfd[0].events = POLLIN; //不阻塞的读数据 pfd[1].fd = sockfd; pfd[1].events = POLLIN; //不阻塞的读数据 /*登录验证*/ if(-1 == login()){ printf("登录失败\n"); return -1; } printf("登录成功...\n"); interface_print(temp); 精品word文档 . /*5.调用I/O函数(read/write)与客户端通讯。*/ int i = 5; int pos; while(1) { ret = poll(pfd,2,-1); if(ret > 0){ if(pfd[0].revents == POLLIN){ interface_print(temp); /*从终端读取数据*/ memset(buf,0,sizeof(buf)); ret = read(pfd[0].fd,buf,sizeof(buf)-1); if(ret > 0){ /*发送数据给服务器*/ write(sockfd,buf,ret); } } if(pfd[1].revents == POLLIN){ if(!strncmp(buf,"get",3)){ /*接收服务器发送的信息*/ memset(temp,0,sizeof(temp)); ret = read(pfd[1].fd,temp,sizeof(temp)-1); if(ret > 0){ temp[ret-1] = '\0'; /*把信息显示到终端*/ interface_print(temp); } } } }else if(0 == ret){ printf("超时\n"); break; }else{ perror("poll"); break; } } /*6.调用close关闭连接。*/ 精品word文档 . close(sockfd); return 0; } int login(void) { char username[100] = {0}; char passwd[100] = {0}; int flags; int ret; char buf[100]; system("clear"); //清屏clear write(1,"username : ",strlen("username : ")); memset(username,0,sizeof(username)); ret = read(0,username,sizeof(username)-1); if(ret > 0){ write(sockfd,username,ret); } write(1,"passwd : ",strlen("passwd : ")); memset(passwd,0,sizeof(passwd)); ret = read(0,passwd,sizeof(passwd)-1); if(ret > 0){ write(sockfd,passwd,ret); } memset(buf,0,sizeof(buf)); ret = read(sockfd,buf,sizeof(buf)); if(ret > 0){ printf("%s\n",buf); if(!strncmp(buf,"ok",2)){ flags = 0; }else{ flags = -1; } } return flags; } 精品word文档 . 温度传感器驱动模块: static void Init_DS18B2O(void)//Init_DS18B2O { unsigned int retvalue=1; writel((readl(gph1con) & 0xFFFFFFF0) | 0x1, gph1con);//gph1_0,output writel(readl(gph1dat) | 0x1 , gph1dat); __udelay(1); writel(readl(gph1dat) &(0xFFFFFFFE), gph1dat); __udelay(500); writel(readl(gph1dat) | 0x1 , gph1dat); __udelay(20); writel(readl(gph1con) & 0xFFFFFFF0, gph1con);//gph1_0,input __udelay(100); if (!(readl(gph1dat)&0x01)) { retvalue=0; } } static int gpio_relrease(struct inode *inode, struct file *filp) { iounmap(gph1con); iounmap(gph1dat); iounmap(gph1pud); iounmap(gpc0con); iounmap(gpc0dat); iounmap(gpc0pud); return 0; } static unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat=0; spin_lock(&lock); for (i=8;i>0;i--) { dat>>=1; writel((readl(gph1con) & 0xFFFFFFF0) | 0x1, gph1con);//gph1_0,output 精品word文档 . writel(readl(gph1dat) &(0xFFFFFFFE), gph1dat); __udelay(2);// writel(readl(gph1con) & 0xFFFFFFF0, gph1con);//gph1_0,input __udelay(1);// if((readl(gph1dat)&0x01)) { dat |=0x80;} __udelay(62); } spin_unlock(&lock); return (dat); } static void WriteOneChar(unsigned char dat) { unsigned char i=0; writel((readl(gph1con) & 0xFFFFFFF0) | 0x1, gph1con);//gph1_0,output spin_lock(&lock); for(i=0;i<8;i++) { writel(readl(gph1dat) &(0xFFFFFFFE), gph1dat); __udelay(15); if(dat&0x01) { writel(readl(gph1dat) | 0x1 , gph1dat); } else { writel(readl(gph1dat) &(0xFFFFFFFE), gph1dat); } __udelay(45); writel(readl(gph1dat) | 0x1 , gph1dat); __udelay(1); dat>>=1; } spin_unlock(&lock); } static unsigned int ReadTemp(void) { unsigned char T_h=0; unsigned char T_l=0; unsigned int temp=0; 精品word文档 . writel((readl(gph1pud) & 0xFFFc) | 0x02, gph1pud);//gph1_0,pull-up enabled spin_lock(&lock); Init_DS18B2O(); spin_unlock(&lock); __udelay(400); writel((readl(gph1con) & 0xFFFFFFF0) | 0x1, gph1con);//gph1_0,output writel(readl(gph1dat) | 0x1 , gph1dat); WriteOneChar(0xcc); WriteOneChar(0x44); mdelay(100); spin_lock(&lock); Init_DS18B2O(); spin_unlock(&lock); __udelay(400); writel((readl(gph1con) & 0xFFFFFFF0) | 0x1, gph1con);//gph1_0,output writel(readl(gph1dat) | 0x1 , gph1dat); WriteOneChar(0xcc); WriteOneChar(0xBE); T_l=ReadOneChar();//L T_h=ReadOneChar();//H temp=(unsigned int) (((unsigned int)T_h<<8)|T_l); return temp; } static int gpio_ioctl(struct file *filp, unsigned int cmd, unsigned int *arg) { unsigned int ret; switch(cmd) { case GPIO_ON: ret=ReadTemp(); arg=&ret; break; default: ret = -1; 精品word文档 . } return ret; } static struct file_operations gpio_fops = { .owner = THIS_MODULE, .open = gpio_open, .release = gpio_relrease, .unlocked_ioc- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 嵌入式 Linux 温度 采集 系统 设计 实现
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文