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

下载本文档

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

文档简介

1、-. z.*工业大学嵌入式系统与应用实验报告册学院: 电气与信息工程学院 专业: 测控技术与仪器 *:*:-. z.实验一 Linu*认知实验一、实验目的:通过实验,掌握Linu*操作系统下常用的命令,能灵活运用这些命令完成特定的工作;学习Linu*下文本编辑器vi的使用方法。二、实验内容:1、新建文件hello.c,文件位于/home/test/ 目录下;2、使用vi编辑三、实验步骤:1、翻开电脑上的虚拟机,加载Linu*系统。2、输入密码进入系统后,按ctrl + Alt + t翻开终端;3、使用mkdir建立/home/test文件夹;4、使用chmod命令修改文件夹权限;5、使用vi翻

2、开hello.c文件,从而新建文件;6、在hello.c文件中输入程序,使得程序能够显示打印字符:Hello,Linu*!四、实验结果:包括代码源码和运行结果1、源代码1hello.c程序代码:#include stdio.hint main() printf(hello linu*!n);2修改文件夹权限:用chmod修改文件夹权限lvlv-pc:$ cd test1lvlv-pc:/test1$ ls -l总用量 28-rw*r-*r-* 1 lv lv 8136 5月 7 11:36 a.out-rw*r-*r-* 1 lv lv 7869 5月 11 09:10 main-rw-r-r

3、- 1 lv lv 250 5月 7 11:35 main.c-rw*r-*r-* 1 lv lv 8136 3月 30 20:28 mianlvlv-pc:/test1$ chmod 733 a.outlvlv-pc:/test1$ ls -l总用量 28-rw*-w*-w* 1 lv lv 8136 5月 7 11:36 a.out-rw*r-*r-* 1 lv lv 7869 5月 11 09:10 main-rw-r-r- 1 lv lv 250 5月 7 11:35 main.c-rw*r-*r-* 1 lv lv 8136 3月 30 20:28 mian2、实验结果五、思考:在建

4、立文件夹的过程中,如果不进入管理员权限,会出现什么问题?同样,不进入管理员权限,vi编辑完代码,能不能保存退出?chmod后面的数字参数是什么含义答:会出现:键入mkdir test后显示: 无法创立目录test: 权限不够的问题。不进入管理员权限,vi编辑完代码,不能保存退出。想对文件夹所修改成的权限。实验二 穿插编译实验一、实验目的:1、通过实验,掌握穿插编译的原理,理解文件系统挂载的原理;2、掌握穿插编译工具的使用,学会使用两种不同的方式访问目标板系统,学会使用gdb对程序进展调试。二、实验内容:编辑hello.c程序,使用穿插编译工具进展编译,生成可执行文件,分别使用mini和teln

5、et 登录到目标板上,对程序进展运行调试。三、实验步骤:1、翻开电脑上的虚拟机,加载Linu*系统。2、Linu*系统登录完毕,设置PC机网络地址为192.168.0.10,其中子网掩码为255.255.255.0,连接好实验箱上的电源、网线和USB转串口工具以及串口延长线。3、按ctrl + Alt + t翻开终端,输入sudo mini翻开mini,查看串口设置是否正确,进展串口设置;4、翻开试验箱电源,查看启动代码,启动完成后,实验箱屏幕显示界面,按Ctrl+c,然后按Enter,进入板子系统。5、在文件系统(/home/nfs)下的test文件夹下,建立hello.c的程序,程序中输入

6、相应程序,实现打印信息hello,linu*并换行输出110;6、再翻开一个终端,在该终端中转到文件系统test文件夹,使用穿插编译工具对hello.c进展编译。7、在mini中,目录转到/test文件夹下使用./(你的程序名) 运行程序;8、使用gdb 你的程序名运行程序,设置断点进展程序调试。9、关闭mini,终端中输入telnet,然后输入open 192.168.0.11,等待出现login:输入root,进入目标板系统;10、目录转到/test文件夹下使用./(你的程序名) 运行程序;11、使用gdb 你的程序名运行程序,设置断点进展程序调试。四、实验结果:包括代码源码和运行结果1、

7、源程序#include main( ) int i ; printf(hello linu*! n); for(i=1;i Trying 192.168.0.11.Connected to 192.168.0.11.Escape character is .Linu* 2.4.18-rmk7-p*a1 (192.168.0.11) (0)192.168.0.11 login: rootBusyBo* v0.60.3 (2002.05.13-08:36+0000) Built-in shell (ash)Enter help for a list of built-in mands.# ./he

8、lloarm./helloarm: No such file or directory# cd test# ./helloarmHello linu*!this is 1this is 2this is 3this is 4this is 5this is 6this is 7this is 8this is 9this is 10在mini下运行:wy*jwy*j-cpu:$ sudo minisudo password for wy*j: OPTIONS: I18n piled on Feb 8 2013, 06:27:51.Port /dev/ttyUSB0, 21:22:32Press

9、 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/shBusyBo* v0.60.3 (2002.05.13-08:36+0000) Built-in shell (ash)Enter help for a list of built-in mands.# ls333.

