合工大嵌入式系统实验报告.docx

上传人:b****5 文档编号:4172652 上传时间:2022-11-28 格式:DOCX 页数:24 大小:1.23MB
下载 相关 举报
合工大嵌入式系统实验报告.docx_第1页
第1页 / 共24页
合工大嵌入式系统实验报告.docx_第2页
第2页 / 共24页
合工大嵌入式系统实验报告.docx_第3页
第3页 / 共24页
合工大嵌入式系统实验报告.docx_第4页
第4页 / 共24页
合工大嵌入式系统实验报告.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

合工大嵌入式系统实验报告.docx

《合工大嵌入式系统实验报告.docx》由会员分享,可在线阅读,更多相关《合工大嵌入式系统实验报告.docx(24页珍藏版)》请在冰豆网上搜索。

合工大嵌入式系统实验报告.docx

合工大嵌入式系统实验报告

计算机和信息学院

《嵌入式系统》

实验报告

学生姓名:

学号:

专业班级:

2014年6月20日

实验一

(1):

熟悉Linux开发环境

一、实验目的

熟悉Linux开发环境,学会基于Mini6410的Linux开发环境的配置和使用。

使用Linux的arm-linux-gcc编译,minicom串口方式下载调试

二、实验内容

本次实验使用Fedora9.0操作系统环境,安装ARM-Linux的开发库及编译器。

创建一个新目录,并在其中编写hello.c和Makefile文件。

学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。

下载已经编译好的文件到目标开发板上运行。

三、实验设备及工具(包括软件调试工具)

硬件:

Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。

软件:

PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境

四、实验步骤

1 、建立工作目录  

[root@zxt smile]#   mkdir  hello 

[root@zxt smile]#  cd  hello 

2 、编写程序源代码  

在 Linux 下的文本编辑器有许多,常用的是 vi 和 Xwindow 界面下的 gedit 等,开发过程中推荐使用 vi。

 Kdevelope、anjuta 软件的界面和 vc6.0 类似,使用它们对于熟悉 windows 环境下开发的用户更容易上手。

  

实际的 hello.c 源代码较简单,如下:

    

  #include   

