[计算机软件及应用]嵌入式实验报告llisa

上传人:仙*** 文档编号:75219849 上传时间:2022-04-15 格式:DOC 页数:37 大小:179.50KB
返回 下载 相关 举报
[计算机软件及应用]嵌入式实验报告llisa_第1页
第1页 / 共37页
[计算机软件及应用]嵌入式实验报告llisa_第2页
第2页 / 共37页
[计算机软件及应用]嵌入式实验报告llisa_第3页
第3页 / 共37页
点击查看更多>>
资源描述
一、 相关知识根据IEEE(国际电机工程师协会)的定义,嵌入式系统是“Devices Used to Control,Monitor or Assist the Operation of Equipment,Machinery or Plants。”即控制、监视或者辅助装置、机器和设备运行的装置。目前国内一个普遍被认同的定义是: 以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。可以这样认为,嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑。嵌入式系统是计算机软件和硬件的综合体,可涵盖机械或其他的附属装置。所以嵌入式系统可以笼统地分为硬件和软件两部分。嵌入式系统的构架可以分成四个部分:处理器、存储器、输入输出(I/O)和软件(由于多数嵌入式设备的应用软件和操作系统都是紧密结合的,在这里我们对其不加区分,这也是嵌入式系统和通用PC系统的最大区别)。嵌入式系统的组成如下图所示。本学期的实验采用英特尔公司于2003年底推出的PXA270嵌入式处理器。PXA270更适合传统PDA,手持PC,平板电脑,智能手机市场。它最初出现在PDA(比如惠普HP4700)和智能手机(如MOTO E680)上。因此它的扩展接口相当丰富,扩展接口有SD/SDIO/MMC、CF/PCMCIA、CMOS/CCD CAMERA、蓝牙、USB1.1、OTG等。许多厂商选择PXA270作为PMP处理器,是源于它wireless MMX技术和SpeedStep动态电源管理技术。SpeedStep技术原用于英特尔移动处理器,这种技术用通俗的语言表述就是系统需要多高的主频,它就调节到多高的频率,系统不需要时,它就将处理器主频调节到最低,绝不浪费一点点。SpeedStep技术可以将PXA270的主频在26MHz624MHz(最高)之间自由调节。也就是说,在系统完全空闲时,PXA270可以运行在26MHz的主频下,此时它的功耗将低于0.1毫安。其实,嵌入式系统并不是一个新生的事物,从八十年代起,国际上就有一些IT组织、公司,开始进行商用嵌入式系统和专用操作系统的研发。这其中涌现了一些著名的嵌入式系统:Windows CE、VxWorks、pSOS、QNX、Palm OS、OS-9、LynxOS、Linux等。本学期实验采用Linux环境。从应用上讲,Linux 一般有内核、Shell、文件结构和实用工具四个主要部分,Linux的基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。Linux操作系统不但具有广泛性、灵活性以及高度可设定性等特点,而且主要因为免费、开源和与Unix高度相通而受到计算机爱好者的喜爱。二、 实验内容1、基本实验实验二 RedHat 9的安装此实验完成了在宿主PC端虚拟机的安装,提供了实验所需的Linux操作系统。实验三 建立主机开发环境此实验完成了宿主PC端开发环境的安装与配置。实验四 配置 minicom此实验使宿主PC机与PXA270目标板之间可以通过串口通讯,之后的实验将使用超级终端来监视并控制目标板的工作状态。在每次重启宿主PC机时,须通过ifconfig命令查看该机的IP地址,若其已经复位,则须用命令:ifconfig eth0 192.168.0.100 up重置宿主PC机的IP地址。实验五 配置 TFTP此实验为宿主PC机配置了TFTP服务。TFTP(Trivial File Transfer Protocol)是简单文件传输协议,由于特定开发环境的制约,这一服务是必须的。在配置完成后,每次重启宿主PC机时,都须先输入命令:service xinetd restart,以启动TFTP服务。实验六 配置NFS服务此实验为宿主PC机配置了NFS服务。NFS(Network File System)指网络文件系统,它实现了文件在不同的系统间使用。当我们想用远端档案时,只需调用“mount”就可以远端系统挂接在自己的档案系统之下。每次重启宿主PC机时,都须先输入命令:service nfs restart,以启动nfs服务。实验七HelloWorld此实验通过用c语言编写的简单程序HelloWorld,测试前面几个实验是否成功配置好环境,从超级终端可以看到HelloWorld程序的运行结果。2、基本接口实验(驱动实验)实验十二 简单设备驱动程序本次实验的任务是编写一个字符型设备驱动程序,并学习在应用程序中调用驱动。指导书中提供了本次实验所要用到的程序源代码。由于字符型设备驱动程序的骨架都是相同的,所以,看懂本实验的源代码,学习并模仿其编写方法,对于后续实验有着非常重要的意义。接下来,我将详细分析一下实验十二提供的程序代码。源代码及其注释如下:/ 读入头文件#include #include #include #include #include #include #include / 定义主设备号HELLO DEVICE MAJOR#define SIMPLE_HELLO_MAJOR96/ 定义标识符#define OURS_HELLO_DEBUG / 定义版本号#define VERSION PXA2700EP-SIMPLE_HELLO-V1.00-060530 /*显示版本*/void showversion(void)printk(*);printk(t %s tn,VERSION);printk(*);/* - READ用于将指定文件描述符中读取数据file:是文件指针buf:读取数据缓存区count:请求传输的字节数f_ops:文件当前偏移量当读取标识符OURS_HELLO_DEBUG时,打印信息,然后返回count-*/ssize_t SIMPLE_HELLO_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)#ifdef OURS_HELLO_DEBUGprintk(SIMPLE_HELLO_read-kernel-n);#endifreturn count;/* - WRITE用于向打开的文件写数据,写操作从文件当前偏移量开始file:是文件指针buf:写入数据缓存区count:请求传输的字节数f_ops:文件当前偏移量当读取标识符OURS_HELLO_DEBUG时,打印信息,然后返回count-*/ssize_t SIMPLE_HELLO_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)#ifdef OURS_HELLO_DEBUGprintk(SIMPLE_HELLO_write-kernel-n);#endifreturn count;/* - IOCTL设备驱动程序中对设备的I/O通道进行管理的函数inode:设备节点flip:打开的一个文件cmd:驱动程序的特殊命令编号data:接收剩余参数-*/ssize_t SIMPLE_HELLO_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, long data)#ifdef OURS_HELLO_DEBUGprintk(SIMPLE_HELLO_ioctl-kernel-n);#endifreturn 0;/*-OPEN打开函数Inode:打开文件所对应的i节点,主要获取从设备号flip:打开的一个文件open()方法最重要的是调用了宏MOD_INC_USE_COUNT,这个宏主要用来增加驱动程序使用计数器,避免不正确卸载程序-*/ssize_t SIMPLE_HELLO_open (struct inode * inode ,struct file * file)#ifdef OURS_HELLO_DEBUGprintk(SIMPLE_HELLO_open-kernel-n);#endifMOD_INC_USE_COUNT;return 0;/* -RELEASE/CLOSE关闭函数Inode:打开文件所对应的i节点,主要获取从设备号flip:打开的一个文件release()方法最重要的是调用了宏MOD_DEC_INC_USE_COUNT,这个宏主要用来减少驱动程序使用计数器-*/ssize_t SIMPLE_HELLO_release (struct inode * inode ,struct file * file)#ifdef OURS_HELLO_DEBUGprintk(SIMPLE_HELLO_release-kernel-n);#endifMOD_DEC_INC_USE_COUNT;return 0;/ - SIMPLE_HELLO设备向系统注册-struct file_operations HELLO_ops =open:SIMPLE_HELLO_open,read:SIMPLE_HELLO_read,write:SIMPLE_HELLO_write,ioctl:SIMPLE_HELLO_ioctl,release:SIMPLE_HELLO_release,;/* -INIT驱动程序初始化devfs_register_chrdev(SIMPLE_HELLO_MAJOR,hello_serial_ctl,& HELLO_ops)最为主要devfs_register_chrdev注册设备驱动程序,包括主设备号、驱动程序名、结构体指针-*/static int _init HW_ HELLO_init(void)int ret = -ENODEV;ret = devfs_register_chrdev(SIMPLE_HELLO_MAJOR, hello_serial_ctl,& HELLO_ops);showversion();if(ret0)printk(pxa270 init_module failed with %d n-kernel-,ret);elseprintk(pxa270 hello_driver register success!-kernel-n);return ret; /*-模块初始化函数,调用HW_ HELLO_init 函数-*/static int _init pxa270_ HELLO_init(void) int ret = -ENODEV;#ifdef OURS_HELLO_DEBUGprintk(pxa270_ HELLO_init-kernel-n);#endif ret = HW_ HELLO_init(); if (ret) return ret; return 0;/*-模块卸载函数devfs_unregister_chrdev(SIMPLE_HELLO_MAJOR,hello _ctl)最为主要devfs_unregister_chrdev卸载设备驱动程序,包括主设备号、驱动程序名-*/static void _exit cleanup_ HELLO_ctl(void)#ifdef OURS_HELLO_DEBUGprintk(cleanup_HELLO_ctl-kernel-n);#endifdevfs_unregister_chrdev (SIMPLE_HELLO_MAJOR, hello_ctl );MODULE_DESCRIPTION(simple hello driver module);/一些描述信息MODULE_AUTHOR(liduo);/驱动作者MODULE_LICENSE(GPL);module_init(pxa270_HELLO_init);/指定驱动程序初始化函数module_exit(cleanup _HELLO_ctl);/指定驱动程序卸载函数对Makefile文件进行修改:TARGET = pxa270_hello_drv.omodules: $(TARGET)all: $(TARGET)pxa270_hello_drv.o:pxa270_hello_drv.c$(CC) -c $(CFLAGS) $ -o $install:install -d $(INSTALLDIR)install -c $(TARGET).o $(INSTALLDIR)clean:rm -f *.o * core .dependMake工程管理器读入Makefile文件的内容执行编译工作,一个Makefile文件包括: 由make工具创建的目标体(target),通常是目标文件或可执行文件; 要创建目标体所依赖的文件(dependency_file); 创建每个目标需要运行的命令(command)以上两个文件编辑后,用make modules编译驱动程序,编写测试文件simple_test_driver.c,然后GCC编辑器编译测试程序生成测试文件,进入超级终端开始挂载,加载驱动程序,使用命令./test测试,实验完成。实验十三 CPU GPIO 驱动程序设计本次实验要编写PXA270 GPIO的驱动及应用程序并在LINUX 系统中插入自己的驱动程序,调用它,实现用CPU GPIO控制外部LED,利用PXA270核心板上的LED验证我们的工作。1、补充代码补充代码(1)/ - WRITE -ssize_t SIMPLE_GPIO_LED_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops) #ifdef OURS_GPIO_LED_DEBUG printk(SIMPLE_GPIO_LED_write -kernel-n); #endif return count;补充代码(2)/ - OPEN -ssize_t SIMPLE_GPIO_LED_open (struct inode * inode ,struct file * file) #ifdef OURS_GPIO_LED_DEBUG printk(SIMPLE_GPIO_open -kernel-n); #endif MOD_INC_USE_COUNT; return 0;补充代码(3)/ -struct file_operations GPIO_LED_ctl_ops =open:SIMPLE_GPIO_LED_open,read:SIMPLE_GPIO_LED_read,write:SIMPLE_GPIO_LED_write,ioctl:SIMPLE_GPIO_LED_ioctl,release:SIMPLE_GPIO_LED_release,;2、实验作业编写一个程序,使得目标板的核心板上的LED闪烁产生亮7秒、灭5秒的效果。测试程序代码修改如下:while(1)Ioctl(fd,LED_OFF);sleep(7);Ioctl(fd,LED_ON);Sleep(5);3、实验总结通过本次实验,我们对驱动程序的设计编写有了进一步的了解,熟悉了GPIO端口,同时自己设计编写了小程序,更加清楚知道如何操作和控制GPIO端口来实现我们的目的。实验十四 中断实验在理论课中,我们学习了许多中断方面的知识,包括中断向量、中断优先级、中断过程等。在PXA270系统里,中断控制器分外部设备和 PXA270X 处理器设备产生的两个层次的中断,前者是初级的中断源,后者是次级中断源,大量的次级中断源通常被映射为一个初级中断源。在此实验中,我们要编写一个中断程序,利用目标板上的按键SW2来产生中断,使得当每次按下此按键时,在超级终端上打印出响应的信息。1、补充代码补充代码(1)void showversion(void)printk(*n);printk(t%stn,VERSION);printk(*nn); 补充代码(2)/ - READ -ssize_t SIMPLE_INT_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)#ifdef OURS_INT_DEBUGprintk(SIMPLE_INT_read -kernel-n);#endifreturn count;补充代码(3)/ - WRITE -ssize_t SIMPLE_INT_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)#ifdef OURS_INT_DEBUGprintk(SIMPLE_INT_write -kernel-n);#endifreturn count;补充代码(4)/ -struct file_operations INT_ctl_ops =open:SIMPLE_INT_open,read:SIMPLE_INT_read,write:SIMPLE_INT_write,ioctl:SIMPLE_INT_ioctl,release:SIMPLE_INT_release,2、实验总结通过本实验,我们了解了硬件中断的基本概念,熟悉了中断程序的处理过程。同时补充完成了一个相对简单的中断程序,为之后有关中断的实验奠定了基础。实验十五 数码管显示驱动实验在此实验中,我们要编写针对 74LV164 的驱动程序,并用其串并转换功能来控制八段LED数码管的显示。1、补充代码补充代码(1)void showversion(void)printk(*n);printk(t%stn,VERSION);printk(*nn); 补充代码(2)/ - READ -ssize_t SERIAL_LED_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)#ifdef OURS_SERIAL_LED_DEBUGprintk(SERIAL_LED_read -kernel-n);#endifreturn count;补充代码(3)/ - WRITE -ssize_t SERIAL_LED_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)#ifdef OURS_SERIAL_LED_DEBUGprintk(SERIAL_LED_write -kernel-n);#endifwrite_byte(* buf);return count;补充代码(4)/ - IOCTL -ssize_t SERIAL_LED_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, long data)#ifdef OURS_SERIAL_LED_DEBUGprintk(SERIAL_LED_ioctl -kernel-n);#endifreturn 0;补充代码(5)/ - OPEN -ssize_t SERIAL_LED_open (struct inode * inode ,struct file * file)#ifdef OURS_SERIAL_LED_DEBUGprintk(SERIAL_LED_open -kernel-n);#endifMOD_INC_USE_COUNT;return 0;补充代码(6)/ - RELEASE/CLOSE -ssize_t SERIAL_LED_release (struct inode * inode ,struct file * file)#ifdef OURS_SERIAL_LED_DEBUGprintk(SERIAL_LED_release -kernel-n);#endifMOD_DEC_USE_COUNT;return 0;补充代码(7)/ -struct file_operations SERIAL_LED_ops =open: SERIAL_LED_open,read:SERIAL_LED_read,write:SERIAL_LED_write,ioctl:SERIAL_LED_ioctl,release:SERIAL_LED_release,;补充代码(8)/ - INIT -static int _init HW_SERIAL_LED_init(void)int ret = -ENODEV;ret = devfs_register_chrdev(SERIAL_LED_MAJOR, serial_led,&SERIAL_LED_ops);showversion();if(ret =0;count-)data0=bufcount;ret=write(fd,data,1);sleep(1);(2)设计编写一个程序,实现LED数码管循环显示数字2、4、6、8。测试程序修改代码如下:while(1)for(count=0;count10;count=count+2)data0=bufcount;ret=write(fd,data,1);sleep(1);3、实验总结通过本实验,我们进一步熟悉了驱动程序的编写,同时熟悉了数码管驱动显示的原理与方法。通过自己设计编写程序实现数码管不同的显示效果,进一步加深了我们对LED驱动程序的理解与应用。实验十六 LED点阵驱动程序设计在此实验中,我们要编写针对LED点阵的硬件驱动程序。1、补充代码补充代码(1)void showversion(void)printk(*n);printk(t%stn,VERSION);printk(*nn);补充代码(2)/ - READ -ssize_t SIMPLE_LED_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)#ifdef OURS_LED_DEBUGprintk(SIMPLE_LED_read -kernel-n);#endifreturn count;补充代码(3)/ - IOCTL -ssize_t SIMPLE_LED_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, long data)#ifdef OURS_LED_DEBUGprintk(SIMPLE_LED_ioctl -kernel-n);#endifreturn 0;补充代码(4)/ -struct file_operations LED_ctl_ops =open:SIMPLE_LED_open,read:SIMPLE_LED_read,write:SIMPLE_LED_write,ioctl:SIMPLE_LED_ioctl,release:SIMPLE_LED_release,;补充代码(5)static int _init pxa270_LED_CTL_init(void) int ret = -ENODEV;#ifdef OURS_LED_DEBUGprintk(pxa270_LED_CTL_init -kernel-n);#endifret = HW_LED_CTL_init();if(ret)return ret;return 0;补充代码(6)static void _exit cleanup_LED_ctl(void)#ifdef OURS_LED_DEBUGprintk(cleanup_LED_ctl -kernel-n);#endifoutw(0x0000,ioremap_addr);devfs_unregister_chrdev (SIMPLE_LED_MAJOR, led_ary_ctl );2、实验作业(1)要求设计程序,实现按横的方向隔行顺序扫描LED点阵数码管。测试程序代码修改如下:if(fd=-1)printf(“open device %s errorn”,DEVICE_NAME);elsefor(i=1;i8;i+)buf0=c;buf1=r;for(j=1;j=8;j+)write(fd,buf,2);printf(“buf0,buf1:%x,%xn”,buf0,buf1);usleep(200000);c=c1;buf0=c;c=1;r=r2;ret=close(fd);printf(“ret=%dn”,ret);printf(“close led_driver testn”);(2)要求设计程序,实现按竖方向顺序扫描LED点阵数码管。测试程序修改代码如下:if(fd=-1)printf(“open device %s errorn”,DEVICE_NAME);elsefor(i=1;i8;i+)buf1=c;buf0=r;for(j=1;j=8;j+)write(fd,buf,2);printf(“buf0,buf1:%x,%xn”,buf0,buf1);usleep(200000);c=c1;buf1=c;c=1;r=r1;ret=close(fd);printf(“ret=%dn”,ret);printf(“close led_driver testn”);3、实验总结通过本次实验,我们熟悉掌握了点阵LED驱动程序的设计与编写。并通过自己编写程序实现LED点阵不同的显示效果,加深了对总线操作的硬件驱动程序的认识。在设计第二个实验作业时,由于刚开始对LED点阵显示原理不是很清楚,修改了许多次程序仍达不到显示效果。之后还是回归LED点阵显示最基本的原理,在此基础上对程序进行思考与修改,最终才顺利完成实验。实验十七 AD 驱动实验在此实验中,我们要编写程序对模拟量输入进行采集,并转换为数字量显示在超级终端上。由于在理论课中已对A/D转换的方法、采样频率的设置等有了较深刻的了解,因此完成此实验的最关键之处在于掌握模数转换的编程方法。1、补充代码补充代码(1)void showversion(void)printk(*n);printk(t %s tn, VERSION);printk(*nn);补充代码(2)/ - READ -ssize_t adctl_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)#ifdef OURS_HELLO_DEBUGprintk(adctl_read -kernel-n);#endifreturn count;补充代码(3)/ - WRITE -ssize_t SERIAL_LED_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)#ifdef OURS_HELLO_DEBUGprintk(adctl_write -kernel-n);#endifwrite_byte(* buf);return count;补充代码(4)/ - OPEN -ssize_t adctl_open (struct inode * inode ,struct file * file)#ifdef OURS_HELLO_DEBUGprintk(adctl _open -kernel-n);#endifMOD_INC_USE_COUNT;return 0;补充代码(5)/ - RELEASE/CLOSE -ssize_t SERIAL_LED_release (struct inode * inode ,struct file * file)#ifdef OURS_HELLO_DEBUGprintk(adctl_release -kernel-n);#endifMOD_DEC_USE_COUNT;return 0;补充代码(6)static struct file_operations adctl_ops = open: adctl_open,read: adctl_read,write: adctl_write,ioctl: adctl_ioctl,release: adctl_release,;补充代码(7)static int _init HW_AD_CTL_init(void)int ret = -ENODEV;ad_ucb=ucb1x00_get();ret=devfs_register_chrdev(ADCTL_MAJOR,ad_ctl,&adctl_ops);adctl_dev_handle = devfs_register( NULL, ad_ctl, DEVFS_FL_DEFAULT,ADCTL_MAJOR, 0, S_IFCHR, &adctl_ops, NULL);if(ret0)printk(pxa270 init_module failed with %dn -kernel-,ret);return ret;else printk(pxa270 ad_driver register success! -kernel-n);return ret;补充代码(8)static int _init pxa270_AD_CTL_init(void)int ret = -ENODEV;ret = HW_AD_CTL_init();if (ret)return ret;return 0;补充代码(9)static void _exit cleanup_AD_ctl(void)devfs_unregister( adctl_dev_handle );devfs_unregister_chrdev(ADCTL_MAJOR,ad_ctl);2、实验作业编写设计一个应用程序,将UCB_ADC_INP_AD0换成其他通道,来观察其他AD通道情况。测试程序修改代码如下:for(i=0;i50;i+)Val0=ioctl(fd,UCB_ADC_INP_AD1,0);usleep(100);Val1=ioctl(fd,UCB_ADC_INP_AD0,0);printf(“val0=%dtval1=%dn”,val0,val1);usleep(500000);3、实验总结通过本次实验,我们将AD转换器驱动起来并通过编写设计应用程序,使其能够将模拟信号量按照我们的要求转换成数字信号量。在此过程中,我们不仅了解了模数转换的基本原理,更加掌握了模数转换的编程方法。实验十八 DA驱动实验在此实验中,我们要利用D/A转换器编程来产生模拟波形,并输出到示波器上进行观察。由于在理论课中已对D/A转换的方法有了一定的了解,因此完成此实验的最关键之处在于掌握数模转换的编程方法。1、补充代码补充代码(1)#include #include #include #include #include #include #include #include补充代码(2)void showversion(void) printk(*n);printk(t %st n,VERSION);printk(*n);补充代码(3)/ - READ -ssize_t SIMPLE_DA_read (struct file * file ,char * buf, size_t count, loff_t * f_ops)#ifdef OURS_DA_DEBUGprintk(SIMPLE_DA_read-kernel-n);#endifreturn count;补充代码(4)/ - WRITE -ssize_t SIMPLE_DA_write (struct file * file ,const char * buf, size_t count, loff_t * f_ops)#ifdef OURS_DA_DEBUG printk(SIMPLE_DA_write-kernel-n); #endifoutb(buf0,ioremap_addr); return count;补充代码(5)/ - IOCTL -ssize_t SIMPLE_DA_ioctl (struct inode * inode ,struct file * file, unsigned int cmd, long data) #ifdef OURS_DA_DEBUG printk(SIMPLE_DA_ioctl-kernel-n); #endif return 0;补充代码(6)/ - OPEN -ssize_t SIMPLE_DA_open (struct inode * inode ,struct file * file)#ifdef OURS_DA_DEBUG printk (SIMPLE_DA_open -kernel-n); #endifMOD_INC_USE_COUNT;return 0;补充代码(7)/ -struct file_operations DA_ctl_ops =
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!