嵌入式实验指导书
- 格式:doc
- 大小:1.86 MB
- 文档页数:53
嵌入式原理及应用实验指导书(基础篇)意见反馈:hyx@目录实验1 环境配置-prj (1)1.1 实验步骤 (1)实验2 流水灯-gpio (6)2.1 引脚功能 (6)实验3 按键中断-int (9)3.1 按键开关 (9)3.2 中断控制 (9)实验4 矩阵键盘-key (12)4.1 行列扫描 (12)实验5 LED闪烁-timer (14)5.1 系统时钟频率 (15)5.2 定时器 (15)实验6 数码管显示-timer+ (17)6.1 数码管显示 (17)6.2 动态显示 (18)实验7 串口通讯-uart (19)7.1 UART线路连接 (19)7.2 UART0轮询配置 (20)7.3 KEIL实现printf与scanf (20)实验8 GPS数据处理-uart+ (22)8.1 串口调试 (23)8.2 GPS信息处理 (26)8.3 串口中断 (27)实验9 点阵液晶-lcd (29)9.1 LCD显示 (29)实验10 彩色液晶-lcd+ (31)10.1 彩色液晶 (31)实验11 脉宽调制-pwm (32)11.1 PWM输出 (33)实验12 音乐播放-pwm+ (35)12.1 脉宽调制器PWM (36)实验13 模数转换-adc (39)13.1 ADC模数转换器 (39)实验14 温度传感器-18b20 (41)14.1 18B20温度传感器 (41)实验15 看门狗-wdt (43)15.1 看门狗 (43)实验1环境配置-prj熟悉KEIL下工程建立、编写、编译,并使用Proteus模拟硬件环境进行调试。
1.1实验步骤1.1.1启动KEIL,注册1.运行桌面“KeiluVision4”程序,File菜单中选择LicenseManagement2.复制CID内容①,粘贴至算号器Keil\KEIL_Lic.exe程序中(注意大写),Target选择ARM,点击Generate生成序列号,复制贴入上一步的LIC中②,点击AddLIC③。
嵌入式系统实验指导王艳春李英一张劲松实验一嵌入式微处理器系统的开发环境一、实验环境PC机一台软件: ADS 1.2集成开发环境一套二、实验目的1.了解嵌入式系统及其特点;2.熟悉嵌入式系统的开发环境和基本配置并能编写简单的汇编程序三、实验内容1.嵌入式系统的开发环境、基本配置2.使用汇编指令完成简单的加法实验四、实验步骤(1)在D:\新建一个目录,目录名为experiment。
(2)点击 WINDOWS 操作系统的“开始|程序|ARM Developer Suite v1.2 |Code Warrior for ARM Developer Suite”启动Metrowerks Code Warrior,或双击“ADS 1.2”快捷方式启动。
启动ADS 1.2 如图1-1所示:图1-1启动ADS1.2(3) 在CodeWarrior 中新建一个工程的方法有两种,可以在工具栏中单击“New”按钮,也可以在“File”菜单中选择“New…”菜单。
这样就会打开一个如图1-2 所示的对话框。
选择【File】->【New…】,使用ARM Executable Image工程模板建立一个工程,名称为ADS,目录为D:\experiment。
图1-2 新建文件在这个对话框中为用户提供了7 种可选择的工程类型:1)ARM Executabl Image:用于由ARM 指令的代码生成一个ELF 格式的可执行映像文件;2)ARM Object Library:用于由ARM 指令的代码生成一个armar 格式的目标文件库;3)Empty Project:用于创建一个不包含任何库或源文件的工程;4)Makefile Importer Wizard:用于将Visual C 的nmake 或GNU make 文件转入到CodeWarrior IDE 工程文件;5)Thumb ARM Executable Image:用于由ARM 指令和Thumb 指令的混和代码生成一个可执行的ELF 格式的映像文件;6)Thumb Executable image:用于由Thumb 指令创建一个可执行的ELF 格式的映像文件;7)Thumb Object Library:用于由Thumb 指令的代码生成一个armar 格式的目标文件库。
基于OMAP3530处理器的嵌入式系统实验实验指导书光电信息学院 李绍荣 杨承目录实验一嵌入式Linux实验 (1)实验二 OMAP3530基本接口实验 (2)附录一 Linux系统的安装 (4)附录二 Fedora中高级管理用户root的启用方法 (25)附录三在Fedora系统中安装VMware Tools (30)附录四设置Windows与Fedora之间的文件共享 (33)附录五实验箱主板的外设连接图 (38)附录六实验箱快速操作指导 (40)Linux实验一嵌入式实验一、实验目的掌握嵌入式Linux操作系统的环境搭建方法。
二、实验原理熟悉并掌握嵌入式Linux操作系统的相关知识。
三、实验设备计算机。
四、实验步骤1、安装Vmware Workstation虚拟机工作平台;2、在Vmware Workstation虚拟机工作平台新建一个虚拟机Virtual Machine;3、安装Fedora 11 Linux操作系统;4、安装Vmware Tools;5、设置共享文件夹;五、实验报告要求1、画出实验的工作流程图;2、结合每个实验步骤的关键画面,详细描述Linux操作系统的环境搭建;3、针对实验中遇到的问题,分析原因,并给出解决问题的办法。
六、注意事项实验中禁止带电插拔元器件。
实验二 OMAP3530基本接口实验一、实验目的掌握OMAP3530的IO口、定时器、串口、USB和LCD等外设的使用。
二、实验原理熟读OMAP3530硬件手册的相关内容,掌握相关部件的寄存器使用方法。
三、实验设备1、OMAP3530嵌入式系统实验箱;2、计算机。
四、实验步骤1、LED测试主板上的LEDB、LED1、LED2和LED3为用户LED灯。
在串口助手中输入如下命令点亮LEDB:在串口助手中输入如下命令熄灭LEDB:LEDB会随着用户的操作进行亮灭。
2、触摸屏测试在串口助手中输入以下指令执行触摸屏校准程序:按照屏幕上提示,点击“+”图标5次完成校准。
实验一熟悉嵌入式LINUX开发环境1、实验目的熟悉UP-TECHPXA270-S的开发环境。
学会WINDOWS环境与嵌入式Linu环境共享资源的基本方法。
2、实验内容学习UP-TECHPXA270-S系统的使用、XP和虚拟机之间传送文件方法以及UP-TECHPXA270-S和虚拟机之间共享目录的建立方法。
3、预备知识了解UP-TECHPXA270-S的基本结构和配置,Linux基本知识。
4、实验设备硬件:UP-TECHPXA270-S开发板、PC机(内存500M以上)。
软件:PC机操作系统RADHAND LINUX 9+MIMICOM+RAM LINUX操作系统5、实验步骤(1)、在虚拟机下练习Linux常用命令。
(注意以下操作只能在[root@BC root]#,也就是root文件夹下运行,不然会导致系统不能启动)a. 学习命令通过“man ***”和“*** --help”得到的命令使用方法。
b.学习并掌握如下命令:ls,cd ,pwd,cat,more,less,mkdir, rmdir ,rm,mv,cp,tar,ifconfig(2)、XP与虚拟机之间传送文件(Samba服务器建立、网络设置、文件传送);(3)、了解系统资源和连线;(4)、开发板与虚拟机之间共享目录建立(设置NFS、开发板IP设置、目录挂载),挂载文件;(5)vi(vim)的使用(6)输入qt,启动桌面,按CTRL+C退出6、实验报告要求(1)、XP和虚拟机之间传送文件步骤;虚拟机共享XP文件:选择虚拟机设置,设置要共享的文件启动Linux进入/mnt/hgfs即可看到共享文件夹服务器设置——samba服务器(设置需要共享的目录)XP共享虚拟机文件:服务器设置——samba服务器(设置需要共享的目录)确保网络的PING通(即在同一局域网):1.虚拟机的192.168.1.234(RH9)2.XP的为192.168.1.1253.在XP 下点击开始-》运行(\\192.168.1.234)4.用户名bc密码123456以上实现了Linux虚拟机(RH9)和XP的文件的共享(2)、开发板与虚拟机之间建立共享目录以及文件挂载步骤;1.服务器设置——nfs服务器(设置需要共享的目录)2.设置开发板的ip地址:ifconfig eth0 192.168.1.53.在实验箱终端里输入mount -t nfs -o nolock 192.168.1.234:/up-techpxa270/exp /mnt/nfs4./mnt/nfs即为共享目录(3)、请画出虚拟机、PC机和ARM实验箱之间的硬件连接图;(4)、在Linux中怎样配置网络;系统设置->网络,在新的选项卡中(5)、实验中遇到的问题与解决过程。
嵌入式实验指导书2016.5嵌入式实验是学习嵌入式系统原理及应用课程的一个重要环节。
通过实验加深嵌入式系统原理的认识,训练学生嵌入式系统应用及开发的基本技能,培养学生合理选择嵌入式处理器和接口芯片、正确设计嵌入式系统的接口电路、学会程序调试的基本方法以及解决实验中所遇到问题的能力,同时,培养学生理论联系实际、严谨认真的科学态度和良好的工作作风。
实验一搭建嵌入式开发环境实验 (4)实验二编译下载uboot kernel yaffs2 (18)实验三GPIO模块驱动程序及测试 (23)实验四编写串口通信程序 (27)实验一搭建嵌入式开发环境实验一、实验目的1、掌握嵌入式开发环境的搭建2、掌握嵌入式开发常用工具的使用3、掌握嵌入式交叉编译环境的搭建二、实验内容及原理1.vmware虚拟机的安装及配置2.ubuntu操作系统的安装及配置3.windows环境中常用工具的安装及使用三、实验步骤(一)、vmware虚拟机的安装及配置1)打开VMware-8.0.2-591240.exe安装程序。
2)之后操作按图进行。
3)安装完成后打开刚安装的VMware程序。
4)虚拟机使用固定IP 地址的网络方式默认情况下,虚拟机安装完成后与宿主机共享一个IP 地址,没有属于自己的IP,这里首先需要设置虚拟机的网络联系方式为桥接方式。
单击VM 菜单下面的Settings 项,弹出虚拟机设置对话框,如下图:选择Bridged 连接,确定即可。
(二)、ubuntu的安装及配置1)安装Ubuntu首先准备一张Ubuntu12.04 的安装光盘。
将光盘插入光驱,在PC的bios 中把PC启动方式设置为光驱启动,启动PC。
启动PC 后,安装盘会提示选择安装语言种类。
使用PC键盘的方向键选择在安装过程中显示的语言,在这里我们选择English>>点击“Install Ubuntu”按钮。
选择“Erase disk and install Ubuntu”>>点击“Continue”按钮硬盘空间以及挂载点的分配。
目录目录 (I)实验一、 uC/OSII移植及时钟中断和时间管理 (1)实验二、利用信号量和邮箱实现多任务间同步 (I)实验三、信号量集与内存动态分配的应用................................ 1实验一、 uC/OSII移植及时钟中断和时间管理实验项目名称:uC/OSII移植及时钟中断和时间管理实验项目性质:普通性所属课程名称:嵌入式系统实验计划学时:2实验目的熟悉uCOSII的移植方法,了解任务切换的过程;掌握创建任务和启动任务的方法;了解uCOSII的中断过程,学会使用时间管理函数;实验设备计算机,Keil C51软件实验步骤与内容1、参照KeilC51帮助文件,新建工程EXP1,选取器件为Philips公司的P89C51RD2Hxx,依次按顺序添加工程文件Exp1.c, OS_CPU_C.c, UCOS_II.c, OS_CPU_A.asm, Startup.asm, serial.c, C51L.LIB,编译前按照下图所示设置:编译工程;2、运行调试参考例程EXP1;3、在理解EXP1基础上,完成以下实验任务:在时钟中断里调用供用户自己编写服务代码的函数OSTimeTickHook(),计算MyTask任务的剩余时间(也就是MyTask调用OSTimeDly进入等待状态后的等待时间节拍数),把剩余时间输出到Serial Window#1上(KeilC51串口数据输出窗口)。
4、填写实验报告。
实验结果:参考例程EXP1结果如下图示:实验二、利用信号量和邮箱实现多任务间同步实验项目名称:利用信号量和邮箱实现多任务间同步实验项目性质:普通性所属课程名称:嵌入式系统实验计划学时:2实验目的熟悉多任务的创建;掌握利用信号量实现多任务同步的方法;掌握利用邮箱实现多任务间数据传递的方法;实验设备计算机,Keil C51软件实验步骤与内容1、参照KeilC51帮助文件,新建工程EXP2,选取器件为Philips公司的P89C51RD2Hxx,依次按顺序添加工程文件Exp2.c, OS_CPU_C.c, UCOS_II.c, OS_CPU_A.asm, Startup.asm, serial.c, C51L.LIB,其他设置参考实验一,然后编译工程;2、运行调试参考例程;3、在理解参考例程EXP2的基础上,完成以下实验任务:(1)在时钟中断里调用的供用户自己编写服务代码的函数OSTimeTickHook()里计算StartTask任务的剩余时间,把剩余时间用邮箱发送到MyTask显示;(2)计算YouTask的运行次数,用邮箱发送到HerTask显示;(3)MyTask和HerTask使用互斥信号量实现共享函数Fun()的访问。
实验开始注意事项:打开终端,键入sudo -i指令将自己升级为root用户。
以后的实验内容都是在root 用户下操作实现的。
下载arm_os.tar.gz,使用cp命令将其拷贝到home文件夹下,然后运行tar zxvf arm_os.tar.gz解压缩。
实验一注意事项:1.进入Ubuntu后,需要登录终端,运行apt-get install cutecom安装。
2.配置cutecom时,按照“实验.ppt”里的设置来,但是“no line end”应设为“LF line end”。
3.实验箱和电脑主机的连接需要串口线和网线。
4.连接完毕后,打开实验箱电源,会发现cutecom上会有打印信息出现,提示进入vivi还是加载Linux内核。
5.第一次打开实验箱,需要选择进入vivi。
在vivi里设置实验箱IP和一些其它参数。
命令为:param set linux_cmd_line "noinitrd init=/init root=/dev/nfs nfsroot=172.16.55.*:/home/arm_os/filesystem/rootfs,tcp ip=172.16.55.80 console=ttySAC0"和param save。
6.在主机上,记得要运行apt-get install nfs-kernel-server安装NFS服务器。
7.在主机上用命令gedit /etc/exports编辑/etc/exports文件,而不是“实验.ppt”里所说的export。
另外设置exports时,只需在最后加一句“/home/arm_os/rootfs 172.16.55.*(rw, sync, no_subtree_check)”即可8.测试NFS服务器需要在cutecom里面进入Linux然后键入命令来实现。
测试命令为:mount -o nolock 172.16.55.*:/home/arm_os/filesystem/rootfs /mnt ,这个和“实验.ppt”里的也有区别。
《嵌入式操作系统》实验指导书实验1 Linux编程基础实验序号:1 实验名称:Linux编程基础适用专业:计算机科学与技术、通信工程学时数:4学时一、实验目的1、熟悉Vim的工作模式,熟练使用vim中的常见操作。
2、熟练掌握gcc编译命令及gdb的调试命令,通过对有问题程序的跟踪调试,进一步提高发现问题和解决问题的能力。
3、熟悉多文件的makefile的编写,熟悉各种形式的makefile,并且进一步加深对makefile中用户自定义变量、自动变量的理解。
4、使用autotools生成多文件的makefile,进一步掌握autotools的使用方法。
二、实验内容1、vim使用练习(1)在“/root”目录下建一个名为“vim”的目录。
(2)进入“vim”目录。
(3)将文件“/etc/inittab”复制到“vim”目录下。
(4)使用vim打开“vim”目录下的inittab.(5)设定行号,指出设定initdefault(类似于“id:5:initdefault”)的所在行号。
(6)将光标移到该行。
(7)复制该行内容。
(8)将光标移到最后一行行首。
(9)粘贴复制行的内容。
(10)撤销第9步的动作。
(11)将光标移动到最后一行的行尾。
(12)粘贴复制行的内容。
(13)光标移到“si::sysinit:/etc/rc.d/rc.sysinit”。
(14)删除该行。
(15)存盘但不退出。
(16)将光标移到首行。
(17)插入模式下输入“Hello,this is vi world!”.(18)返回命令行模式。
(19)向下查找字符串“0:wait”。
(20)再向上查找字符串“halt”。
(21)强制退出vim,不存盘。
2、用gdb调试程序的bug(1)使用vi编辑器,将以下代码输入到名为greet.c的文件中。
此代码的原意为输出倒序main函数中定义的字符串,但结果显示没有输出,代码如下所示。
#include<stdio.h>int display1(char *string);int display2(char *string);int main(){char string[]=”Embedded Linux”;display1(string);display2(string);}int display1(char *string){printf(“The original string is %s \n”,string);}int display2(char *string1){char *string2;int size,i;size=strlen(string1);string2=(char *)malloc(size+1);for (i=0,i<size;i++){string2[size-i]=string[i];}string2[size+1]=’’;printf(“The string afterward is %s\n”,string2);}(2)使用gcc编译这段代码,注意要加上“-g”选项以方便之后的调试。
实验一基本接口实验(一)[实验设备]1.JXARM9-2410教学实验箱2.ADT1000仿真器和ADT IDE集成开发环境3.串口、并口连接线[实验目的]1.掌握ARM的串行口工作原理,编程实现ARM的UART通讯;2.掌握嵌入式系统中断的处理流程和ARM中断编程;3.在ADT环境下如何建立工程,对工程进行正确的设置。
添加相应文件(汇编、脚本、.c 源文件等)[实验内容一]实现查询方式串口的收发功能。
接收来自串口(通过超级终端)的字符并将接收到的字符发送到超级终端。
[预备知识]1.了解ADT集成开发环境的基本功能2.学习串口通讯的基本知识3. 熟悉S3C2410串口有关的寄存器[基础知识]串行通信接口电路组成1.可编程的串行接口芯片2.波特率发生器3.EIA与TTL电平转换器4.地址译码电路通信协议:1.异步协议2.同步协议异步串行通讯异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。
数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线即可进行。
接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。
为了恢复发送的信息,双方必须协调工作。
在微型计算机中大量使用异步串行I/O 方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。
但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。
异步串行通信中的字符传送格式开始前,线路处于空闲状态,送出连续“1”。
传送开始时首先发一个“0”作为起始位,然后出现在通信线上的是字符的二进制编码数据。
每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。
后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。
也可以约定不要奇偶校验,这样就取消奇偶校验位。
最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位的时间宽度。
实验一嵌入式Linux系统安装与配置1、实验目的•熟悉Linux系统安装方法•熟悉VMware虚拟机下Linux系统环境的配置2、实验设备PC 机、Redhat9.0 VMware6.0。
3、实验内容•安装虚拟机VMware。
•安装Redhat9.0•VMware虚拟机下的Redhat环境配置一、准备如下安装文件:1.VMware.Workstation.5.5中文版(虚拟机)带注册机2.FC4-i386-disc1.iso3.FC4-i386-disc2.iso4.FC4-i386-disc3.iso5.FC4-i386-disc4.iso6.FC4-i386-rescuecd.iso二、VMware软件的安装1.双击安装文件,按照提示进行下一步2.需要输入注册码时,运行注册机目录下的keygen..exe,点击generate,serial框中的即为注册码。
3.安装完成后,运行汉化补丁目录下的HF_Vmware5.5进行汉化三、Fedora Core 4 Linux发行版的安装1.在VMware软件中,新建虚拟机->下一步,选择典型->下一步,选择linux->下一步,选择linux安装的位置->下一步,使用桥接网络->下一步,完成2.编辑虚拟机->设置,选择cdrom1,使用iso映像,选中FC4-i386-disc1.iso,确定3.启动此虚拟机,进入linux安装界面4.选择skip,跳过光盘检测5.按next,选择简体中文,按next,下一步6.安装类型选择定制,下一步7.选择手工分区,下一步,弹出警告框,选择是8.新建,选择文件类型为swap,大小为1000MB,确定。
9.新建,选择文件类型为ext3,挂载点为/,大小为“使用全部可用空间”,确定,分区结果如下图所示:10.下一步,下一步,选择无防火墙,弹出警告框,点击继续11.下一步,设置用户口令,输入两次,必须相同,至少为6个字符12.下一步,选择软件包组界面,选择全部(7G左右,保证硬盘空间充足,避免今后使用时出现一些问题)13.按照提示,点击下一步,开始安装14.第一张盘FC4-i386-disc1.iso安装完后,有提示音15.编辑虚拟机->设置,选择cdrom1,使用iso映像,选中FC4-i386-disc2.iso,确定,继续第二张盘的安装16.完成四张盘的安装后,自动重启,进入系统17.按提示点击下一步,设置自己的用户名,系统默认有个超级用户root18.在提示输入用户名时,可以输入自己设置的用户名和密码(进入系统后,使用用户权限,安全),也可以输入root用户,密码为在第11步里设置的(进入系统后,使用超级用户权限)四、VMvare tools的用途:1.在Linux中方便地访问Windows系统下的文件(通过目录/mnt/hgfs)2.增强桌面图形性能,屏幕分辨率3.鼠标可以在Windows系统和虚拟机之间方便切换五、VMware tools的安装1.打开VMware软件,启动已安装的Linux系统,通过菜单虚拟机->安装vmware工具,点击install2.在Linux桌面上,点鼠标右键,打开终端3.输入以下命令:mount –t iso9660 /dev/cdrom /mnt4.cd /mnt5.cp VMwareTools-5.5.0-18463.tar.gz /tmp6.cd /tmp7.umount /dev/cdrom8.tar zxvf VmwareTools-5.5.0-18463.tar.gz9.cd vmware-tools-distrib10../vmware-install.pl11.一路回车12.虚拟机->虚拟机设置->选项->共享文件夹->添加(名称d,主机文件夹D:\,名称e,主机文件夹E:\),确定13.reboot三、验证是否安装成功1、鼠标是否能方便地在Windows和虚拟机之间切换2、在Linux中能否通过目录/mnt/hgfs访问Windows下的文件实验二 Linux基本命令的使用(2-3次)【实验目的】一、了解Linux系统中的用户管理、文件和目录管理二、掌握Linux系统中用户管理相关、文件和目录管理相关及其它常用命令【实验内容】1、超级用户与普通用户相互切换在Linux下将root用户的密码修改为Linux#1;创建用户user01,user02,user03,创建用户组group1,group2;将用户user01、user02划归group1组,将用户user03划归group2组2、在/tmp目录下建立test1和test2目录文件,然后在test目录下创建一个test.c和hello.txt文件,再将test.c复制到test2目录中,将hello.txt移动到test2目录中,最后删除test1目下的test.c文件。
嵌入式实验指导第二章基础实验2.1 熟悉Linux开发环境一、实验目的熟悉Linux开发环境,学会基于嵌入式Linux开发环境的配置和使用。
使用Linux的armv4l-unknown-linux-gcc编译,使用基于NFS方式的调试、运行,了解嵌入式开发的基本过程。
二、实验内容本次实验使用Redhat Linux 9.0操作系统环境,安装ARM-Linux的开发库及编译器。
创建一个新目录,并在其中编写hello.c和Makefile文件。
学习在Linux下的编程和编译过程,以及ARM开发板的使用和开发环境的设置。
下载已经编译好的文件到目标开发板上运行。
三、预备知识C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。
四、实验设备及工具(包括软件调试工具)硬件:UP-TECH S2410/P270 DVP嵌入式实验平台、PC机Pentium 500以上, 硬盘10G以上。
软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境五、实验步骤在Linux下的文本编辑器有许多,常用的是vim和Xwindow界面下的gedit等,我们在开发过程中推荐使用vim,用户需要学习vim的操作方法,请参考相关书籍中的关于vim的操作指南。
Kdevelope、anjuta软件的界面与vc6.0 类似,使用它们对于熟悉windows环境下开发的用户更容易上手。
命令―:wq‖保存并退出。
这样我们便在当前目录下建立了一个名为hello.c的文件。
3、编写Makefile要使上面的hello.c程序能够运行,我们必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。
使用它带来的好处就是自动编译,你只需要敲一个―make‖命令整个工程就可以实现自动编译,当然我们本次实验只有一个文件,它还不能体现出使用Makefile的优越性,但当工程比较大文件比较多时,不使用Makefile几乎是不可能的。
下●CC 指明编译器●EXEC 表示编译后生成的执行文件名称●OBJS 目标文件列表●CFLAGS 编译参数●LDFLAGS 连接参数●all: 编译主入口在上面的步骤完成后,我们就可以在hello目录下运行―make‖来编译我们的程序了。
如果进在宿主PC计算机上启动NFS服务,并设置好共享的目录,具体配置请参照前面第一章第四节中关于嵌入式Linux环境开发环境的建立。
在建立好NFS共享目录以后,我们就可以进入1.Makefile是如何工作的?其中的宏定义分别是什么意思?2.2 多线程应用程序设计一、实验目的了解Linux下多线程程序设计的基本原理。
学习pthread库函数的使用。
二、实验内容读懂pthread.c的源代码,熟悉几个重要的PTHREAD库函数的使用。
掌握共享锁和信号量的使用方法。
进入/arm2410cl/exp/basic/02_pthread目录,运行make 产生pthread程序,使用NFS方式连接开发主机进行运行实验。
三、预备知识有C语言基础掌握在Linux下常用编辑器的使用掌握Makefile 的编写和使用掌握Linux下的程序编译与交叉编译过程四、实验设备及工具硬件:UP-TECH S2410/P270 DVP嵌入式实验平台,PC机Pentium 500以上, 硬盘40G以上,内存大于128M。
软件:PC机操作系统REDHAT LINUX 9.0 +MINICOM + ARM-LINUX开发环境五、实验原理及代码分析1.多线程程序的优缺点多线程程序作为一种多任务、并发的工作方式,有以下的优点:1) 提高应用程序响应。
这对图形界面的程序尤其有意义,当一个操作耗时很长时,整个系统都会等待这个操作,此时程序不会响应键盘、鼠标、菜单的操作,而使用多线程技术,将耗时长的操作(time consuming)置于一个新的线程,可以避免这种尴尬的情况。
2) 使多CPU系统更加有效。
操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。
3) 改善程序结构。
一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。
LIBC中的pthread库提供了大量的API函数,为用户编写应用程序提供支持。
2.实验源代码与结构流程图本实验为著名的生产者-消费者问题模型的实现,主程序中分别启动生产者线程和消费者线程。
生产者线程不断顺序地将0到1000的数字写入共享的循环缓冲区,同时消费者线程不断地从共享的循环缓冲区读取数据。
流程图如图2.2.1所示:图2.2.1生产者-消费者实验源代码结构流程图下面我们来看一下,生产者写入缓冲区和消费者从缓冲区读数的具体流程,生产者首先要获得互斥锁,并且判断写指针+1后是否等于读指针,如果相等则进入等待状态,等候条件变量notfull;如果不等则向缓冲区中写一个整数,并且设置条件变量为notempty,最后释放互斥锁。
消费者线程与生产者线程类似,这里就不再过多介绍了。
流程图如下:s图2.2.2 生产消费流程图在本程序的代码中大量的使用了线程函数,如pthread_cond_signal、pthread_mutex_init、pthread_mutex_lock等等,这些函数的作用是什么,在哪里定义的,我们将在下面的内容中为大家做一个简单的介绍,并且为其中比较重要的函数做一些详细的说明。
的函数做一下详细的说明:参数是线程运行函数的起始地址,最后一个参数是运行函数的参数。
这里,我们的函数thread不需要参数,所以最后一个参数设为空指针。
第二个参数我们也设为空指针,这样将生成默认属性的线程。
当创建线程成功时,函数返回0,若不为0则说明创建线程失败,常见的错误返回代码为EAGAIN和EINVAL。
前者表示系统限制创建新的线程,例如线程数目过多了;后者表示第二个参数代表的线程属性值非法。
创建线程成功后,新创建的线程则运行参数三和参数四确定的函数,原来的线程则继续运行下一行代码。
等待线程的返回值。
这个函数是一个线程阻塞的函数,调用它的函数将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。
pthread_exit函数一个线程的结束有两种途径,一种是象我们上面的例子一样,函数结束了,调用它的线程也NULL,这个值将被传递给thread_return。
最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线程则返回错误代码ESRCH。
下面我们来介绍有关条件变量的内容。
使用互斥锁来可实现线程间数据的共享和通信,互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。
而条件变量通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足,它常和互斥锁一起使用。
使用时,条件变量被用来阻塞一个线程,当条件不满足时,线程往往解开相应的互斥锁并等待条件发生变化。
一旦其它的某个线程改变了条件变量,它将通知相应的条件变量唤醒一个或多个正被此条件变量阻塞的线程。
这些线程将重新锁定互斥锁并重新测试条件是否满足。
一般说来,条件变量被用来进行线线程间的同步。
pthread_cond_init函数条件变量的结构为pthread_cond_t,函数pthread_cond_init()被用来初始化一个条件变pthread_condattr_t的指针。
结构pthread_condattr_t是条件变量的属性结构,和互斥锁一样我们可以用它来设置条件变量是进程内可用还是进程间可用,默认值是PTHREAD_ PROCESS_PRIVATE,即此条件变量被同一进程内的各个线程使用。
注意初始化条件变量只有未被使用时才能重新初始化或被释放。
释放一个条件变量的函数为pthread_cond_ destroy (pthread_cond_t cond)。
和函数pthread_cond_broadcast唤醒,但是要注意的是,条件变量只是起阻塞和唤醒线程的作用,具体的判断条件还需用户给出,例如一个变量是否为0等等,这一点我们从后面的例子中可以看到。
线程被唤醒后,它将重新检查判断条件是否满足,如果还不满足,一般说来线程应该仍阻塞在这里,被等待被下一次唤醒。
这个过程一般用while语句实现。
pthread_cond_timedwait函数量不满足,阻塞也被解除。
个线程被唤醒是由线程的调度策略所决定的。
要注意的是,必须用保护条件变量的互斥锁来保护这个函数,否则条件满足信号又可能在测试条件和调用pthread_cond_wait函数之间被发出,从而造成无限制的等待。
六、实验步骤1、阅读源代及编译应用程序进入exp/basic/02_pthread目录,使用vi编辑器或其他编辑器阅读理解源代码。
运行make 产生pthread可执行文件。
2、下载和调试切换到minicom终端窗口,使用NFS mount开发主机的/arm2410cl 到/host目录。
注:/host 在ARM端如果不存在,请选择/mnt/nfs目录挂载进入/host/exp/basic/pthread目录,运行pthread,观察运行结果的正确性。
运行程序最1.加入一个新的线程用于处理键盘的输入,并在按键为ESC时终止所有线程。
2.线程的优先级的控制。
2.3 A/D接口实验一、实验目的了解在linux环境下对S3C2410芯片的8通道10位A/D的操作与控制。
二、实验内容学习A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。
阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关接口。
利用外部模拟信号编程实现ARM循环采集全部前3路通道,并且在超级终端上显示。
三、预备知识有C语言基础。
掌握在Linux下常用编辑器的使用。
掌握Makefile 的编写和使用。
掌握Linux下的程序编译与交叉编译过程。
四、实验设备及工具硬件:UP-TECH S2410/P270 DVP嵌入式实验平台、PC机Pentium 500以上, 硬盘10G以上。
软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境五、实验原理1、A/D转换器A/D转换器是模拟信号源和CPU之间联系的接口,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。
在工业控制和数据采集及许多其他领域中,A/D转换是不可缺少的。
A/D转换器有以下类型:逐位比较型、积分型、计数型、并行比较型、电压-频率型,主要应根据使用场合的具体要求,按照转换速度、精度、价格、功能以及接口条件等因素来决定选择何种类型。