main()  {  

        printf(“hello world \n”);  

我们可以是用下面的命令来编写 hello.c 的源代码,进入 hello 目录使用 vi 命令来编辑代码:

  

[root@zxt hello]#  vi  hello.c  

按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按 Esc 键进入命令状态,再用命令“:

wq”保存并退出。

这样我们便在当前目录下建立了一个名为 hello.c的文件。

3、编写Makefile

要使上面的 hello.c 程序能够运行,我们必须要编写一个 Makefile 文件,Makefile 文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。

使用它带来的好处就是自动编译,只需要敲一个“make”命令整个工程就可以实现自动编译,本次实验只有一个文件,它还不能体现出使用 Makefile 的优越性,但当工程比较大文件比较多时,不使用 Makefile 几乎是不可能的。

本次实验用到的 Makefile 文件如下:

  

CC= armv4l-unknown-linux-gcc 

EXEC = hello

OBJS = hello.o   

CFLAGS +=    

LDFLAGS+= –static

all:

 $(EXEC) 

$(EXEC):

 $(OBJS) 

$(CC) $(LDFLAGS) –o $@ $(OBJS) 

clean:

 

-rm -f $(EXEC) *.elf *.gdb *.o

4、编译使用程序

在上面的步骤完成后,我们就可以在hello目录下运行“make”来编译我们的程序了。

如果进行了修改,重新编译则运行:

5、下载调试

1、进入root

终端输入suroot,再输入密码即可。

2、终端输入minicom

出现上面的界面,点击回车,出现下图

此时才能进行正常的下载。

3、ctrl+a,再点击s,出现下图

选择第一个zmodem,回车。

出现下图

回车,出现下图

输入绝对路径,出现下图

回车,出现下图

从上图可以看出,文件未被下载,原因是mini6410板子已经有了hello可执行文件(之前下载的),若需要下载,则需要删除之前的hello文件,rmhello即可。

删除之后,继续下载,出现下图

下载成功。

4、运行程序

在电脑终端输入./hello,或者在mini6410终端输入hello都可。

五、思考题

1.Makefile是如何工作的?

其中的宏定义分别是什么意思?

Makefile定义了一系列规则,指明了哪些文件需要编译,哪些文件需要先编译等复杂命令。

终端中只要在工作目录下输入make即可编译,输入makeclean则清除编译。

makefile是一个文本文件,用于描述程序源代码之间以及程序可执行代码和源代码之间的依赖关系。

关于宏定义,简单点说就是文本替换。

为了方便使用不同的编译器或者编译环境以及硬件环境,一些复杂的软件使用了大量的宏定义来代替诸如“gcc”这样的最基本的东西。

CC:

指明编译器;EXEC:

指明编译后生成的可执行文件名称;OBJS:

目标文件列表;CFLAGES:

编译参数;LDFLAGES:

链接参数;All:

编译主入口;clean:

清除编译。

实验一

(2):

多线程使用程序设计

一、实验目的

1.了解多线程程序设计的基本原理

2.学习pthread库函数的使用。

二、实验内容

1、读懂pthread.c的源代码,熟悉几个重要的pthread库函数的使用。

掌握共享锁和信号量的使用方法。

2、运行make产生pthread程序,使用minicom串口方式连接开发主机进行运行实验。

三、实验设备及工具

硬件:

Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。

软件:

PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境

四、实验步骤

1.使用vi编辑器或其他编辑器阅读理解源代码。

2.运行make产生pthread可执行文件

3.切换到minicom终端窗口。

可能出现

拔插USB数次。

4.运行pthread,观察运行结果的正确性。

5.修改一些参数,再次运行调试,加深对多线程的理解。

实验二

(1):

A/D接口实验

一、实验目的

了解在linux环境下对S3C6410芯片的8通道10位A/D的操作和控制。

二、实验内容

学习A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。

阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关接口。

利用外部模拟信号编程实现ARM循环采集AIN0通道,并且在超级终端上显示。

三、实验步骤

1、阅读理解源码

使用vi编辑器或其他编辑器阅读理解源代码。

2、编译使用程序

运行makeclean和make产生ad可执行文件

3、下载调试

换到minicom终端窗口。

我们可以通过调节开发板上的W1可调电阻,可以看到不断变化的转换结果。

四、思考题

1.逐次逼近型的A/D转换器原理是什么?

答:

逐次逼近型的A/D转换器逐次逼近型(也称逐位比较式)的A/D转换器,使用比积分型更为广泛,其原理框图如图2.3.1所示,主要由逐次逼近寄存器SAR、D/A转换器、比较器以及时序和控制逻辑等部分组成。

它的实质是逐次把设定的SAR寄存器中的数字量经D/A转换后得到电压Vc和待转换模拟电压V。

进行比较。

2.A/D转换的重要指标包括哪些?

答:

分辨率、精度(绝对误差,相对误差,转换时间,工作温度范围)

3.ARM的A/D功能的相关寄存器有哪几个,对应的地址是什么?

2、ARM的A/D功能的相关寄存器有哪几个,对应的地址是什么?

答:

寄存器名地址

ADC控制寄存器(ADCCON)0X58000000

ADC触摸屏控制寄存器(ADCTSC)0X58000004

ADC启动延时寄存器(ADCDLY)0X58000008

ADCDAT00X580000C

ADC转换数据寄存器(ADCCON)

ADCDAT10X58000010

4.如何启动ARM开始转换A/D,有几种方式?

转换开始时ARM是如何知道转换哪路通道的?

如何判断转换结束?

答:

方式一:

软件启动 

1. 定义和A/D转换相关的寄存器;

2. 定义和A/D转换相关的寄存器初始化; 

3. RADCCON=0X1。

            

方式二:

硬件启动 

1. 复位A/D转换器; 

2. 外接用高电平触发ADCCON[0].转换开始时ARM时知道转换哪条通道的方式:

通过对ADCCON[5:

3]的未赋值来选择通道。

实验二

(2):

LED驱动程序以及测试使用程序

一、实验目的

1、学习在LINUX下进行驱动设计的原理。

2、了解LED驱动程序和使用测试程序的设计。

二、实验内容

1、读懂LED驱动程序,熟悉驱动程序中调用的几个函数。

2、设计LED测试使用程序,控制LED灯的亮或灭。

四、实验步骤

1、阅读理解源码

进入/code/04_leds目录,使用vi编辑器或其他编辑器阅读理解源代码。

2、编译使用程序

运行make产生ad可执行文件

[root@zxt/]#cd/arm6410s/code/04_leds/

[root@zxt03_adc]#make

Arm-linux-gcc–Wall-02led.c–oled

3、下载调试

在测试之前请先关闭led-player,即打开mini6410开发板上友善之臂选项中的“LEDs”,在弹出的界面上单击按钮“stoptest-player”,关闭led-player。

换到minicom终端窗口,使用NFSmount开发主机的/arm2410s到/host目录。

[root@zxtroot]#minicom

[/mnt/yaffs]mount-tnfs-onolock192.168.0.56:

/arm6410s

/host

[/mnt/yaffs]cd/host/code/04_leds/

[/host/code/04_leds/]./led01

[/host/code/04_leds/]./led11

[/host/code/04_leds/]./led21

[/host/code/04_leds/]./led31

[/host/code/04_leds/]./led00

五、实验结果如下图:

六、实验感想

本次实验让我进一步学习到LINUX下进行驱动设计的原理,了解了LED驱动程序和使用测试程序的设计;读懂LED驱动程序,熟悉驱动程序中调用的几个函数,设计LED测试使用程序,控制LED灯的亮或灭;掌握在Linux集成开发环境中编写和调试程序的基本过程,了解ARM芯片的基本结构和Linux内核中关于设备控制的基本原理。

联系了课堂内容,加深了对Linux系统和嵌入式课程的兴趣。

实验三:

I2C-EEPROM编程实验

一、实验目的

1.了解I2C总线的基本原理

2.理解如何通过I2C总线对EEPROM数据的读写。

二、实验内容

读懂eeprog.c的源代码,熟悉几个重要的函数的使用。

三、实验设备及工具(包括软件调试工具)

硬件:

Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。

软件:

PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境

四、实验步骤

1、阅读理解源代码

使用vi编辑器或其他编辑器阅读理解源代码。

2、编译使用程序

运行make产生ad可执行文件

3、下载调试

换到minicom终端窗口,运行:

输入./i2ctest–r则读。

输入./i2ctest–w则写。

现象如下图所示。

五、思考题

1、I2C总线的优点是什么?

答:

a)硬件简单,资源消耗少,只有时钟和数据线。