10、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 linu*rc qtembedded-root # cd test # ./helloarm Hello linu*!this is 1this is 2this is 3this is 4this is 5this is 6this is 7this is 8t

11、his is 9this is 10超级终端下运行:gdb调试五、思考:1、在使用穿插编译工具进展编译过程中,要生成可用gdb调试的程序,需要再编译过程中加什么参数?答:gcc -g hello.c -o hello 要加上-g,这样编译出的可执行代码中才包含调试信息,否则之后gdb无法载入该执行文件。2、使用telnet进展目标板访问过程中,什么时候运行open命令不会出现连接不到目标板的情况?答:目标版能显示文档内容,表示所有连接成功。连接不到原因:1线路问题;(检查线路) ;telnet的网络设备负载过高,无法正常响应效劳;(重启一下设备);3telnet的网络设备制止了telnet的2

12、3端口.(于设备中翻开该端口);实验三 S3C2410根底实验一、实验目的:了解在ADS环境下对S3C2410芯片的AD接口的操作、键盘/LED接口的操作、直流和步进电机的工作原理和实际编程操作。二、实验内容:1、实现使用ADS和简易JTAG仿真器连接ARM芯片S3C2410;2、使用提供例程和超级终端对上述的各个模块的接口进展实际操作。三、实验步骤:1、ADS实验环境的建立,参照THUEA-1A型嵌入式ARM9高级实验/开发系统实验指导书的157162页;2、设置好以后,到D盘ARM文件夹下,找到ADS的工程文件,拖入到翻开的ADS1.2中;3、重启开发板,超级终端中显示等待状态,点击ADS

13、1.2上的调试按钮,程序开场下装到开发板;ADS进入调试界面;4、点击调试界面上的运行按钮,程序执行到主程序处,再次点击运行程序;5、程序运行后,超级终端上显示运行提示,按提示操作键盘/LED、电机和AD转换.四、实验结果:超级终端上的运行提示和实际运行结果1、运行程序:1A/D程序:读取采样值函数:intReadAdc(intch)inti;staticintprevCh=-1;rADCCON=(114)|(preScaler6)|(ch3);/设立通道if(prevCh!=ch)rADCCON=(114)|(preScaler6)|(ch3);/设立通道for(i=0;iLOOP;i+);

14、/准备下一通道prevCh=ch;rADCCON|=0*1;/开场ADCwhile(rADCCON&0*1);/检查Enable_start位是否变低while(!(rADCCON&0*8000);/检查EC(EndofConversion)flag是否为高return(int)rADCDAT0&0*3ff);在超级终端显示数字量:a4=ReadAdc(4);a6=ReadAdc(6);Uart_Printf(AIN4:%0.2fAIN6:%0.2fn,a4*3.3/1024,a6*3.3/1024);2D/A程序:MA*504的控制程序如下:voidDA_Test()inti;intSAVr

15、GPACON,SAVrGPFCON,SAVrGPGCON;floatv;SAVrGPACON=rGPACON;/存放器状态保护SAVrGPFCON=rGPFCON;/存放器状态保护SAVrGPGCON=rGPGCON;/存放器状态保护MA*504_CLEAR();/将DAC存放器设为0Uart_Printf(DACTestnPleaseobservethecorrespondingofoutputandinput:n);for(i=0;i1024;i+=8)Ma*504_SetDA(i);/MA*504读取数字量转化v=(float)i)*Ma*504_FULL/1024.0f;/数字量显示U

16、art_Printf(CurrentDigitalVoltageOfInput=%1.2fVr,v);Delay(2000);/数字量保持时间rGPACON=SAVrGPACON;/存放器状态恢复rGPFCON=SAVrGPFCON;/存放器状态恢复rGPGCON=SAVrGPGCON;/存放器状态恢复MA*504读取数字量转化函数:voidMa*504_SetDA(intvalue)value8);/发送高8位SendSPIData(value);/发送低8位MA*504_DISABLE();/关闭MA*5043键盘/LED接口程序:超级终端显示键值数组:unsignedcharScanda

17、ta44=F,E,D,C,B,A,9,8,7,6,5,4,3,2,1,0,;数码管码段显示值数组:unsignedcharst44=0*8e,0*86,0*a1,0*c6,0*83,0*88,0*90,0*80,0*f8,0*82,0*92,0*99,0*b0,0*a4,0*f9,0*c0,;扫描键值中断函数:dorGPEDAT=rGPEDAT&0*fff7;/置GPE3为低,扫描键盘第四行rGPEDAT=rGPEDAT|0*70;/GPE4、5、6为高i=3;Read_value(i);rGPEDAT=rGPEDAT&0*ffef;/置GPE4为低,扫描键盘第三行rGPEDAT=rGPEDA

18、T|0*68;/GPE3、5、6为高i=2;Read_value(i);rGPEDAT=rGPEDAT&0*ffdf;/置GPE5为低,扫描第二行键盘rGPEDAT=rGPEDAT|0*58;/GPE3、4、6为高i=1;Read_value(i);rGPEDAT=rGPEDAT&0*ffbf;/置GPE6为低,扫描第一行键盘rGPEDAT=rGPEDAT|0*38;/GPE3、4、5为高i=0;Read_value(i);while(value!=0);*列键值读取:case(0*e):value=Scandatadata0;rGPADAT=0*81e0;/GPA5,6,7,8输出1,15输

