嵌入式程序设计实验报告.docx

上传人:飞****2 文档编号:60946724 上传时间:2022-11-19 格式:DOCX 页数:43 大小:993.66KB
返回 下载 相关 举报
嵌入式程序设计实验报告.docx_第1页
第1页 / 共43页
嵌入式程序设计实验报告.docx_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《嵌入式程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式程序设计实验报告.docx(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-1-实验一 开发环境的搭建与配置【实验目的】熟悉嵌入式 Linux 开发平台。掌握嵌入式 Linux 开发平台的开发环境搭建与配置。了解 minicom 配置串口通信参数的过程。了解嵌入式 Linux 的启动过程。掌握程序交叉编译运行及调试的一般方法。【实验内容】连接实验开发板与宿主机。在虚拟机中的 CentOS(宿主机)搭建开发环境。在宿主机中配置 minicom。分析嵌入式 Linux 的启动过程。在宿主机上编写简单的 C 语言程序并用交叉编译工具进行编译,然后传输到目标机上运行。在宿主机上编写简单的 C 语言程序并用交叉编译工具进行编译,用 gdbserver 进行远程调试。【实验步骤

2、】连接实验开发板,对虚拟机进行设置首先把实验开发板打开,用网线和串口线连接宿主机,并连接电源(注意这时不要拨动实验开发板的开关按钮)。在桌面上点击打开 vmware 软件,选择“编辑虚拟机设置”,如下图所示:图 1进入虚拟机配置界面后把网络连接方式设置为“桥接方式”,如图 2 所示:-2-图 2添加串口,如下图所示:-3-图 3完成串口的添加后,选择“OK”,完成对虚拟机的设置。如下图所示:-4-图 4选择虚拟机的“Edit”、“Virtual Network Editor.”,如下图所示:-5-图 5进入虚拟机网络参数设置界面后对 VMnet0 进行设置(注意这里桥接的网卡应选择与实验开发板

3、相连接的那块儿网卡),然后点击“Apply”、“OK”如下图所示:-6-图 6上述设置完成后启动 CentOS(CentOS 的用户名为“root”,密码为“xidianembed”)。工具链的配置在 CentOS 的根目录下创建一个名为“EELiod”的目录,把实验中要用到的文件(主要是一些 rpm包)拷贝到该目录下。(可以用 U 盘、WinSCP 等工具进行,此处不再做详细说明)。交叉编译工具链位于/opt/buildroot-2011.02/output/host/usr 目录下,进入工具链的 bin 目录下,可以看到一些编译工具,这些工具将会在之后的交叉编译过程中使用到。-7-图 7为

4、了之后在任何目录下都能够使用上述目录下的命令,必须对系统环境变量 PATH 进行设置。这个可以通过修改/etc/profile 文件来实现。在设置之前,先用 echo 命令查看一下 PATH 的当前值,如果已经添加了交叉编译工具链的路径,就不用再修改 PATH 的值了。如果要修改,则可以用 vi 编辑器打开/etc/profile 文件。图 8在/etc/profile文 件 中export语 句 之 前 添 加 一 行“PATH=$PATH:/opt/buildroot-2011.02/output/host/usr/bin”,然后保存并退出该文件。图 9使用 source 命令来使路径生效

5、。图 10使用 echo$PATH 查看环境变量 PATH 的当前值,看修改是否生效。使用 which 命令来查看路径是否生效,并查看 arm-linux-gcc 命令的基本信息以验证此命令是否可用。-8-图 11注意:如果路径没有生效,则可以重启一下 CentOS 系统,再使用 which 命令来查看路径是否生效。该交叉编译工具链的版本为 4.2.4。tftp 的安装进入/root/EELiod/rpm 目录下。图 12安装 tftp 协议并设置 tftp 协议的配置文件(这里只用把配置好的文件替换默认配置文件就行了)。图 13如果在安装 tftp 时有“error:Failed depen

6、dencies”的错误提示,请先安装“xinetd-2.3.14-16.e15.i386.rpm”,然后再安装 tftp。用 cat 命令查看 tftp 的配置文件。-9-图 14在根目录下创建 tftpboot 文件夹,作为 tftp 服务器端的默认根目录(对应于配置文件中的“server_args”字段),用户可以把需要向实验开发板传输的文件放到“/tftpboot”目录下。图 15重新执行 xinetd 守护进程,使配置生效。图 16进入 minicom 软件,配置串口通信参数在终端中输入 minicom s,进入 minicom 配置界面。图 17在 如 下 图 当 中,选 择Seri

7、alPortSetup菜 单 选 项,进 行 串 口 配 置。图 18-10-有关串口通信选项的含义:Filenames and paths:选择需要传输的文件和路径File transfer protocols:选择传输文件的通信协议Serial port setup:设置串口通信参数Save setup as dfl:将设置好的各项参数保存为 dflSave setup as:将设置好的各项参数保存为自定义的文件名Exit:退出返回到 minicom 设置好后的终端Exit from Minicom:从 minicom 命令中退出返回 Linux 终端将光标移到Serial port se

8、tup,按回车键会弹出串口通信参数的配置菜单。串口通信口的选择:(A-Serial Device)按A键把光标移动到Serial Device。如果串口线连在 PC 机的串口 1 上,则把 Serial device 设置为/dev/ttyS0。如果连在串口 2 上,则把 Serial device 设置为/dev/ttyS1,然后按下回车键。图 19串口参数的设置(E-Bps/Par/Bits)按E键来设置通信波特率、数据位、奇偶校验位和停止位(可以通过按下不同的键来设置通信参数)。分别按I、V、L、W键把波特率设为 115200,数据位设为 8,奇偶校验位设为无,停止位设为 1。设置完后按

9、Esc。-11-图 20数据流的控制选择(F-Hardware Flow Control、G-Software Flow Control)按F键可以完成硬件流控制切换,即完成Yes与No之间的切换。按G键完成软件流控制切换,即完成Yes与No之间的切换。下图显示的是串口配置好的后完整信息。-12-图 21配置完成后,按下“Esc”键,将会出现下图的配置菜单。选择“Save setup as dfl”按 ENTER 键来保存,当配置保存后,按下“Esc”键完成设置。图 22配置完成后单击“Esc”退出配置界面,进入 minicom 的初始界面,如下图所示:-13-图 23实验开发板的启动拨动实验

10、开发板的电源开关,启动目标板。图 24注意在启动的过程中可能出现如下提示信息,这些信息不影响系统的启动。图 25-14-当启动停止后直接按“Enter”即可进入系统。图 26嵌入式 Linux 系统的启动过程分析启动 BootloaderBootloader 是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于 PC机上的 BIOS。在本系统中这段程序的起始地址为 0 x00000000。Bootloader 在完成初始化 RAM、初始化串口、检测处理器类型、设置 Linux 启动参数后,开始调用 Linux 内核。本系统 Linux 内核镜像zImage 放在 Flash

11、 中,Bootloader 首先把它拷贝到 RAM 中,然后跳转到 RAM 中对 zImage 进行解压缩。解压缩后启动内核。加载内核内核启动后先进行一系列与内核相关的初始化,然后调用第一个用户进程init 进程并等待用户进程的执行。具体的过程如下:进行与体系结构相关的第一个初始化工作,首先通过检测出来的处理器类型进行处理器内核的初始化,然后进行内存结构的初始化,最后开启 MMU,创建内核页表,映射所有的物理内存和 IO 空间;创建异常向量表和初始化中断处理函数;初始化系统核心进程调度器和时钟中断处理机制;初始化串口控制台,在 minicom 中看到的系统启动过程中的信息都是通过串口输出的;创

12、建和初始化系统 cache,为各种内存调用机制提供缓存,包括动态内存分配、虚拟文件系统及页缓存;初始化内存管理,检测内存大小及被内核占用的内存情况;初始化系统的进程间通信机制(IPC);创建 init 进程,结束内核的启动。执行 init 进程。内核被加载后,第一个运行的程序便是/sbin/init,init 进程是所有进程的发起者和控制者,它的进程号是 1。init 进程首先读取/etc/inittab 文件,并依据此文件来进行初始化工作(首先进行一系列的硬件初始化,然后通过命令行传递过来的参数挂载根文件系统。最后执行一些其它的进程)。下面是/etc/inittab 文件的内容。-15-图

13、27init 配置文件每行的基本格式为“id:runlevel_ignored:action:process”,其中某些部分可以为空。各部分的具体内容如下:id:指定启动进程的控制终端,如果所启动的进程并不是可以交互的 shell,应该会有个控制终端(在 PC 机上该字段表示配置行的惟一标识)。runlevel_ignored:该字段是忽略掉的,配置 inittab 时空着它就行了(在 PC 机上该字段用来配置所启动进程适用的系统运行级别)。action:下面是对几种行为的描述。-16-行为描述sysinit为 init 提供初始化命令脚本的路径respawn每当相应的进程终止时,重新启动该进

14、程。askfirst类似 respawn,主要用途是减少系统上执行的终端应用程序的数量。它将会促使 init 在控制台上显示“Please press Enter to activethis console”的信息,并在重新启动之前等待用户按下“Enter”键ctrlaltdel当用户按下【Ctrl+Alt+Del】时执行相应的进程shutdown当系统关机时,执行相应的进程process:process 为 init 执行的进程。执行/bin/login 程序。有些嵌入式系统在 init 进程执行完后会执行/bin/login。login 程序会提示使用者输入账号及密码,接着编码并确认密码的

15、正确性,如果账号与密码相符,则为使用者初始化环境,并将控制权交给shell,即等待用户登录。本系统在执行完 init 进程后直接开始执行/bin/sh,进入 shell 交互程序(跳过了执行/bin/login 这一步)。这个可以通过图 27 中的语句“ttyS0:askfirst:-bin/sh”来说明。程序的交叉编译及运行用 ifconfig 命令把目标机的 IP 设置为 192.168.0.5(如果宿主机上的 IP 地址不是 192.168.0.1,则用同样的方法设置宿主机的 IP)。然后用 ping 命令测试目标机与宿主机的网络连通性。图 28在宿主机的/root/Work 目录下用

16、vi 命令创建一个文件 helloworkd.c,编辑后退出并保存。-17-图 29用 arm-linux-gcc 命令对 helloworld.c 进行编译。然后用 file 命令查看新生成的文件 helloworld 的信息。最后看 helloworld 能否正常运行。图 30用 arm-linux-gcc 编译生成的文件只能在嵌入式系统中运行,下面用 scp 命令把文件 helloworld 拷贝到目标机的/root 目录下,然后运行该文件,查看运行结果。用 scp 命令可实现文件传输,它有多种格式,下面只列出其中的两个,分别用来把文件从远程复制到本地和从本地复制到远程。scp remo

17、te_usernameremote_ip:remote_file local_folderscp local_file remote_usernameremote_ip:remote_folder在第一次使用 scp 命令时会提示“Do you want to continue connecting?(y/n)”,当输入正确的密码(宿主机 root 用户的密码为“xidianembed”),连接成功后就可以直接进行文件拷贝了。以后再使用 scp 进行文件拷贝时,连接已经存在,只用输入宿主机密码就可以进行文件拷贝了。-18-图 31gdbserver 远程调试在宿主机的/root/Work 目录

18、下用 vi 命令创建文件 arm_error.c,编辑后保存并退出。图 32使用 arm-linux-gcc 命令编译 arm_error.c。注意这里要加上参数“-g”,它表示附加调试信息,不加的话后面将无法进行调试。图 33用 scp 命令把 arm_error 拷贝到目标机的/root 目录下。-19-图 34在目标机的/root 目录下运行 arm_error,查看运行结果。图 35在目标机上启动 gdbserver。图 36在宿主机上启动 arm-linux-gdb,show 命令查看一下 solib-search-path 是否已经配置,如果没有则通过set 命令进行配置。然后通过

19、 target remote 命令连接到目标机的 1234 端口。图 37下面开始对 arm_error 进行调试,用 list 命令列出源程序,用 break 命令添加断点,然后用 continue 命令继续运行程序(目标机中已经启动了 arm_error,该程序被 gdbserver 阻塞)。-20-图 38用 next 命令进行单步调试。图 39在调试的过程中,很容易发现问题出在“p0=e;”语句上。因对一个字符串常量进行修改而发生了段错误。查看目标机上的显示信息。图 40-21-实验二 并发 Web 服务器的实现【实验目的】熟悉 Linux 网络编程。了解 Web 服务器原理。掌握嵌入

20、式 Linux 多进程、多线程、I/O 多路复用三种方式并发服务器的实现。【实验内容】用多进程实现 Web 服务器。用多线程实现 Web 服务器。用 I/O 多路复用方式实现 Web 服务器。【实验步骤】环境配置打开实验开发板,用网线和串口线连接宿主机,并连接电源(注意这时不要拨动实验开发板的开关按钮)。启动虚拟机中的 Linux 系统,在终端中运行 minicom 命令,启动 minicom 软件。图 1拨动实验开发板的电源开关,启动目标机,进入嵌入式 Linux 系统。图 2用 ifconfig 命 令 把 目 标 机 的 IP 设 置 为 192.168.0.5(如 果 宿 主 机 上

21、的 IP 地 址 不 是192.168.0.1,则用同样的方法设置宿主机的 IP)。然后用 ping 命令测试目标机与宿主机的网络连通性。-22-图 3把程序源代码文件拷贝到宿主机的 mnt/nfs/web 目录下或者直接在此目录下创建并编辑源代码文件,结果如下。图 4实现多进程 Web 服务器用 arm-linux-gcc 命令编译源程序,得到可执行程序 web_server_process。图 5用 vi 文本编译器创建文件 index.html,用于测试 Web 服务器。图 6编辑文件 index.html,然后保存并退出 vi 编辑器。-23-图 7在/mnt/nfs/web 目录下创

22、建子目录 cgi-bin,并用 vi 文本编辑器在 cgi-bin 目录下创建文件hello.cgi,用于测试 Web 服务器。图 8编辑文件 hello.cgi,然后保存并退出 vi 编辑器。-24-图 9用 ls 命令可以看到 root 用户对文件 hello.cgi 没有执行权限,通过 chmod 命令来修改hello.cgi 的权限,使它称为可执行文件。图 10用命令 service 启动宿主机上的 nfs 服务,并用 exportfs 命令查看 nfs 的共享目录(这里用到了实验一中的 NFS 配置,结果如图 11 所示)。然后在目标机上挂载 nfs(如图 12 所示,在挂载之前需要

23、先关闭宿主机的防火墙)。图 11图 12在目标机中运行 web_server_process。图 13打开宿主机的浏览器,输入 http:/192.168.0.5/file,查看执行结果。-25-图 14在宿主机的浏览器中输入 http:/192.168.0.5,查看执行结果。图 15在宿主机的浏览器中输入 http:/192.168.0.5/index.html,查看执行结果。图 16在宿主机的浏览器中输入 http:/192.168.0.5/cgi-bin/hello.cgi,查看执行结果。图 17在宿主机的浏览器中输入 http:/192.168.0.5/web_server_proce

24、ss.c,查看执行结果。-26-图 18实现多线程 Web 服务器用 arm-linux-gcc 命令编译源程序,得到可执行程序 web_server_thread。图 19在目标机中运行 web_server_thread。图 20在宿主机的浏览器中输入 http:/192.168.0.5,查看执行结果。图 21在宿主机的浏览器中输入 http:/192.168.0.5/cgi-bin/hello.cgi,查看执行结果。-27-图 22在宿主机的浏览器中输入 http:/192.168.0.5/web_server_thread.c,查看执行结果。图 23实现 I/O 多路复用方式的 Web

25、 服务器用 arm-linux-gcc 命令编译源程序,得到可执行程序 web_server_select。图 24在目标机中运行 web_server_select。图 25在宿主机的浏览器中输入 http:/192.168.0.5,查看执行结果。-28-图 26在宿主机的浏览器中输入 http:/192.168.0.5/cgo-bin/hello.cgi,查看执行结果。图 27在宿主机的浏览器中输入 http:/192.168.0.5/web_server_select.c,查看执行结果。图 28-29-实验三 嵌入式 Linux 驱动(1)【实验目的】熟悉嵌入式 Linux 驱动程序编写

26、框架。了解七段数码管驱动程序的工作原理,熟练掌握该驱动程序在嵌入式开发平台的移植和注册使用。【实验内容】学习 Linux 驱动源代码,分析代码中各个函数模块的功能作用。在宿主机上交叉编译七段数码管驱动程序,然后移植到目标机上。在目标机上注册驱动程序,验证驱动的功能。【实验步骤】了解七段数码管工作原理七段数码管是显示数字的电子元件,因为借助七个发光二极管以不同组合来显示数字,所以称为七段数码管(如图 1)。七段数码管分为共阴极和共阳极,共阳极的七段数码管的正极(或者阳极)为八个发光二极管的共有正极,其他接点为独立发光二极管的负极(或者阴极),使用者只需要把正极接电,不同的负极接地就可以控制七段数

27、码管显示不同的数字。共阴极的七段数码管与共阳极的只是接电的接法相反而已。图 1开发板七段数码管电路介绍开发板上有四个七段共阴数码管,2 个一组,第一组七段数码管使用系统 LED_CS2 作为其位选使能信号,两个数码管的段选信号分别使用数据总线的 D0D7 位和 D8D15 位,如图 2 所示。-30-图 2第二组七段数码管使用系统 LED_CS3 作为其位选使能信号,两个数码管的段选信号分别使用数据总线的 D0D7 位和 D8D15 位,如图 3 所示。图 3分析可知,对七段数码管的操作主要是对其位选和段选信号的控制。其中位选信号决定显示哪个七段数码管,段选信号决定其显示的字型信息(共阴极七段

28、数码管段选控制信息如表 1),这也是驱动程序和硬件关联的主要部分。D7D6D5D4D3D2D1D0字型DpGFEDCBA编码0011111110X3F1000001100X06-31-2010110110X5B3010011110X4F4011001100X665011011010X6D6011111010X7D7000001110X078011111110X7F9011011110X6FA011101110X77B011111000X7CC001110010X39D010111100X5EE011110010X79F011100010X71表 1七段数码管驱动的交叉编译进入目录/root/B

29、ackup/source 下,解压缩驱动源代码到指定路径。图 4交叉编译驱动:进入/root/Backup/Driver/xidian_seg7 目录下,编译源程序。图 5在确认测试代码和 Makefile 文件编写无误之后,交叉编译测试代码。-32-图 6调用 file 命令查看文件格式,编译出来的可执行程序 seg7_test 是 ARM 的 ELF 文件。图 7驱动程序的移植、注册与测试首先确认实验板和主机的网络连通,然后调用 scp 命令将测试程序和驱动程序模块拷贝到目标机上(目标机 root 用户的密码为“xidian”)。图 8拷贝成功后,驱动和测试程序保存在目标机的/opt 目录

30、下面,如图 9 所示:图 9在目标机上利用 mknod 命令建立设备文件节点;并利用 insmod 命令动态加载驱动模块,-33-同时利用 lsmod 命令查看驱动模块的加载情况。图 10执行完以上三条命令后,驱动模块成功添加进内核中,完成注册。在目标机的/opt 目录下执行驱动测试程序。图 11首先在实验板终端驱动测试程序中输入 0,打开设备,如果设备成功打开,会在终端打印出提示信息如图 12 所示。图 12然后依次调用选项 1,2,3,4 等,观察实验板上七段数码管执行的结果,分析之前的驱动测试程序各个函数模块的功能,最后在测试程序执行完毕之后,键入 dmesg 命令,查看驱动测试程序在测

31、试和加载中的输出信息(如图 13 所示),分析驱动代码,加深对其的理解。-34-图 134)卸载驱动程序,删除设备文件。图 14-35-实验四 Qt 编写简单的计算器【实验目的】熟悉 QtCreator 的简单操作。了解 Qt 程序编写框架。了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。【实验内容】查看 API 手册,学习简单的 Qt 类的使用,如 QLineEdit、QPushButton 等。用 QtCreator 创建工程,用 Qt 编写计算器程序。对计算器程序进行移植。【实验步骤】创建工程打开 QtCreator,如图 1 所示。图 1选择 File-New File or P