b)时钟同步和仲裁的实现原理也很简单,以开漏/集电极以线路逻辑简单实现。

c)协议设计精巧、易用、灵活。

数据,地址,指令都可传。

d)使用广泛。

2、I2C总线的启动信号和结束信号有什么特点、。

答:

a)启动信号。

   

  在时钟线SCL保持高电平期间,数据线SDA上的电平被拉低(即负跳变),定义为I2C总线总线的启动信号,它标志着一次数据传输的开始。

启动信号是一种电平跳变时序信号,而不是一个电平信号。

启动信号是由主控器主动建立的,在建立该信号之前I2C总线必须处于空闲状态。

b)停止信号。

   

  在时钟线SCL保持高电平期间,数据线SDA被释放,使得SDA返回高电平(即正跳变),称为I2C总线的停止信号,它标志着一次数据传输的终止。

 停止信号也是一种电平跳变时序信号,而不是一个电平信号,停止信号也是由主控器主动建立的,建立该信号之后,I2C总线将返回空闲状态。

实验四:

串行端口程序设计

一、实验目的

1、了解在linux环境下串行程序设计的基本方法。

2、掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。

3、学习使用多线程来完成串口的收发处理。

二、实验内容

读懂程序源代码,学习终端I/O函数的使用方法,学习将多线程编程使用到

串口的接收和发送程序设计中。

三、预备知识

1、有C语言基础。

2、掌握在Linux下常用编辑器的使用。

3、掌握Makefile的编写和使用。

