嵌入式系统及应用实验指导报告书.docx
- 文档编号:23389507
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:37
- 大小:1.79MB
嵌入式系统及应用实验指导报告书.docx
《嵌入式系统及应用实验指导报告书.docx》由会员分享,可在线阅读,更多相关《嵌入式系统及应用实验指导报告书.docx(37页珍藏版)》请在冰豆网上搜索。
嵌入式系统及应用实验指导报告书
安徽工业大学
嵌入式系统与应用
实验报告册
学院:
电气与信息工程学院
专业:
测控技术与仪器
姓名:
学号:
实验一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.h"
intmain()
{
printf("hellolinux!
\n");
}
(2)修改文件夹权限:
用chmod修改文件夹权限
lv@lv-pc:
~$cdtest1
lv@lv-pc:
~/test1$ls-l
总用量28
-rwxr-xr-x1lvlv81365月711:
36a.out
-rwxr-xr-x1lvlv78695月1109:
10main
-rw-r--r--1lvlv2505月711:
35main.c
-rwxr-xr-x1lvlv81363月3020:
28mian
lv@lv-pc:
~/test1$chmod733a.out
lv@lv-pc:
~/test1$ls-l
总用量28
-rwx-wx-wx1lvlv81365月711:
36a.out
-rwxr-xr-x1lvlv78695月1109:
10main
-rw-r--r--1lvlv2505月711:
35main.c
-rwxr-xr-x1lvlv81363月3020:
28mian
2、实验结果
五、思考:
在建立文件夹的过程中,如果不进入管理员权限,会出现什么问题?
同样,不进入管理员权限,vi编辑完代码,能不能保存退出?
chmod后面的数字参数是什么含义?
答:
会出现:
键入mkdirtest后显示:
无法创建目录"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打开终端,输入sudominicom打开minicom,查看串口设置是否正确,进行串口设置;
4、打开试验箱电源,查看启动代码,启动完成后,实验箱屏幕显示界面,按“Ctrl+c”,然后按“Enter”,进入板子系统。
5、在文件系统(/home/nfs)下的test文件夹下,建立hello.c的程序,程序中输入相应程序,实现打印信息“hello,linux”并换行输出1~10;
6、再打开一个终端,在该终端中转到文件系统test文件夹,使用交叉编译工具对hello.c进行编译。
7、在minicom中,目录转到“/test”文件夹下使用./(你的程序名)运行程序;
8、使用“gdb你的程序名”运行程序,设置断点进行程序调试。
9、关闭minicom,终端中输入telnet,然后输入open192.168.0.11,等待出现“login:
”输入“root”,进入目标板系统;
10、目录转到“/test”文件夹下使用./(你的程序名)运行程序;
11、使用“gdb你的程序名”运行程序,设置断点进行程序调试。
四、实验结果:
(包括代码源码和运行结果)
1、源程序
#include
main()
{
inti;
printf(“hellolinux!
!
\n”);
for(i=1;i<=10;i++)
printf(“thisis%d\n”,i);
}
2、运行结果
wyxj@wyxj-cpu:
~$cd/home/nfs/test
wyxj@wyxj-cpu:
/home/nfs/test$ls
1290640686-3-3-2demohelloled.crtc.cwatchdog
129064068~adcgpiohello1mizi-pda.tar.gzrtcreadwatchdog.c
6-3-1-1adc.cgpio.chello.creadme.txtrtcread.c
6-3-3-1a.outheeeledrtcuart
wyxj@wyxj-cpu:
/home/nfs/test$gcchello.c-ohello
wyxj@wyxj-cpu:
/home/nfs/test$./hello
Hellolinux!
!
thisis1
thisis2
thisis3
thisis4
thisis5
thisis6
thisis7
thisis8
thisis9
thisis10
wyxj@wyxj-cpu:
/home/nfs/test$armv4l-unknown-linux-gcchello.c-ohelloarm
wyxj@wyxj-cpu:
/home/nfs/test$./helloarm
bash:
./helloarm:
无法执行二进制文件
(1)在Telnet下运行:
wyxj@wyxj-cpu:
~$telnet
telnet>open192.168.0.11
Trying192.168.0.11...
Connectedto192.168.0.11.
Escapecharacteris'^]'.
Linux2.4.18-rmk7-pxa1(192.168.0.11)(0)
192.168.0.11login:
root
BusyBoxv0.60.3(2002.05.13-08:
36+0000)Built-inshell(ash)
Enter'help'foralistofbuilt-incommands.
#./helloarm
./helloarm:
Nosuchfileordirectory
#cdtest
#./helloarm
Hellolinux!
!
thisis1
thisis2
thisis3
thisis4
thisis5
thisis6
thisis7
thisis8
thisis9
thisis10
(2)在minicom下运行:
wyxj@wyxj-cpu:
~$sudominicom
[sudo]passwordforwyxj:
Welcometominicom2.6.2
OPTIONS:
I18n
CompiledonFeb82013,06:
27:
51.
Port/dev/ttyUSB0,21:
22:
32
PressCTRL-AZforhelponspecialkeys
Waitingforentertostart'/bin/sh'(pid46,terminal/dev/console)
PleasepressEntertoactivatethisconsole.
Startingpid46,console/dev/console:
'/bin/sh'
BusyBoxv0.60.3(2002.05.13-08:
36+0000)Built-inshell(ash)
Enter'help'foralistofbuilt-incommands.
#ls
333.bmpmicrowindows-0.90sbin
binmmcsdsheryl.mp3
bombmnttest
devnotebooktmp
etcpig.mp3usr
hello.cprocvar
iceage.mpegqcop-msg-qpevcongui
libqcop-msg-quicklauncher
linuxrcqtembedded-root
#cdtest
#./helloarm
Hellolinux!
!
thisis1
thisis2
thisis3
thisis4
thisis5
thisis6
thisis7
thisis8
thisis9
thisis10
(3)超级终端下运行:
3、gdb调试
五、思考:
1、在使用交叉编译工具进行编译过程中,要生成可用gdb调试的程序,需要再编译过程中加什么参数?
答:
gcc-ghello.c-ohello要加上“-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)高级实验/开发系统》实验指导书的157~162页;
2、设置好以后,到D盘ARM文件夹下,找到ADS的工程文件,拖入到打开的ADS1.2中;
3、重启开发板,超级终端中显示等待状态,点击ADS1.2上的调试按钮,程序开始下装到开发板;ADS进入调试界面;
4、点击调试界面上的运行按钮,程序执行到主程序处,再次点击运行程序;
5、程序运行后,超级终端上显示运行提示,按提示操作键盘/LED、电机和AD转换.
四、实验结果:
(超级终端上的运行提示和实际运行结果)
1、运行程序:
(1)A/D程序:
读取采样值函数:
int ReadAdc(int ch)
{
int i;
static int prevCh=-1;
rADCCON = (1<<14)|(preScaler<<6)|(ch<<3);//设立通道
if (prevCh!
=ch)
{
rADCCON = (1<<14)|(preScaler<<6)|(ch<<3);//设立通道
for(i=0;i prevCh=ch; } rADCCON|=0x1;//开始 ADC while(rADCCON & 0x1);//检查 Enable_start 位是否变低 while(! (rADCCON & 0x8000));//检查 EC(End of Conversion) flag 是否为高 return ( (int)rADCDAT0 & 0x3ff ); } 在超级终端显示数字量: { a4=ReadAdc(4); a6=ReadAdc(6); Uart_Printf("AIN4: %0.2fAIN6: %0.2f \n",a4*3.3/1024,a6*3.3/1024); } (2)D/A程序: MAX504 的控制程序如下: void DA_Test() { int i; int SAVrGPACON,SAVrGPFCON,SAVrGPGCON; float v; SAVrGPACON=rGPACON;//寄存器状态保护 SAVrGPFCON=rGPFCON;//寄存器状态保护 SAVrGPGCON=rGPGCON;//寄存器状态保护 MAX504_CLEAR();//将 DAC 寄存器设为 0 Uart_Printf("[DAC Test]\nPlease observe the corresponding of output and input: \n"); for(i=0;i<1024;i+=8) { Max504_SetDA(i);//MAX504 读取数字量转化 v=((float)i)*Max504_FULL/1024.0f;//数字量显示 Uart_Printf("Current Digital Voltage Of Input=%1.2fV\r",v); Delay(2000);//数字量保持时间 } rGPACON=SAVrGPACON;//寄存器状态恢复 rGPFCON=SAVrGPFCON;//寄存器状态恢复 rGPGCON=SAVrGPGCON;//寄存器状态恢复 } MAX504 读取数字量转化函数: void Max504_SetDA(int value) { value<<=2;//左移两位 Delay (1); MAX504_ENABLE();//开启 MAX504 SendSPIData(value>>8);//发送高 8 位 SendSPIData(value);//发送低 8 位 MAX504_DISABLE();//关闭 MAX504 } (3)键盘/LED接口程序: 超级终端显示键值数组: unsigned char Scandata[4][4]={ {'F','E','D','C'}, {'B','A','9','8'}, {'7','6','5','4'}, {'3','2','1','0'}, }; 数码管码段显示值数组: unsigned char st[4][4]= { {0x8e,0x86,0xa1,0xc6}, {0x83,0x88,0x90,0x80}, {0xf8,0x82,0x92,0x99}, {0xb0,0xa4,0xf9,0xc0}, }; 扫描键值中断函数: do{ rGPEDAT = 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=Scandata[data][0]; rGPADAT=0x81e0;//GPA5,6,7,8 输出 1, 15 输出高 rSMG0= st[data][0];//数码管显示 rGPADAT=0x01e0;//GPA5,6,7,8 输出 1, 15 输出低 break; Uart_Printf("\r keyvalue is %c ",value);//超级终端显示 (5)直流、步进电机程序: 直流电机正转: rGPADAT=0xfff80; //GPA7 置 1,GPA4、5、6 置 0 Delay(50); //延时函数,控制低脉冲时间 rGPADAT=0xfff90; // GPA4、7 置 1,GPA5、6 置 0 Delay(30); //延时函数,控制高脉冲时间 直流电机反转: rGPADAT=0xfff20; // GPA5 置 1,GPA4、6、7 置 0 Delay(50); //延时函数,控制低脉冲时间 rGPADAT=0xfff60; // GPA5、6 置 1,GPA4、7 置 0 Delay(30); //延时函数,控制高脉冲时间 步进电机输出脉冲: rGPADAT=0xfff07; //0111,注意: 低电平有效 Delay(140); //延时函数,控制步进电机转速 rGPADAT=0xfff0b; //1011 Delay(140); rGPADAT=0xfff0d; //1101 Delay(140); rGPADAT=0xfff0e; //1110 Delay(140); 2、超级终端运行结果: 五、思考: 在ADS下载程序的过程中,目标板为什么不能进入到linux系统,目标板进入linux系统后,下装的程序能不能正常运行? 答: 因为内存冲突;能。 实验四多路复用实验 一、实验目的: 1、通过实验,掌握Linux操作系统下多路复用的概念; 2、学习Linux下多路复用函数的使用方法。 二、实验内容: 构建多路复用程序及其框架,整个流程如图所示: 三、实验步骤: 1、打开电脑上的虚拟机,加载Linux系统。 2、输入密码进入系统后,按ctrl+Alt+t打开终端; 3、进入到程序所在目录,对程序进行编译; 4、使用mknodin1p建立管道1; 5、使用mknodin2p建立管道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 #defineMAX_BUFFER_SIZE1024 #defineIN_FILES3 #defineTIME_DELAY60 #defineMAX(a,b)((a>b)? (a): (b)) intmain(void) { intfds[IN_FILES]; charbuf[MAX_BUFFER_SIZE]; inti,res,real_read,maxfd; //structtimevaltv; fd_setinset,tmp_inset; fds[0]=0; if((fds[1]=open("in1",O_RDONLY|O_NONBLOCK))<0) { printf("Openin1error\n"); return1; } if((fds[2]=open("in2",O_RDONLY|O_NONBLOCK))<0) { printf("Openin2error\n"); return1; } maxfd=MAX(MAX(fds[0],fds[1]),fds[2]); FD_ZERO(&inset); for(i=0;i { FD_SET(fds[i],&inset); } FD_SET(0,&inset); //tv.tv_sec=TIME_DELAY; //tv.tv_usec=0; while(FD_ISSET(fds[0],&inset)||FD_ISSET(fds[1],&inset)||FD_ISSET(fds[2],&inset)) { tmp_inset=inset; res=select(maxfd+1,&tmp_inset,NULL,NULL,0); switch(res) { case-1: { printf("Selecterror\n"); return1; } break; case0: /*Timeout*/ { printf("Timeout\n"); return1; } break; default: { for(i=0;i { if(FD_ISSET(fds[i],&tmp_inset)) { //memset(buf,0,MAX_BUFFER_SIZE); real_read=read(fds[i],buf,MAX_BUFFER_SIZE); if(real_read<0) { //if(errno! =EAGAIN) //{
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 应用 实验 指导 报告书