嵌入式实验报告书

  嵌入式linux实验报告

                  

                     姓名:梅发同

                     学号:0942826124

        实验一:熟悉嵌入式系统开发环境

实验目的:

  1.熟悉嵌入式系统硬件实验平台

  2.掌握超级终端配置方法。

  3. 掌握嵌入式系统开发环境配置,ARM-Linux下NFS服务器的配置方法

  4. 掌握常用的 Linux下shell命令

实验设备及工具

硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。

软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境

实验内容 :

  (1)掌握嵌入式系统实验平台上的各类借接口的位置;

  (2)配置windows的超级终端,熟悉vivi的命令行,bootload、kernel、root和用户程序的介绍;

  (3)配置linux的终端,配置网络服、Ip地址,开发目录共享,挂载等。

实验结果分析

配置windows的超级终端

输入终端名称

选择COM1接口

设置COM1属性

打开虚拟机,启动linux

新建终端,输入minicom启动实验箱

设置ip并且在minicom下ping通主机

设置网络服务

取消防火墙

选中NFS

设置共享文件夹

在主机编译运行程序hello word

Hello.c 源代码如下:

在target上挂载主机开发目录上嵌入式程序到实验箱,运行Mount –t nfs 主机IP:/开发目录  /host

cd  /host

运行程序

交叉编译完成

实验心得:实验中应注意需要将编译的程序文件挂载到开发板,才能在ARM里找到我们需要运行的文件。还要注意区分gcc和armv4l-unknown-linux-gcc编译器的区别。只有用armv4l-unknown-linux-gcc编译的才能在开发板上运行。

实验二  嵌入式Linux程序设计

实验目的:

  1.掌握嵌入式Linux软件设计方法原理

  2.掌握Makefile文件设计方法。

  3. 熟悉Linux下静态库和共享库的设计  

实验设备及工具

硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。

软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境

实验内容 :

  (1)编写一个带输入、输出的由5个文件组成的嵌入式软件;

  (2)写好makefile文件,并上机调试;

  (3)用变量指明两种编译器。

实验结果分析:

1 在宿主机(PC)上建立用户开发目录,编写嵌入式程序文件,3个C文件+2个头文件。

2        编写Makefile文件,要求Makefile文件实现这5个文件的编译,有clean 和intall 选项,用变量选择86和arm编译器指明CC= gcc或CC= armv4l-unknown-linux-gcc

arm编译:

gcc编译:

3        编译程序,并下载到实验箱上执行

  mount –t nfs  主机ip:/开发目录   /host。

在主机里运行

挂载后在目标板里运行

实验心得

Makefile文件在实验中可以修改,比如将input.o:input.c这样重复的内容删掉。将重复使用的东西赋给一个变量,之后只要用$()引用这个变量即可。注意makefile里选择gcc编译还是用arm gcc编译。如果是在本机上运行,则使用gcc编译,若是挂载到开发板运行,则要用arm-unknown-linux-gcc编译,然后像第一次实验一样挂载运行,就可以成功完成。

实验三 驱动程序设计

实验目的

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

 2掌握使用模块方式进行驱动开发调试的过程

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

实验设备及工具

硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。

软件:PC机操作系统REDHAT LINUX 9.0 、MINICOM 、AMRLINUX开发环境

实验内容

1在 PC 机上编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。

实验结果分析

  驱动实验:

修改makefile文件

 

  修改驱动文件

  编译驱动,make

  生成可执行文件,测试该文件

 

实验心得:

实验时要将驱动程序copy出来,否则如果运行不当的话会破坏系统。

实验六嵌入式GUI

一、实验目的

1. 了解在 Linux 下安装Qt 的基本步骤;

2. 学会在Qt 环境在X11 平台下程序设计的方法;

二、实验内容

1. 在本机 Linux 下编译和使用Qt 例程;

2. 在本机环境下编译和运行一个程序并显示运行结果;

三、预备知识

1. 熟悉使用 C++语言程序设计;

2. 掌握Linux 下常用编辑器的使用;

3. 掌握Linux 下程序编译;

4. 熟悉Qt 程序设计;

四、实验室设备和工具

硬件:UP-ARM2410CL、PC 机Pentumn500 以上, 硬盘80G 以上。

软件:PC 机操作系统RHEL4 +超级终端(或X-shell) + ARM-Linux 开发环境

qt-x11-opensource-src-4.4.0.tar.gz arm-linux-gcc-3.4.6-glibc-2.3.6

五、实验步骤

编译 QT-X11 环境

在Trolltech 公司的网站上可以下载该公司所提供的Qt/Embedded 的免费版本,在安装

产品光盘以后,本次实验目录下已有要下载的文件,在/arm2410cl/gui/src 下。在做实验

前把本次实验用到的qt-x11-opensource-src-4.4.0.tar.gz 文件拷贝到

/home/sprife/qt4/for_pc 目录下。

实验具体目录可以自行定义,拷贝库文件:

#cd /home/

#mkdir sprife

#cd sprife

#mkdir qt4

#cd qt4

#mkdir for_pc

#cd for_pc

#cp /arm2410cl/gui/Qt/src/qt-x11-opensource-src-4.4.0.tar.gz ./

Qt 本机环境的搭建需要以下几步:

#tar xzvf qt-x11-opensource-src-4.4.0.tar.gz

#cd qt-x11-opensource-src-4.4.0

#./configure -prefix /usr/local/Trolltech/Qt-x11-4.4.0 //这里自行新建目

录Trolltech/Qt-x11-4.4.0

出现安装提示时选择yes 注意大小写

#gmake

#gmake install

./configure 是对Qt 进行配置,它包括很多选项,例如可以通过添加“ -no-opengl”等,

上面命令中的-prefix 参数指定Qt-x11 环境的安装目录。如果想要进一步了解可以通过键

入 ./configure --help 来获得更多的帮助信息。

gmake 与gmake insall 命令分别是编译与安装QT 环境

如果上面各步都能够成功的编译通过,下面就可以通过运行Qt/Embedded 自带的demo

来查看运行结果。

#cd /home/sprife/qt4/for_pc/qt-x11-opensource-src-4.4.0/examples/widgets/wiggly/

#./wiggle

将上面的步骤完成后,我们就已经建立好了在本机上开发Qt 应用程序的环境,下面我

们通过编写一个“Hello”的程序来了解Qt 程序设计。

Hello, Qt!

我们以一个非常简单的 Qt 程序开始Qt 的学习。我们首先一行行的分析代码,然后我们

将会看到怎样编译和运行这个程序。

1 #include <QApplication>

2 #include <QLabel>

3 int main (int argc, char *argv [])

4 {

5 QApplication app (argc, argv);

6 QLabel *label = new QLabel ("Hello Qt!");

7 label->show ();

8 return app. exec ();

9 }

第 1 行和第2 行包含了两个类的定义:QApplication 和QLabel。对于每一个Qt 的类,

都会有一个同名的头文件,头文件里包含了这个类的定义。因此,你如果在程序中使用了

一个类的对象,那么在程序中就必须包括这个头文件。

第3 行是程序的入口。几乎在使用Qt 的所有情况下,main()函数只需要在把控制权转

交给Qt 库之前执行一些初始化,然后Qt 库通过事件来向程序告知用户的行为。argc 是命

令行变量的数量,argv 是命令行变量的数组。这是一个C/C++特征。它不是Qt 专有的,无

论如何Qt 需要处理这些变量

第5 行定义了一个QApplication 对象App。QApplication 管理了各种各样的应用程序

的广泛资源,比如默认的字体和光标。App 的创建需要argc 和argv 是因为Qt 支持一些自

己的命令行参数。在每一个使用Qt 的应用程序中都必须使用一个QApplication 对象,并

且在任何Qt 的窗口系统部件被使用之前创建此对象是必须的。App 在这里被创建并且处理

后面的命令行变量(比如在X 窗口下的-display)。请注意,所有被Qt 识别的命令行参数

都会从argv 中被移除(并且argc 也因此而减少)。

第6 行创建了一个QLabel 窗口部件(widget),用来显示“Hello,Qt!”。在Qt 和Unix

的术语中,一个窗口部件就是用户界面中一个可见的元素,它相当于Windows 术语中的“容

器”加上“控制器”。按钮(Button)、菜单(menu)、滚动条(scroll bars)和框架(frame)

都是窗口部件的例子。窗口部件可以包含其它的窗口部件。例如,一个应用程序界面通常

就是一个包含了QMenuBar,一些QToolBar,一个QStatusBar 和其它的一些部件的窗口。绝

大多数应用程序使用一个QMainWindow 或者一个QDialog 作为程序界面,但是Qt 允许任何

窗口部件成为窗口。在这个例子中,QLabel 窗口部件就是作为应用程序主窗口的。

第7 行使我们创建的QLabel 可见。当窗口部件被创建的时候,它总是隐藏的,必须调

用show()来使它可见。通过这个特点我们可以在显示这些窗口部件之前定制它们,这样就

不会出现闪烁的情况。

第8 行就是main()将控制权交给Qt。在这里,程序进入了事件循环。事件循环是一种

stand-by 的模式,程序会等待用户的动作(比如按下鼠标或者是键盘)。用户的动作将会产

生程序可以做出反应的事件(也被称为“消息”)。程序对这些事件的反应通常是执行一个

或几个函数。

为了简单起见,我们没有在main()函数的结尾处调用delete 来删除QLabel 对象。这

种内存泄露是无害的,因为像这样的小程序,在结束时操作系统将会释放程序占用的内存

堆。

下面我们来编译这个程序。建立一个名为hello 的目录,在目录下建立一个名为

hello.cpp 的c++源文件,将上面的代码写入文件中。

#cd /home/sprife/

#mkdir hello