4、掌握Linux下的程序编译和交叉编译过程

三、实验原理

异步串行I/O方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。

数据的各不同位可以分时使用同一传输通道,因此串行I/O可以减少信号连线,最少用一对线即可进行。

接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。

为了恢复发送的信息,双方必须协调工作。

在微型计算机中大量使用异步串行I/O方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。

但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。

图2.2.1串行通信字符格式

图2.2.1给出异步串行通信中一个字符的传送格式。

开始前,线路处于空闲状态,送出连续“1”。

传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。

每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。

后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。

也可以约定不要奇偶校验,这样就取消奇偶校验位。

最后是表示停止位的“1”信号,这个停止位可以约定持续1位、1.5位或2位的时间宽度。

至此一个字符传送完毕,线路又进入空闲,持续为“1”。

经过一段随机的时间后,下一个字符开始传送才又发出起始位。

每一个数据位的宽度等于传送波特率的倒数。

微机异步串行通信中,常用的波特率为50,95,110,150,300,600,1200,2400,4800,9600等。

接收方按约定的格式接收数据,并进行检查,可以查出以下三种错误:

●奇偶错:

在约定奇偶检查的情况下,接收到的字符奇偶状态和约定不符。

●帧格式错:

一个字符从起始位到停止位的总位数不对。

●溢出错:

若先接收的字符尚未被微机读取,后面的字符又传送过来,则产生溢出错。

每一种错误都会给出相应的出错信息,提示用户处理。

一般串口调试都使用空的MODEM连接电缆,其连接方式如下:

图2.2.2实用RS-232C通讯连线

四、实验步骤

1、阅读理解源码

使用vi编辑器或其他编辑器阅读理解源代码。

2、编译使用程序

运行make产生term可执行文件

3、下载调试

切换到minicom终端窗口,运行term,观察运行结果的正确性。

由于内核已经将串口1作为终端控制台,所以可以看到term发出的数据,却无法看到开发主机发来的数据,可以使用另外一台主机连接串口2进行收发测试。

实验五:

QT编程使用

一、实验目的

熟悉QT编程的完整步骤,理解信号和槽机制;学会使用designer图形界面

设计工具。

二、实验内容

本实验将介绍如何创建一个简单的Qtopia2.2.0程序,并将其集成到Qtopia2.2.0中,我们将以一个简单的计算器作为例子,演示开发一个Qtopia2.2.0使用程序的完整步骤,包括使用designer设计图形程序界面、交叉编译arm版本的程序等等,为了简单,本示例所编写的计算器只提供加法功能。

三、实验设备及工具(包括软件调试工具)

硬件:

Mini6410嵌入式实验平台、PC机Pentium500以上,硬盘10G以上。

软件:

PC机操作系统Fedora9+MINICOM+ARM-LINUX开发环境

四、实验原理

什么是Qt

Qt是一个跨平台的C++图形用户界面库,由挪威TrollTech公司于1995年底出品,并于2008年6月17日被NOKIA公司收购,以增强NOKIA公司在跨平台软件研发方面的实力,更名为QtSoftware。

基本上,Qt同XWindow上的Motif,Openwin,GTK等图形界面库和Windows平台上的MFC,OWL,VCL,ATL是同类型的东西,但是Qt具有下列优点:

1.优良的跨平台特性:

使用Qt开发的软件,相同的代码可以在任何支持的平台上编译和运行,而不需要修改(或修改极少)源代码。

会自动依平台的不同,表现平台特有的图形界面风格。

•Linux/X11:

用于XWindowSystem(如Solaris、AIX、HP-UX、Linux、BSD)。

支持KDevelop和EclipseIDE集成。

•Mac:

用于AppleMacOSX。

基于Cocoa框架。

支持UniversalBinary。

支持以Xcode编辑、编译和测试。

•Windows:

用于MicrosoftWindows。

支持VisualStudio集成。

•EmbeddedLinux:

用于嵌入式Linux。

可以通过编译移除不常使用的组件和功能。

通过自己的视窗系统QWS,不需依赖XWindowSystem,直接写入Linux帧缓冲。

可以减少存储器消耗。

