嵌入式系统原理与应用设计实验指导书Word格式.docx
- 文档编号:21028102
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:102
- 大小:2.57MB
嵌入式系统原理与应用设计实验指导书Word格式.docx
《嵌入式系统原理与应用设计实验指导书Word格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统原理与应用设计实验指导书Word格式.docx(102页珍藏版)》请在冰豆网上搜索。
⑵新建一个通信终端:
区号、电话号码等信息随意输入,出现如下所示对话框时,为所建超级终端取名为arm,可以为其选一个图标.单击“确定”按钮.
⑶ARM开发平台实际连接的PC机串口选择COM1.端口设置:
波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。
⑷完成新建超级终端的设置以后,可以选择超级终端文件菜单中的另存为,把设置好的超级终端保存在桌面上,以备后用.用串口线将PC机串口和平台UART0正确连接后,就可以在超级终端上看到程序输出的信息了.
⑸启动实验箱电源
打开电源开关,系统会由VIVI开始引导。
正常启动时会显示启动信息到“PressReturntostarttheLINUXnow,anyotherkeyforvivi"
,不进行任何操作等待30S或按回车则启动进入linux系统,按除回车键外的其它键则进入vivi控制台,如图5。
3。
1.在这里输入“boot"
,进入LINUX系统。
⑹是在应用程序目录下,可以通过“ls”查看,如图
演示程序都是经过编译后生成的二进制文件,用来测试开发板端口和演示开发板功能
⑺演示内容1-播放视频:
[/mnt/yaffs/iccard]cd/mnt/yaffs/mplayer/
-—带“/"
表示绝对路径,但必须从/mnt开始
[/mnt/yaffs/mplayer]ls
mplayermplayer2test。
avi
[/mnt/yaffs/mplayer]mplayertest。
avi――看到原始电影
[/mnt/yaffs/mplayer]mplayer2test.avi――看到全频电影
⑻根据说明书,实验直流电机工作方式。
电机的演示:
打开电机红色按钮开关
(1)直流电机:
[/mnt/yaffs]cdmotor/
[/mnt/yaffs/motor]ls
DCSTEP
[/mnt/yaffs/motor]cdDC/――注意大小写
[/mnt/yaffs/motor/DC]ls
dc-motor.odcm_main
[/mnt/yaffs/motor/DC]insmoddc-motor。
o
Usingdc-motor.os3c2410_dcm_init(159):
s3c2410—dc-motor
deviceinitialized
[/mnt/yaffs/motor/DC]。
/dcm_main――启动直流电机
(2)步进电机:
[/mnt/yaffs/motor]cdSTEP/
[/mnt/yaffs/motor/STEP]ls
exio.ostepmotor
[/mnt/yaffs/motor/STEP]insmodexio。
Usingexio.o
[/mnt/yaffs/motor/STEP]./stepmotor――启动步进电机
(9)播放mp3:
[/mnt/yaffs]cdsound/
[/mnt/yaffs/sound]ls
1.wavmadplayttdl.mp3wavplaywavrec
[/mnt/yaffs/sound]madplayttdl。
mp3
MPEGAudioDecoder0。
14。
2(beta)—Copyright(C)2000—2001
RobertLeslie
5、实验思考
1)实验过程中目标机、主机、终端机各指什么设备。
2)终端显示结果的程序在哪个设备中执行
实验二交叉编译环境设置与终端调试
1.实验目的:
熟悉Linux开发环境,学会基于S3C2410的Linux开发环境的配置和使用,使用Linux的armv4l—unknown—linuxgcc编译,使用基于NFS方式的下载调试,了解嵌入式开发的基本过程。
2.实验仪器
硬件:
博创科技嵌入式教学实验箱UP—NETARM2410—S、PC机Pentium500以上,硬盘10G以上的电脑。
软件:
WINDOWSXP操作系统、LINUX9.0操作系统、MINICOM终端调试器、ARM-LINUX开发环境.
3、实验原理
绝大多数Linux软件开发都是以native方式进行的,即本机(HOST)开发、调试,本机运行的方式。
这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板子上系统)运行开发工具和调试工具.通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。
交叉编译调试环境建立在宿主机(即一台PC机)上,对应的开发板叫做目标板。
运行Linux的PC【宿主机】开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行),然后把可执行文件下载到目标机上运行。
调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器提供的支持作出选择。
宿主机和目标板的处理器一般不相同,宿主机为Intel处理器,而目标板如UP—NetARM2410—S开发板为三星S3c2410。
GNU编译器提供这样的功能,在编译器编译时可以选择开发所需的宿主机和目标
嵌入式linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过以下过程:
建立开发环境:
操作系统一般使用REDHAT-LINUX,版本7到9都可以,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(比如arm—linux-gcc、arm—uclibc-gcc),或者安装产品厂家提供的交叉编译器。
配置开发主机:
配置MINICOM,一般参数为波特率115200,数据位8位,停止位1,无奇偶校验,软硬件控制流设为无.在WINDOWS下的超级终端的配置也是这样。
MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;
配置网络,主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM—BOOT、RED—BOOT等,根据自己具体芯片进行移植修改.有些芯片没有内置引导装载程序,比如三星的ARM7、ARM9系列芯片,这样就需要编写烧写开发板上flash的烧写程序,网络上有免费下载的WINDOWS下通过JTAG并口简易仿真器烧写ARM外围flash芯片的程序.也有LINUX下公开源代码的J—FLASH程序.如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。
这是让系统可以正常运行的第一步.如果你购买了厂家的仿真器当然比较容易烧写flash了,但是其中的核心技术是无法了解的。
这对于需要迅速开发应用的人来说可以极大地提高开发速度。
下载别人已经移植好的LINUX操作系统,如UCLINUX、ARM-LINUX、PPC-LINUX等,如果有专门针对你所使用的CPU移植好的LINUX操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,对于UCLINUX这样的系统好像只能编译进内核进行调试。
建立根文件系统,从下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。
默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:
/etc/init。
d/rc。
S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。
根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生烧写映象文件。
建立应用程序的flash磁盘分区,一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性flash(NOR型)512K-32M,有的系统使用非线性flash(NAND型)8-512M,有的两个同时使用,需要根据应用规划flash的分区方案.文档为个人收集整理,来源于网络本文为互联网收集,请勿用作商业用途
开发应用程序,可以下载到根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起,这有点类似于UCOS-II的方式。
烧写内核、根文件系统、应用程序。
发布产品.
4、实验内容
1开发环境的设置
配置网络,包括配置IP地址、NFS服务、防火墙。
网络配置主要是要安装好以太网卡,对于一般常见的RTL8139网卡,REDHAT9.0可以自动识别并自动安装好,完全不要用户参与,因此建议使用该网卡。
然后配置宿主机IP为192。
168.0.121。
如果是在有多台计算机使用的局域网环境使用此开发设备,IP地址可以根据具体情况设置。
如图2。
1所示:
图2.1网络配置
双击设备eth0的蓝色区域,进入以太网设置界面,如图2。
2,2。
3所示:
图2.2以太网常规设置界面
图2。
3以太网路由设置界面
对于REDHAT9.0,它默认的是打开了防火墙,因此对于外来的IP访问它全部拒绝,这样其它网络设备根本无法访问它,即无法用NFSmount它,许多网络功能都将无法使用。
因此网络安装完毕后,应立即关闭防火墙。
操作如下:
点击红帽子开始菜单,选择安全级别设置,选中无防火墙。
4所示:
图2.4安全级别设置
在系统设置菜单中选择服务器设置菜单,再选中服务菜单,将iptables服务的勾去掉,并确保nfs选项选中。
配置NFS:
点击主菜单运行系统设置-〉服务器设置->
NFS服务器(英文为:
SETUP-〉SYSTEMSERVICE—>
NFS),点击增加出现如下在界面,在目录(Drictory):
中填入需要共享的路径,在主机(Hosts):
中填入允许进行连接的主机IP地址.并选择允许客户对共享目录的操作为只读(Read-only)或读写(Read/write).如图2.5所示:
5NFS基本设置
6是对客户端存取服务器的一些其他设置,一般不需要设置,取默认值。
6NFS用户访问设置
当将远程根用户当作本地根用户时,对于操作比较方便,但是安全性较差.最后退出时则完成NFS配置。
配置好后,界面应显示如图2。
7所示:
图2.7远程根用户当作本地根用户
图2.8配置好的NFS
{**我们也可以手工编写/etc/exports文件,其格式如下:
共享目录可以连接的主机(读写权限,其他参数)例如:
/arm2410s192。
168。
0。
*(rw,sync)
表示将本机的/arm2410s目录共享给ip地址为192.168.0.1-192。
254的所有计算机,可以读取和写入。
**}
配置完成后,可用如下办法简单测试一下NFS是否配置好了:
在宿主机上自己mount自己,看是否成功就可以判断NFS是否配好了。
例如在宿主机/目录下执行:
mount192.168.0.10:
/arm2410s/mnt
其中192。
168.0。
10应为主机的IP地址。
然后到/mnt/目录下看是否可以列出/arm2410s目录下的所有文件和目录,则可以说明mount成功,NFS配置成功。
4.2终端调试
1)新建终端与编写程序
新建终端有三种方式:
(1)开始菜单→系统设置→终端;
(2)在桌面空白位置单击鼠标右键,选择”新建终端”;
(3)单击桌面下面的快速启动栏的新建终端图标。
新建一个终端,在终端的命令行状态下编写程序,与Linux操作环境相同.
2)启动NFS服务功能
新建一个终端,在新建的终端命令行输入
[boot/@bc/boot]servicenfsstart
启动NFS服务功能
3)建立终端调试环境
再新建一个终端,输入minicom。
之后打开实验箱.,可以调试实验箱上的程序,程序运行于ARM9的核心处理器下,编写的程序可以使用。
3交叉编译调试环境编程调试实验
1)建立工作目录
[root@root/arm2410s/exp/basic/]#mkdirhello
[root@arm2410s/exp/basic]#cdhello
2)编写程序源代码
在Linux下的文本编辑器有许多,常用的是vim和Xwindow界面下的gedit等,在开发过程中推荐使用vim,如果学习vim的操作方法,请参考相关书籍中的关于vim的操作指南。
Kdevelope、anjuta软件的界面与vc6.0类似,使用它们对于熟悉windows环境下开发的用户更容易上手.
hello.c源代码如下:
#include〈stdio。
h〉
main()
{
printf(“helloworld\n”);
//这里输入自己实验需要显示的内容
}
我们可以是用下面的命令来编写hello。
c的源代码,进入hello目录使用vi命令来编辑代码:
[root@hello]#vihello.c
按“i"
或者“a”进入编辑模式,将上面的代码录入进去,完成后按Esc键进入命令状态,再用命令“:
wq”保存并退出.这样我们便在当前目录下建立了一个名为hello.c的文件。
3)编写Makefile
要使上面的hello.c程序能够运行,必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。
使用它带来的好处就是自动编译,你只需要敲一个“make”命令整个工程就可以实现自动编译,本次实验只有一个文件,它还不能体现出使用Makefile的优越性,但当工程比较大文件比较多时,不使用Makefile几乎是不可能的。
下面介绍本次实验用到的Makefile文件。
下面介绍这个Makefile文件的几个主要部分:
CC指明编译器
EXEC表示编译后生成的执行文件名称
OBJS目标文件列表
CFLAGS编译参数
LDFLAGS连接参数
all:
编译主入口
clean:
清除编译结果
与上面编写hello.c的过程类似,用vi来创建一个Makefile文件并将代码录入其中:
[root@hello]#viMakefile
4)编译应用程序
在上面的步骤完成后,可以在hello目录下运行“make”来编译程序了.如果进行了修改,重新编译则运行:
[root@hello]#makeclean
[root@hello]#make
注意:
编译、修改程序都是在宿主机(本地PC机)上进行,不能在MINICOM下进行.
5)下载调试
在宿主PC计算机上启动NFS服务,并设置好共享的目录,(前面已经配置完成)。
在建立好NFS共享目录以后,可以进入MINICOM中建立开发板与宿主PC机之间的通讯了。
[root@root]#minicom
[/mnt/yaffs]mount-tnfs-onolock192.168.0。
121:
/arm2410s/host
IP地址需要根据宿主PC机的实际情况修改成功挂接宿主机的arm2410s目录后,在开发板上进入/host目录便相应进入宿主机的/arm2410s目录,已经给出了编辑好的hello.c和Makefile文件,它们在/arm2410s/exp/basic/01_hello目录下.用户可以直接在宿主PC上编译生成可执行文件,并通过上面的命令挂载到开发板上,运行程序察看结果。
再进入/host目录运行刚刚编译好的hello程序,查看运行结果。
[/mnt/yaffs]cd/host
[/host]。
/hello
helloworld
开发板挂接宿主计算机目录只需要挂接一次便可,只要开发板没有重启,就可以一直保持连接。
这样可以反复修改、编译、调试,不需要下载到开发板。
五、思考题
1)Makefile是如何工作的?
其中的宏定义分别是什么意思?
实验三多线程应用程序设计
1.实验目的:
进一步熟悉Linux开发环境,了解多线程程序设计的基本原理,掌握Linux多任务管理程序的开发;
学习pthread库函数的使用。
博创科技嵌入式教学实验箱UP—NETARM2410-S、PC机Pentium500以上,硬盘10G以上的电脑。
WINDOWSXP操作系统、LINUX9.0操作系统、MINICOM终端调试器、ARM—LINUX开发环境.
3.1多线程程序的优缺点
多线程程序作为一种多任务、并发的工作方式,有以下的优点:
1)提高应用程序响应。
这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(timeconsuming)置于一个新的线程,可以避免这种尴尬的情况。
2)使多CPU系统更加有效。
操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
3)改善程序结构。
一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改.LIBC中的pthread库提供了大量的API函数,为用户编写应用程序提供支持。
3.2实验源代码与结构流程图
本实验为著名的生产者-消费者问题模型的实现,主程序中分别启动生产者线程和消费者线程。
生产者线程不断顺序地将0到1000的数字写入共享的循环缓冲区,同时消费者线程不断地从共享的循环缓冲区读取数据.流程图如图2。
2。
1所示:
图2.2。
1生产者-消费者实验源代码结构流程图
本实验具体代码如下:
/************************************************
*Theclassicproducer—consumerexample。
*Illustratesmutexesandconditions.
*byZoujianguo〈ah_zou@〉
*2003—12—22
*************************************************/
#include〈stdio.h>
#include〈stdlib。
#include〈time。
#include"
pthread。
h”
#defineBUFFER_SIZE16
/*设置一个整数的圆形缓冲区*/
structprodcons{
intbuffer[BUFFER_SIZE];
/*缓冲区数组*/
pthread_mutex_tlock;
/*互斥锁*/
intreadpos,writepos;
/*读写的位置*/
pthread_cond_tnotempty;
/*缓冲区非空信号*/
pthread_cond_tnotfull;
/*缓冲区非满信号*/
};
/*—--—-—--—--—-—-—--————------——------—-----——-——--—-——-—-*/
/*初始化缓冲区*/
voidinit(structprodcons*b)
pthread_mutex_init(&b—〉lock,NULL);
pthread_cond_init(&b->
notempty,NULL);
pthread_cond_init(&b—〉notfull,NULL);
b—〉readpos=0;
b->
writepos=0;
}
/*—-——-—-——----——--—---———--—-—-——---—-——-—--—---—————————*/
/*向缓冲区中写入一个整数*/
voidput(structprodcons*b,intdata)
{
pthread_mutex_lock(&
b—>
lock);
/*等待缓冲区非满*/
while((b—>
writepos+1)%BUFFER_SIZE==b—〉readpos){
printf(”waitfornotfull\n”);
pthread_cond_wait(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 原理 应用 设计 实验 指导书