32、roject,然后在弹出的对话框中选择 Other Project-Empty Qt project(如图 2 所示),然后进入下一步。-36-图 2定义新工程的工程名并选择保存路径(如图 3 所示),然后进入下一步。图 3选择 Qt 版本,这里选择使用 Qt4.7.1,取消对 Qt in PATH 的选择(如图 4 所示),然后进-37-入下一步,完成新工程的创建(如图 5 所示)。图 4图 5计算器程序的实现-38-计算器程序主要分以下两部分工作:一是实现计算器的图形界面;二是实现按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。计算器图形界面的实现通过分析计算器的功能我们可知

33、,需要 16 个按键和一个显示框,同时考虑到整体的排布,还需要水平布局器和垂直布局器。通过组织这些类我们可以实现一个简单的带有数字09,可以进行简单四则运算且具有清屏功能的计算器。对于这些类的具体操作会在后面的代码中详细说明。信号和对应槽函数的绑定分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键,主要进行数字的录入,这类按键包括按键 09;二是运算操作键,用于输入数学运算符号,进行数学运算和结果的显示,这类按键包括“+”,“-”,“*”,“/”,“=”;三是清屏操作键,用于显示框显示信息的清除。进入刚才创建的空工程,双击左侧的 Calculator.pro,在主编辑框中目前显