并提供虚拟帧缓冲QVFb,方便在桌面系统上进行嵌入式测试。

•WindowsCE/Mobile:

用于WindowsCE。

•Symbian:

用于Symbianplatform。

•Meego:

用于Meego。

2.面向对象

Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。

Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。

3.丰富的API

经过多年发展,Qt不但拥有了完善的C++图形库,而且近年来的版本逐渐集成了数据库、OpenGL库、多媒体库、网络、脚本库、XML库、WebKit库等等,其核心库也加入了进程间通信、多线程等模块,极大的丰富了Qt开发大规模复杂跨平台使用程序的能力,真正意义上实现了其研发宗旨“CodeLess;CreateMore;DeployAnywhere.”。

五、实验步骤

下面的章节将一步步演示如何构造这个程序,在这开始之前,我们先创建一个qtopia2_apps目录,用于专门存放我们自已编写的qtopia2.2.0程序,在Linux终端中键入以下命令创建该目录:

#mkdir-p/opt/qtopia2_apps

然后在qtopia2_apps目录下创建mycalc作为本示例的项目目录,在终端上输入如下命令:

#cd/opt/qtopia2_apps

#mkdirmycalc

1、使用designer工具设计图形界面

Qt/Qtopia都带有designer工具,可以设计所见即所得的图形界面,我们现在就使用designer工具来设计mycalc程序的主界面,主界面将保存成名为main_form_base.ui的ui文件,输入如下命令

启动designer工具,并以ui文件名作为参数:

#cdmycalc

s#/opt/FriendlyARM/arm-qtopia/qtopia-2.2.0-FriendlyARM/qt2/bin/designermain_form_base.ui

在弹出的NewForm界面中,选择“Widget”然后点击”OK“,我们将创建一个基于QWidget的窗体而不是QDialog或其它:

这时,将会显示窗口的编辑画面,我们需要修改窗口的大小,使得3.5寸的屏幕也能完整显示我们的程序,并且需要修改窗口标题。

1.1在窗体上放置控件

修改完窗口的属性值后,接下来我们就要在窗口上放置控件了,往窗口上放置控件的方法是:

在工具栏上点击要放置的控件,再在窗口空白处点击一下即可。

根据我们最初的设计思路,我们需要在窗口上放置以下控件:

1)二个Button(按钮):

一个是“=”,用于点击时计算结果,一个是“Close”,用于退出程序。

2)三个LineEdit(单行文本框):

两个用于输入要执行加法运算的数字,另一个用于显示计算结果。

3)一个Label(文本标签):

用于显示加号。

请参考下图放置上面列出的控件,控件的工具栏图标在下图中我已经以红色方框标记出来了:

放置完控件之后,我们将Label文本标签上的文字改为“+”,修改方法是双击Label文本标签,然后在弹出的编辑框上输入“+”即可;用同样的方法修改两个按钮上的文字,将两个按钮上的文字一个修改成“=”,一个修改成”Close”。

修改完控件上文字之后,按照上图的位置摆放控件,在摆放之前,需要适当地调整控件的大小,调整控件大小的方法是,先单击要调整的控件,然后在控件的边框上的小黑框上单击拖动即可。

1.2修改控件属性

我们还需要设置一些控件的属性,主要是修改文本框的实例名称,这样在代码里面可以方便引用它们,修改方法是点击左边的文本框控件,在右边的属性窗口进行修改,请按下图的指示修改三个文本编辑控件的属性,三个文本框的实例名称分别被修改成m_x,m_y和m_result。

1.3为按钮添加点击事件的处理

最后还要给按钮添加点击事件的处理,我们首先需要新建两个slot函数,一个用于处理“=”按钮的点击事件,一个用于处理Close按钮的点击事件,新建slot的步骤如下:

1)点击”Edit”菜单,选择“Slots”,将弹出如下所示的slot编辑对话框。

2)在上面的对话框中,点击”NewSlot“按钮,然后在Slot编辑框中输入“calcButtonClicked()”。

3)然后再点”NewSlot“按钮,并在Slot编辑框中输入“closeButtonClicked()”,如下图所示,最后点击OK

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

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

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