#vi hello.c

编辑hello.c 源文件,填入上述9 行代码

编译程序

#/home/sprife/qt4/for_pc/qt-x11-opensource-src-4.4.0/bin/qmake -project

#/home/sprife/qt4/for_pc/qt-x11-opensource-src-4.4.0/bin/qmake

#make

运行程序

#./hello

Qt也支持XML。我们可以把程序的第6 行替换成下面的语句:

QLabel *label = new QLabel ("<h2><i>Hello</i> " "<font color=red>Qt! </font></h2>");

重新编译程序,我们发现界面拥有了简单的 HTML 风格。

 

第二篇:嵌入式原理与设计实验报告书

嵌入式原理与设计实验报告书

1 实验名称:IIC的应用

2实验目的:熟悉通过IIC通信协议,单品机利用这通信协议对EPROM进行读和写!

3 实验步骤:

// 写该程序的头文件

#define uchar unsigned char

#define uint unsigned int

sbit scl=P1^5; // 单片机与EPROM的共用时钟线 sbit sda=P3^6; // 单片机与EPROM的共用数据线

void delay_10us() // 10个的单片机的指令周期

{

_nop_();_nop_();_nop_();_nop_();

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

}

void start() // IIC通信协议初始化

{

sda=1;

scl=1;

delay_10us();

sda=0;

delay_10us();

scl=0;

}

void stop() //关闭读和写

{

sda=0;

scl=1;

delay_10us();

sda=0;

delay_10us();

}

void respond(uchar x) //读后或写后的返回 {

sda=(x)& 0x01;

delay_10us();

scl=1;

delay_10us();

scl=0;

}

uchar iic_write_byte(uchar wdata) //往EPROM写进一个字节

{

uchar bit_cnt;

for(bit_cnt=0;bit_cnt<8;bit_cnt++)

{

if(wdata & 0x80) sda=1;

else sda=0;

wdata<<=1;

delay_10us();

scl=1;

delay_10us();

scl=0;

}

delay_10us();

sda=1;

scl=1;

delay_10us();

if(sda==1) bit_cnt=0;

else bit_cnt=1;

scl=0;

return bit_cnt;

}

uchar iic_read_byte(void) // 往EPROM读出一个字节{

uchar bit_cnt,rdata;

sda=1;

for(bit_cnt=0;bit_cnt<8;bit_cnt++)

{

scl=0;

delay_10us();

scl=1;

delay_10us();

rdata<<=1;

if(sda==1) rdata|=0x01;

delay_10us();

}

scl=0;

return rdata;

}

uchar iic_read_str(uchar sla,uchar suba,uchar *s,uchar len) 往EPROM读出一组字符 //

{

uchar i;

start();

if(iic_write_byte(sla)==0) return 0;

if(iic_write_byte(suba)==0) return 0; start();

if(iic_write_byte(sla|0x01)==0) return 0; for(i=0;i<len-1;i++)

{

*s++=iic_read_byte();

respond(0);

}

*s=iic_read_byte();

respond(1);

stop();

return 1;

}

uchar iic_write_str(uchar sla,uchar suba,uchar // 往EPROM写进一组字符

{

uchar i;

start();

if(iic_write_byte(sla)==0)

return 0;

if(iic_write_byte(suba)==0)

return 0;

for(i=0;i<len;i++)

{

if(iic_write_byte(*s++)==0) *s,uchar len)

return 0;

}

stop();

return 1;

}

//程序的源文件 #include<reg52.h>

#include<intrins.h>

#include<absacc.h>

#include"ming.h"

uchar code table[10]

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit dg=P3^2;

uchar symptom;

a[1]={0}; // 定义数组来记录数字的大小 void delay_ms(uint z) // 延时

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

void initial() // 外部中断0的初始化

{

EA=1;

EX0=1; =

IT0=1;

}

void breaing() interrupt 0 // 外部中断0的处理 {

EX0=0;

delay_ms(10);

if(dg==0)

symptom=1;

delay_ms(100);

EX0=1;

}

void main(void) // 主函数

{

iic_read_str(0xa0,0,a,1);

initial();

while(1)

{

if(symptom==1)

{

symptom=0;

a[0]++;

if(a[0]==100) a[0]=0;

iic_write_str(0xa0,0,a,1);

}

P2=0;

P0=table[a[0]/10];

delay_ms(1);

P2=1;

P0=table[a[0]%10];

delay_ms(1);

}

}

4 调试

在对字符的存储过程中,要有明确的指针(地址)。单片机才能对其进行读和写的操作。

比如在源文件的主函数定义 *p(对写进行记录),*s(对读进行记录)—— 这样的方法的不行的!在只有定义的存放的数据的地址才能对他进行操作!比如在源文件定义了啊a[1]={0}

5心得体会

通过该实验我明白了单片机是如何利用iic协议来对EPROM进行读写。同时,在编程过程中的一些不好的习惯得以改正!

相关推荐