34、示 Calculator.pro的内容为空,如图 6 所示。这是因为目前什么文件都没有添加的缘故。图 6添加文件 calculator.h在工程 Calculator 上面点击右键,然后点击 Add New,选择添加 C+Header File(如图7 所示),进入下一步后输入文件名 calculator.h(如图 8 所示),然后完成文件的添加。-39-图 7图 8添加文件 calculator.cpp 和 main.cpp与添加文件 calculator.h 的过程类似,只是在选择文件类型时选择为 C+Source File。-40-完成后可以查看 Calculator.pro 文件的内容

35、,整个工程的文件结构如图 9 所示。图 9计算器程序在 X86 上的编译运行完成源程序的编辑后,可以直接点击图 10 中所示的运行按钮,这时 QtCreator 会自动编译源程序并生成可执行程序(这里默认的编译环境是 X86 的,生成的可执行程序可以直接在宿主机上运行)。可以在/root/Work/Calculator-build-desktop 目录下找到可执行程序。-41-图 102)计算器程序在 X86 上的界面如图 11 所示,可以进行简单的计算来测试此计算器的功能。图 11计算器程序的移植上面所说的可执行程序是由 QtCreator 调用用 X86 上的 qmake 命令生成 Mak

36、efile 文件后调用 make 命令自动生成。下面将通过交叉编译工具链中的 qmake 命令生成 Makefile 文件并用 make 命令生成 ARM 上的可执行程序。进入/root/Work/Calculator 目录下,可以看到计算器程序的几个源文件,如图 12 所示。图 12用 qmake 命令生成 Makefile 文件,然后用 make 编译源程序(如图 13 所示),生成可执行程序(如图 14 所示)。由于交叉编译工具链的路径已经添加到环境变量 PATH 中了,所以这 里 用 到 的qmake是ARM上 的 命 令(可 以 通 过ls/opt/buildroot-2011.02

37、/output/host/usr/bin 找到 qmake 文件)。图 13-42-图 14进入目标机,在目标机的/root 目录下用 scp 命令拷贝上一步生成的可执行文件。然后运行计算器程序(如图 15 所示)。图 15程序在目标机显示屏中的运行结果如图 16 所示。由于本程序没有集成键盘动作,只能通过鼠标点击按钮来进行操作。可以用目标机显示屏的触屏笔或者连接一个 USB 口的鼠标进行程序测试。图 16个人总结个人总结本次试验让我熟悉了 Linux 的启动流程,练习了 Linux 的命令系统,加深了 Linux开发环境的了解,从宿主机和目标机的连接,到交叉编译,再到 GDB 交叉调试,烧写到内核-43-版这一系列的开发嵌入式程序的流程。通过动手实现,我对 Linux 的网络编程也有了初步的认识,大致掌握了多进程、多线程和多路复用三种方式并发服务器的实现过程。同时在Linux 驱动实验中我初步掌握了驱动程序的编写框架,对今后进一步提升打下基础。QT 作为一种功能强大的 GUI 软件,在本次实验中我大致摸到了皮毛,今后要不断实践,不断进步。总的来说,本次实验让我巩固了课堂上学的知识,并有了亲手付诸实践的经历,对将来的学习和工作都大有裨益。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