嵌入式系统与应用实验指导报告书.doc_第1页
嵌入式系统与应用实验指导报告书.doc_第2页
嵌入式系统与应用实验指导报告书.doc_第3页
嵌入式系统与应用实验指导报告书.doc_第4页
嵌入式系统与应用实验指导报告书.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

安徽工业大学嵌入式系统与应用实验报告册学院: 电气与信息工程学院 专业: 测控技术与仪器 姓名: 学号: 实验一 Linux认知实验一、实验目的:1、 通过实验,掌握Linux操作系统下常用的命令,能灵活运用这些命令完成特定的工作;2、 学习Linux下文本编辑器vi的使用方法。二、实验内容:1、新建文件hello.c,文件位于/home/test/ 目录下;2、使用vi编辑三、实验步骤:1、打开电脑上的虚拟机,加载Linux系统。2、输入密码进入系统后,按ctrl + Alt + t打开终端;3、使用mkdir建立/home/test文件夹;4、使用chmod命令修改文件夹权限;5、使用vi打开hello.c文件,从而新建文件;6、在hello.c文件中输入程序,使得程序能够显示打印字符:“Hello,Linux!” 四、实验结果:(包括代码源码和运行结果)1、源代码(1)hello.c程序代码:#include stdio.hint main() printf(hello linux!n);(2)修改文件夹权限:用chmod修改文件夹权限lvlv-pc:$ cd test1lvlv-pc:/test1$ ls -l总用量 28-rwxr-xr-x 1 lv lv 8136 5月 7 11:36 a.out-rwxr-xr-x 1 lv lv 7869 5月 11 09:10 main-rw-r-r- 1 lv lv 250 5月 7 11:35 main.c-rwxr-xr-x 1 lv lv 8136 3月 30 20:28 mianlvlv-pc:/test1$ chmod 733 a.outlvlv-pc:/test1$ ls -l总用量 28-rwx-wx-wx 1 lv lv 8136 5月 7 11:36 a.out-rwxr-xr-x 1 lv lv 7869 5月 11 09:10 main-rw-r-r- 1 lv lv 250 5月 7 11:35 main.c-rwxr-xr-x 1 lv lv 8136 3月 30 20:28 mian2、实验结果五、思考:在建立文件夹的过程中,如果不进入管理员权限,会出现什么问题?同样,不进入管理员权限,vi编辑完代码,能不能保存退出?chmod后面的数字参数是什么含义?答:会出现:键入mkdir test后显示: 无法创建目录test: 权限不够的问题。不进入管理员权限,vi编辑完代码,不能保存退出。想对文件夹所修改成的权限。实验二 交叉编译实验一、实验目的:1、通过实验,掌握交叉编译的原理,理解文件系统挂载的原理;2、掌握交叉编译工具的使用,学会使用两种不同的方式访问目标板系统,学会使用gdb对程序进行调试。二、实验内容:编辑hello.c程序,使用交叉编译工具进行编译,生成可执行文件,分别使用minicom和telnet 登录到目标板上,对程序进行运行调试。三、实验步骤:1、打开电脑上的虚拟机,加载Linux系统。2、Linux系统登录完毕,设置PC机网络地址为192.168.0.10,其中子网掩码为255.255.255.0,连接好实验箱上的电源、网线和USB转串口工具以及串口延长线。3、按ctrl + Alt + t打开终端,输入sudo minicom打开minicom,查看串口设置是否正确,进行串口设置;4、打开试验箱电源,查看启动代码,启动完成后,实验箱屏幕显示界面,按“Ctrl+c”,然后按“Enter”,进入板子系统。5、在文件系统(/home/nfs)下的test文件夹下,建立hello.c的程序,程序中输入相应程序,实现打印信息“hello,linux”并换行输出110;6、再打开一个终端,在该终端中转到文件系统test文件夹,使用交叉编译工具对hello.c进行编译。7、在minicom中,目录转到“/test”文件夹下使用./(你的程序名) 运行程序;8、使用“gdb 你的程序名”运行程序,设置断点进行程序调试。9、关闭minicom,终端中输入telnet,然后输入open 192.168.0.11,等待出现“login:”输入“root”,进入目标板系统;10、目录转到“/test”文件夹下使用./(你的程序名) 运行程序;11、使用“gdb 你的程序名”运行程序,设置断点进行程序调试。四、实验结果:(包括代码源码和运行结果)1、源程序#include main( ) int i ; printf(“hello linux! n”); for(i=1;i open 192.168.0.11Trying 192.168.0.11.Connected to 192.168.0.11.Escape character is .Linux 2.4.18-rmk7-pxa1 (192.168.0.11) (0)192.168.0.11 login: rootBusyBox v0.60.3 (2002.05.13-08:36+0000) Built-in shell (ash)Enter help for a list of built-in commands.# ./helloarm./helloarm: No such file or directory# cd test# ./helloarmHello linux!this is 1this is 2this is 3this is 4this is 5this is 6this is 7this is 8this is 9this is 10(2) 在minicom下运行:wyxjwyxj-cpu:$ sudo minicomsudo password for wyxj: Welcome to minicom 2.6.2OPTIONS: I18n Compiled on Feb 8 2013, 06:27:51.Port /dev/ttyUSB0, 21:22:32Press CTRL-A Z for help on special keys Waiting for enter to start /bin/sh (pid 46, terminal /dev/console) Please press Enter to activate this console. Starting pid 46, console /dev/console: /bin/shBusyBox v0.60.3 (2002.05.13-08:36+0000) Built-in shell (ash)Enter help for a list of built-in commands.# ls333.bmp microwindows-0.90 sbinbin mmcsd sheryl.mp3bomb mnt testdev notebook tmpetc pig.mp3 usr hello.c proc var iceage.mpeg qcop-msg-qpe vcongui lib qcop-msg-quicklauncher linuxrc qtembedded-root # cd test # ./helloarm Hello linux!this is 1this is 2this is 3this is 4this is 5this is 6this is 7this is 8this is 9this is 10 (3) 超级终端下运行:3、 gdb调试五、思考:1、在使用交叉编译工具进行编译过程中,要生成可用gdb调试的程序,需要再编译过程中加什么参数?答:gcc -g hello.c -o hello 要加上“-g”,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该执行文件。2、使用telnet进行目标板访问过程中,什么时候运行open命令不会出现连接不到目标板的情况?答:目标版能显示文档内容,表示所有连接成功。连接不到原因:1)线路问题;(检查线路) ;2) telnet的网络设备负载过高,无法正常响应服务;(重启一下设备);3)telnet的网络设备禁止了telnet的23端口.(于设备中打开该端口);实验三 S3C2410基础实验一、实验目的:了解在ADS环境下对S3C2410芯片的AD接口的操作、键盘/LED接口的操作、直流和步进电机的工作原理和实际编程操作。二、实验内容:1、实现使用ADS和简易JTAG仿真器连接ARM芯片S3C2410;2、使用提供例程和超级终端对上述的各个模块的接口进行实际操作。三、实验步骤:1、ADS实验环境的建立,参照THUEA-1A型嵌入式(ARM9)高级实验/开发系统实验指导书的157162页;2、设置好以后,到D盘ARM文件夹下,找到ADS的工程文件,拖入到打开的ADS1.2中;3、重启开发板,超级终端中显示等待状态,点击ADS1.2上的调试按钮,程序开始下装到开发板;ADS进入调试界面;4、点击调试界面上的运行按钮,程序执行到主程序处,再次点击运行程序;5、程序运行后,超级终端上显示运行提示,按提示操作键盘/LED、电机和AD转换.四、实验结果:(超级终端上的运行提示和实际运行结果)1、运行程序:(1)A/D程序:读取采样值函数:intReadAdc(intch)inti;staticintprevCh=-1;rADCCON=(114)|(preScaler6)|(ch3);/设立通道if(prevCh!=ch)rADCCON=(114)|(preScaler6)|(ch3);/设立通道for(i=0;iLOOP;i+);/准备下一通道prevCh=ch;rADCCON|=0x1;/开始ADCwhile(rADCCON&0x1);/检查Enable_start位是否变低while(!(rADCCON&0x8000);/检查EC(EndofConversion)flag是否为高return(int)rADCDAT0&0x3ff);在超级终端显示数字量:a4=ReadAdc(4);a6=ReadAdc(6);Uart_Printf(AIN4:%0.2fAIN6:%0.2fn,a4*3.3/1024,a6*3.3/1024);(2)D/A程序:MAX504的控制程序如下:voidDA_Test()inti;intSAVrGPACON,SAVrGPFCON,SAVrGPGCON;floatv;SAVrGPACON=rGPACON;/寄存器状态保护SAVrGPFCON=rGPFCON;/寄存器状态保护SAVrGPGCON=rGPGCON;/寄存器状态保护MAX504_CLEAR();/将DAC寄存器设为0Uart_Printf(DACTestnPleaseobservethecorrespondingofoutputandinput:n);for(i=0;i1024;i+=8)Max504_SetDA(i);/MAX504读取数字量转化v=(float)i)*Max504_FULL/1024.0f;/数字量显示Uart_Printf(CurrentDigitalVoltageOfInput=%1.2fVr,v);Delay(2000);/数字量保持时间rGPACON=SAVrGPACON;/寄存器状态恢复rGPFCON=SAVrGPFCON;/寄存器状态恢复rGPGCON=SAVrGPGCON;/寄存器状态恢复MAX504读取数字量转化函数:voidMax504_SetDA(intvalue)value8);/发送高8位SendSPIData(value);/发送低8位MAX504_DISABLE();/关闭MAX504(3)键盘/LED接口程序:超级终端显示键值数组:unsignedcharScandata44=F,E,D,C,B,A,9,8,7,6,5,4,3,2,1,0,;数码管码段显示值数组:unsignedcharst44=0x8e,0x86,0xa1,0xc6,0x83,0x88,0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0,;扫描键值中断函数:dorGPEDAT=rGPEDAT&0xfff7;/置GPE3为低,扫描键盘第四行rGPEDAT=rGPEDAT|0x70;/GPE4、5、6为高i=3;Read_value(i);rGPEDAT=rGPEDAT&0xffef;/置GPE4为低,扫描键盘第三行rGPEDAT=rGPEDAT|0x68;/GPE3、5、6为高i=2;Read_value(i);rGPEDAT=rGPEDAT&0xffdf;/置GPE5为低,扫描第二行键盘rGPEDAT=rGPEDAT|0x58;/GPE3、4、6为高i=1;Read_value(i);rGPEDAT=rGPEDAT&0xffbf;/置GPE6为低,扫描第一行键盘rGPEDAT=rGPEDAT|0x38;/GPE3、4、5为高i=0;Read_value(i);while(value!=0);某列键值读取:case(0xe):value=Scandatadata0;rGPADAT=0x81e0;/GPA5,6,7,8输出1,15输出高rSMG0=stdata0;/数码管显示rGPADAT=0x01e0;/GPA5,6,7,8输出1,15输出低break;Uart_Printf(rkeyvalueis%c,value);/超级终端显示(5)直流、步进电机程序:直流电机正转:rGPADAT=0xfff80;/GPA7置1,GPA4、5、6置0Delay(50);/延时函数,控制低脉冲时间rGPADAT=0xfff90;/GPA4、7置1,GPA5、6置0Delay(30);/延时函数,控制高脉冲时间直流电机反转:rGPADAT=0xfff20;/GPA5置1,GPA4、6、7置0Delay(50);/延时函数,控制低脉冲时间rGPADAT=0xfff60;/GPA5、6置1,GPA4、7置0Delay(30);/延时函数,控制高脉冲时间步进电机输出脉冲:rGPADAT=0xfff07;/0111,注意:低电平有效Delay(140);/延时函数,控制步进电机转速rGPADAT=0xfff0b;/1011Delay(140);rGPADAT=0xfff0d;/1101Delay(140);rGPADAT=0xfff0e;/1110Delay(140);2、超级终端运行结果:五、思考:在ADS下载程序的过程中,目标板为什么不能进入到linux系统,目标板进入linux系统后,下装的程序能不能正常运行?答:因为内存冲突;能。实验四 多路复用实验一、 实验目的:1、 通过实验,掌握Linux操作系统下多路复用的概念;2、 学习Linux下多路复用函数的使用方法。二、实验内容:构建多路复用程序及其框架,整个流程如图所示:三、实验步骤:1、打开电脑上的虚拟机,加载Linux系统。2、输入密码进入系统后,按ctrl + Alt + t打开终端;3、进入到程序所在目录,对程序进行编译;4、使用mknod in1 p建立管道1;5、使用mknod in2 p建立管道2;6、重新打开一个终端输入 cat in1;7、重新打开一个终端输入 cat in2;8、在原来终端中输入./multiplex_select;9、在in1、in2终端中随机输入字符,观察现象;10、在主程序所在终端中输入q,观察现象;11、修改编译器在目标板上运行上述程序。四、实验结果:(包括代码源码和运行结果)1、 源代码:(1)multiplex_select.c代码:/* multiplex_select.c */#include #include #include #include #include /#include #define MAX_BUFFER_SIZE1024#define IN_FILES3#define TIME_DELAY60#define MAX(a, b)(a b)?(a):(b)int main(void)int fdsIN_FILES;char bufMAX_BUFFER_SIZE;int i, res, real_read, maxfd;/struct timeval tv;fd_set inset,tmp_inset;fds0 = 0;if(fds1 = open (in1, O_RDONLY|O_NONBLOCK) 0)printf(Open in1 errorn);return 1; if(fds2 = open (in2, O_RDONLY|O_NONBLOCK) 0) printf(Open in2 errorn);return 1; maxfd = MAX(MAX(fds0, fds1), fds2); FD_ZERO(&inset); for (i = 0; i IN_FILES; i+) FD_SET(fdsi, &inset); FD_SET(0, &inset); /tv.tv_sec = TIME_DELAY; /tv.tv_usec = 0; while(FD_ISSET(fds0,&inset) | FD_ISSET(fds1,&inset) | FD_ISSET(fds2, &inset) tmp_inset = inset; res = select(maxfd + 1, &tmp_inset, NULL, NULL, 0); switch(res) case -1: printf(Select errorn); return 1; break; case 0: /* Timeout */ printf(Time outn); return 1; break; default: for (i = 0; i IN_FILES; i+) if (FD_ISSET(fdsi, &tmp_inset) /memset(buf, 0, MAX_BUFFER_SIZE); real_read = read(fdsi, buf, MAX_BUFFER_SIZE); if (real_read 0) /if (errno != EAGAIN) / return 1; / else if (!real_read) close(fdsi); FD_CLR(fdsi, &inset); else if (i = 0) if (buf0 = q)(2)Makefile代码:EXEC = multiplex_selectOBJS = multiplex_select.oHEADERS = CC = gccINC = -I.CFLAGS = $INC -g all:$EXEC$EXEC : $OBJS$CC $CFLAGS $LDFLAGS -o $ $OBJS $OBJS : $HEADERS.PHONY : cleanclean :-rm -f $OBJS $EXEC2、 运行结果3、目标板运行结果4.超级终端上运行五、思考:主程序运行过程中,超时退出是靠select()函数的那个参数控制的?在整个实验过程中,如果in1,in2的名字发生变化,需要修改程序源码中的哪部分?答:timeout;修改如下部分中的in1和in2if(fds1 = pen (“in1”,O_RDONLY|O_NONBLOCK) 0) Printf(“Open in1 errorn”); Return 1;if(fds2 = pen (“in2”,O_RDONLY|O_NONBLOCK) 0)set_speed(fd,115200);elseprintf(Cant Open Serial Port!n);exit(0);if (set_parity(fd,8,1,n) = FALSE)printf(Set Parity Errorn);exit(1);printf(nsuccess setn); while(1)read(fd,&ch,1);/ch=getchar();putchar(ch);/write(fd,&ch,1);close(fd);return(0);Makefile代码:KERNELDIR=/usr/src/linux-2.4.20-8#CC = armv4l-unknown-linux-gccCC = gccCFLAGS = -I$(KERNELDIR)/include/ -Wall host_serial: $(CC) $(CFLAGS) -o host_serial serial.c host_serial.c clean:rm -f host_serial(2)target_serial.c:#include serial.h#define TRUE 1 #define FALSE 0/*breif main()*/int main()int fd;char ch; char *dev =/dev/ttyS0;fd = init_serial(dev);if (fd0)set_speed(fd,115200);elseprintf(Cant Open Serial Port!n);exit(0);if (set_parity(fd,8,1,N)= FALSE)printf(Set Parity Errorn);exit(1);printf(successfully setn);while(1)/ch=getchar();ch=a;write(fd, &ch, 1);/read(fd,&ch,1);/printf(%d:t %d,i+,(int)ch);/putchar(ch);close(fd);return(0);Makefile代码:KERNELDIR=/home/sitsang/linux-2.4.19#KERNELDIR = /usrCC = arm-linux-gccCFLAGS = -I$(KERNELDIR)/include/ -Wall serial: $(CC) $(CFLAGS) -o target_serial serial.c target_serial.c clean:rm -f target_serial2、实验结果:五、思考:串口传送过程中,如果不能接收到数据,怎么处理?怎么测试PC机上的接收端口能接收到数据?答:确认接线正确,有信号;确认波特率正确,两端一致实验六 Linux网络编程实验一、实验目的:1、 通过实验,掌握Linux操作系统下网络通信的基本方法;2、 学习socket 编程的基本函数socket()、bind()、listen()、accept()、send()、sendto()、recv()以及recvfrom()的使用方法;二、实验内容:该实验中,需要建立网络通信的程序,程序分为客户端和服务器端两部分,其中服务器端首先建立起 socket,然后与本地端口进行绑

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论