19、出高rSMG0=stdata0;/数码管显示rGPADAT=0*01e0;/GPA5,6,7,8输出1,15输出低break;Uart_Printf(rkeyvalueis%c,value);/超级终端显示5直流、步进电机程序:直流电机正转:rGPADAT=0*fff80;/GPA7置1,GPA4、5、6置0Delay(50);/延时函数,控制低脉冲时间rGPADAT=0*fff90;/GPA4、7置1,GPA5、6置0Delay(30);/延时函数,控制高脉冲时间直流电机反转:rGPADAT=0*fff20;/GPA5置1,GPA4、6、7置0Delay(50);/延时函数,控制低脉冲时间r

20、GPADAT=0*fff60;/GPA5、6置1,GPA4、7置0Delay(30);/延时函数,控制高脉冲时间步进电机输出脉冲:rGPADAT=0*fff07;/0111,注意:低电平有效Delay(140);/延时函数,控制步进电机转速rGPADAT=0*fff0b;/1011Delay(140);rGPADAT=0*fff0d;/1101Delay(140);rGPADAT=0*fff0e;/1110Delay(140);2、超级终端运行结果:五、思考:在ADS下载程序的过程中,目标板为什么不能进入到linu*系统,目标板进入linu*系统后,下装的程序能不能正常运行?答:因为内存冲突;

21、能。实验四 多路复用实验实验目的:通过实验,掌握Linu*操作系统下多路复用的概念;学习Linu*下多路复用函数的使用方法。二、实验内容:构建多路复用程序及其框架,整个流程如下图:三、实验步骤:1、翻开电脑上的虚拟机,加载Linu*系统。2、输入密码进入系统后,按ctrl + Alt + t翻开终端;3、进入到程序所在目录,对程序进展编译;4、使用mknod in1 p建立管道1;5、使用mknod in2 p建立管道2;6、重新翻开一个终端输入 cat in1;7、重新翻开一个终端输入 cat in2;8、在原来终端中输入./multiple*_select;9、在in1、in2终端中随机输

22、入字符,观察现象;10、在主程序所在终端中输入q,观察现象;11、修改编译器在目标板上运行上述程序。四、实验结果:包括代码源码和运行结果源代码:1multiple*_select.c代码:/* multiple*_select.c */#include #include #include #include #include /#include #define MA*_BUFFER_SIZE1024#define IN_FILES3#define TIME_DELAY60#define MA*(a, b)(a b)(a):(b)int main(void)int fdsIN_FILES;char

23、 bufMA*_BUFFER_SIZE;int i, res, real_read, ma*fd;/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; ma*fd = MA*(MA*(fds0, fds1), fds2); FD_ZERO

24、(&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(ma*fd + 1, &tmp_inset, NULL, NULL, 0); switch(res) case -1: printf(Sel

25、ect 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, MA*_BUFFER_SIZE); real_read = read(fdsi, buf, MA*_BUFFER_SIZE); if (real_read 0) /if (errno != EAGAIN) / return 1; / else if (!r

26、eal_read) close(fdsi); FD_CLR(fdsi, &inset); else if (i = 0) if (buf0 = q)2Makefile代码:E*EC = multiple*_selectOBJS = multiple*_select.oHEADERS = CC = gccINC = -I.CFLAGS = $INC -g all:$E*EC$E*EC : $OBJS$CC $CFLAGS $LDFLAGS -o $ $OBJS $OBJS : $HEADERS.PHONY : cleanclean :-rm -f $OBJS $E*EC运行结果3、目标板运行结果

27、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);e*it(0);if (s

28、et_parity(fd,8,1,n) = FALSE)printf(Set Parity Errorn);e*it(1);printf(nsuccess setn); while(1)read(fd,&ch,1);/ch=getchar();putchar(ch);/write(fd,&ch,1);close(fd);return(0);Makefile代码:#CC = armv4l-unknown-linu*-gccCC = gccCFLAGS = -I$(KERNELDIR)/include/ -Wall host_serial: $(CC) $(CFLAGS) -o host_seri

29、al serial.c host_serial.c clean:rm -f host_serial2target_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);e*it(0);if (set_parity(fd,8,1,N)= FA

30、LSE)printf(Set Parity Errorn);e*it(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 = /usrCC = arm-linu*-gccCFLAGS = -I$(KERNELDIR)/include/ -Wall serial: $(CC) $(CFLAGS) -o ta

31、rget_serial serial.c target_serial.c clean:rm -f target_serial2、实验结果:五、思考:串口传送过程中,如果不能接收到数据,怎么处理?怎么测试PC机上的接收端口能接收到数据?答:确认接线正确,有信号;确认波特率正确,两端一致实验六 Linu*网络编程实验一、实验目的:通过实验,掌握Linu*操作系统下网络通信的根本方法;学习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

提交评论