嵌入式系统及应用实验指导报告书.docx

上传人:b****9 文档编号:23389507 上传时间:2023-05-16 格式:DOCX 页数:37 大小:1.79MB
下载 相关 举报
嵌入式系统及应用实验指导报告书.docx_第1页
第1页 / 共37页
嵌入式系统及应用实验指导报告书.docx_第2页
第2页 / 共37页
嵌入式系统及应用实验指导报告书.docx_第3页
第3页 / 共37页
嵌入式系统及应用实验指导报告书.docx_第4页
第4页 / 共37页
嵌入式系统及应用实验指导报告书.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

嵌入式系统及应用实验指导报告书.docx

《嵌入式系统及应用实验指导报告书.docx》由会员分享,可在线阅读,更多相关《嵌入式系统及应用实验指导报告书.docx(37页珍藏版)》请在冰豆网上搜索。

嵌入式系统及应用实验指导报告书.docx

嵌入式系统及应用实验指导报告书

安徽工业大学

嵌入式系统与应用

实验报告册

学院:

电气与信息工程学院

专业:

测控技术与仪器

姓名:

学号:

实验一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模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1