嵌入式实训报告

2022-03-27 版权声明 我要投稿

报告具有汇报性、陈述性的特点,只有按照报告的格式,正确编写报告,报告才能发挥出它的作用。那么在写报告的时候,应该如何写才能突出的重要性呢?以下是小编整理的《嵌入式实训报告》的相关内容,希望能给你带来帮助!

第一篇:嵌入式实训报告

嵌入式--实训总结

实训总结

班级:卓越1301 姓名:刘* 短短三周的很快就过去了,在中软国际嵌入式方向班的第二次实习马上就要结束了。虽然只有短短的三周,但我学会了很多知识,学习了在Linux-Fedora14操作系统的环境下完成基于Smart210SDK开发板和DS18B20的温度采集及显示系统还有按键控制LED灯并实现开机和关机的相关功能,这些知识让我们对嵌入式有了更进一步的了解与熟悉。

作为一名大学生,纵观现在的就业形势,国家高校的扩招,世界金融危机的横扫,大学生应该有一种居安思危的紧迫感,特别是对已经度过几年大学的我来说,毕业并不是一个遥远的词汇。宝剑锋从磨砺出,梅花香自苦寒来,缺少了平时的锻炼,没有厚积当然不能有薄发。首先我得有思想上的紧迫感,在学校学习的都是理论知识,实践经验则是少之又少。综合能力强的人才才是这个社会需要的,成长成为社会需要的人才是我的个人奋斗目标。有了强大的精神动力,有了坚如磐石的毅力,相信成功并不遥远。

首先,通过这些天的实训我学到了很多知识。这一阶段在Linux-Fedora14操作系统的环境使用Smart210SDK开发板做一些程序设计并烧写到SD卡中通过Smart210SDK开发板来实现程序的执行,通过对Smart210SDK开发板的一步一步的熟悉和了解我们开展了嵌入式的基本的程序烧写、调试、执行这些相关的锻炼过程。

最后我们做了两个项目:

第一个是基于Smart210SDK开发板的按键控制LED灯并且实现开机和关机的相关功能与实现---项目功能是:实现长按开发板上的K1键实现开机或关机,在开机状态下能够实现K1短按控制LED1的点亮与熄灭、K2短按控制LED2的点亮与熄灭、K3短按控制LED3的点亮与熄灭、K4短按控制LED4的点亮与熄灭。项目涉及的相关技术是:相关寄存器的调用,延时子函数的调用,LED灯的初始化,实现按键的长按与短按的控制的C语言程序的设计与实现。

第二个是基于Smart210SDK开发板和DS18B20的测量并在minicom上显示的功能与实现---项目功能:首先实现DS18B20的初始化,然后在DS18B20中写数据、数据转换、读数据、进行数据间的格式转换,最后在minicom上显示出所读出的温度,并且实现当温度高于32°C的时候LED灯闪烁,当温度高于35°C的时候蜂鸣器响。项目涉及的相关技术是:相关寄存器的调用,UART的串口与DS18B20的初始化,延时子函数的调用,字符与字符串的输入输出,计算温度的并进行数据类型的转换的C语言程序的设计与实现!

在此次的实训中我感觉到我们最大的不足就是动手的能力太差,这次实训也让我深刻的了解到,不管在工作中还是在生活中要和老师、同学保持良好的关系是很重要的。做事首先要先做人,要明白做人的道理,如何与人相处是现代社会的做认得一个最基本的问题,对已自己这样一个即将步入社会的人来说,需要学习的东西很多。从一起做项目的同学身上我看到了谦虚谨慎、细心努力的态度,在以后我的生活中我还会留意身边同学的优点,从他们身上找寻我所缺少的品质,不断学习。从老师那里我看到了企业人的生活面貌,没有事情可以不劳而获,今天老师们能够领导我们是他们之前努力的结果,虽然老师没有和我们讲很多公司里的事情,可是他们的言行中所表现出来的都是比我们要严谨的多的对工作的态度。最后谢谢老师辛苦的教导我们!

姓名:刘* 学号:13******** 日期:2014.07.04

第二篇:嵌入式实训报告

班级:电子信息1301

姓名:钟海明

学号:3138702144

同组人:胡晓海

指导老师:韦龙新

1 目录:

一、实训目的---------------------3

二、实训要求---------------------3

三、实训内容---------------------3

1、嵌入式系统开发环境的搭建----------3

2、嵌入式程序的编译与下载------------3

3、uboot的移植----------------------4

4、linux内核的移植------------------4

5、NFS网络文件挂载------------------5

6、FTP和TFTP的运用-----------------6

7、试验箱镜像的烧写-----------------7

8、串口实验和TCP实验同时传送AD值--7

四、实训心得体会及体会----------8

一、实训目的:

学习和掌握ARM嵌入式Linux系统的体系结构和基本指令,熟悉Linux下的设计流程和编程流程,能够实现一定功能的嵌入式的设计,为之前的理论课程实践验证和为今后的学习及将来从事的技术工作打下一定的基础。

二、实训要求:

1、嵌入式系统开发环境的搭建

2、嵌入式程序的编译与下载

3、uboot的移植

4、linux内核的移植

5、NFS网络文件挂载

6、FTP和TFTP的运用

7、试验箱镜像的烧写

8、串口实验和TCP实验同时传送AD值

三、实训内容:

1、嵌入式系统开发环境的搭建:

首先在笔记本电脑下安装虚拟机VMware,安装成功后拷贝安装好的Fedora到本机上在虚拟机上找到路径打开。打开虚拟机进入Fedora选择用户为root密码为123456。交叉环境的安装,下载好arm-linux-gcc的编译包,解压安装到/opt下。

2、嵌入式程序的编译与下载:

用vi编辑一个(.C)的文件,保存退出后使用(arm-linux-gcc

3 -o 编译后的文件名 编译文件名)的指令编译,编译成功后用FTP或TFTP将可执行文件拷贝到实验开发板中,chmod +x 文件名 修改权限(./文件名)执行编译文件。

3、uboot的移植

下载U-boot的安装包,解压到/opt路径下进入u-boot。修改Makefile将CROSS_COMPILE=/opt/Embedsky/4.3.3/bin/arm-linux- 后执行#make distclean #make smdk2440_config #make

4、Linux内核的移植:

下载Linux的安装包,解压的/opt路径下进入Linux执行#make menuconfig进行配置

配置内核支持NFS启动文件系统

内核支持NFS分区(即编译时在File system中选中[*] Root file system on NFS), 以及支持内核IP_PNP(即编译时在Networking中选中[*] IP: kernel level autoconfiguration)

File systems --->

Network File Systems ---> <*> NFS file system support ## 必选 [*] Provide NFSv3 client support ## 可选 [*] Root file system on NFS ## 必选

Networking --->

4 [*] Networking support Networking options ---> [*] IP: kernel level autoconfiguration ## 必选 需要打开IP:Kernel level autoconfiguration 以及下面所有的选项包括DHCP, BOOTP, RARP,而且NFS Client Support不能是模块,必须编译进内核。配置完毕后,保存退出。执行下面的命令来生成内核映像。

#make dep #make

#make zImage 映像文件产生在/arch/arm/boot/目录下,名称“zImage”。

5、NFS网络文件挂载:

1)首先修改虚拟机网络为:

192.168.0.43 输入以下命令:

#cd /root

#mkdir nfs

#touch aaa

#cd /mnt

#mkdir nfs

#vi /etc/exports 进入修改内容为:

/root/nfs

5 192.168.0.*(rw,sync,no_root_squash)存盘退出

#ifconfig(查看网络)

#ifconfig eth1 192.168.0.43

#ifconfig eth1 down

#ifconfig eth1 up

#ping 192.168.0.43

#/etc/init.d/nfs start

#mount -t nfs 192.168.0.43:/root/nfs /mnt/nfs /*此时可以在/root/nfs下新建一个文件,如果在/mnt/nfs下也有,表示NFS挂载成功。

6、TFTP的运用:

修改计算机的IP为192.168.1.43,用网络线将开发板和实验板链接起来(开发板的IP默认问192.168.1.6),打开电脑的菜单栏运行输入cmd,#telnet 192.168.1.6进去开发板用户名为root。如果进不去,打开计算机的Telnet的允许指令,还有一个就是看网络有没有ping通。 打开TFTP应用程序, 将Windows文件传送到开发板使用指令: #tftp -r 文件名 -g 192.168.1.43 将开发板的文件传送到Windows使用指令: #tftp -l 文件名 -p 192.168.1.43 进入查看文件是否有添加,有添加则表示传送成功。

6

7、试验箱镜像的烧写: 连接好串口和USB,安装USB的驱动(安装驱动由于试验箱和USB线的问题我们那一组试了无数次都没有安装成功,最后还是通过换用别人的电脑才成功的)。实验箱按键拨到下载模式,打开DNW软件选择5,6,7,分别下载内核,u-boot,根文件系统,按键拨到工作模式重启实验箱,看是否正常启动即可。

8、串口实验和TCP实验同时传送AD值: 串口实验

修改串口实验的C文件并用arm-linux-gcc编译器编译生成可执行文件,利用TFTP传送到开发板的/root下,改变权限chmod +x 之后(./)执行./adc 和./uart程序,同时打开串口调试助手波特率选择9600,虚拟机的串口COM1断开,串口调试助手连接串口。接收端选择文本模式,此时就可以看见接收区收到每隔一秒钟收到的AD值,和名字学号。

TCP实验

在虚拟机中打开TCP实验的文件,修改Makefile文件中arm-linux-gcc 编译器的路径,和server.c文件中的hell[]数主的字符为zhonghaiming3138702144. 保存退出。#Make 之后会生成一个为client和server的两个程序。此时将两个编译生成的文件传送到开发板上,给权限执行。同时打开网络调试助手,执行client时选择TCPserver IP为Windows IP192.168.1.43 ,Telnet中执行(#./client 192.168.1.43 8080)点击发送即可在Telnet中接收到

7 由网络调试助手发送过来的数据。执行./server时 选择TCPclient IP为开发板IP 192.168.1.6 执行(#./server 8080&)点击连接就可以在网络调试助手上接收到(zhonghaiming318702144)。

网络AD测试,先编译,之后和执行server步骤一样,每连接一次,发送一次AD值和姓名学号。

四、实训心得体会及总结:

三周的实训说快也快,说慢也慢。可以说这三周的实训并不是很顺利,由于对试验箱的不熟悉和嵌入式理论与实际的差距在加上嵌入式本身有一定的难度,所以走了很多的弯路。从NFS的挂载开始ping网络一步步的开始试,找原因找百度,最终还是没有成功的用NFS挂载到试验箱上,这期间几乎用了一周的时间,效率可见。

虽然走了许多的弯路,但是我觉得有时候弯路并不是坏事,就此次实训来说,我就知道了挂载实验箱不仅仅可以用NFS挂载还可以用TFTP和FTP以及实验板的rz命令直接挂载,进入实验板不仅仅可以用scoreCRT软件还可以用虚拟机的minicom以及Windows下的Telnet命令直接进入试验箱。

这次实训最大的感触就是要细心多尝试,遇到问题多看多问不要逃避,不会的要虚心求教。要把握好时间观念不要在一个地方死磕,多和同学交流,每个人遇到的问题都不一样当下次你遇到和他一样的问题是说不定你就会了。所以在这里也要感谢同组人和同学的帮助,以及老师耐教学和指导。

第三篇:嵌入式报告

嵌入式实训报告

姓名:张龙班级:电气803学号:08010270

嵌入式系统学习体会

一、 嵌入式发展前景

嵌入式系统无疑是当前最热门最有发展前途的IT应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。像我们平常常见到的手机、PDA、电子字典、可视电话、VCD/DVD/MP3 Player、数字相机(DC)、数字摄像机(DV)、U-Disk、机顶盒(Set Top Box)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。

嵌入式系统是软硬结合的东西,搞嵌入式开发的人有两类。

一类是学电子工程、通信工程等偏硬件专业出身的人,他们主要是搞硬件设计,有时要开发一些与硬件关系最密切的最底层软件,如BootLoader、Board SupportPackage(像PC的BIOS一样,往下驱动硬件,往上支持操作系统),最初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂软件系统往往力不从心(例如嵌入式操作系统原理和复杂应用软件等)。

另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。如果我们学软件的人对硬件原理和接口有较好的掌握,我们完全也可写BSP和硬件驱动程序。嵌入式硬件设计完后,各种功能就全靠软件来实现了,嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作(目前有很多公司将硬件设计包给了专门的硬件公司,稍复杂的硬件都交给***或国外公司设计,国内的硬件设计力量很弱,很多嵌入式公司自己只负责开发软件,因为公司都知道,嵌入式产品的差异很大程度在软件上,在软件方面是最有“花头“可做的),所以我们搞软件的人完全不用担心我们在嵌入式市场上的用武之地,越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势。

二、 嵌入式系统应用前景

随着计算机软件和集成电路技术的发展,嵌入式系统产品日益完善,在航天、 航空、交通、网络、电子、通讯、金融、智能电器、智能建筑、仪器仪表、工业自动控制、数控机床、掌上型电脑、各种智能IC卡、第二代身份证验证、公共交通收费系统、 医药系统以及军事等领域得到广泛应用,已成为我国信息化带动工业化,工业化促进信息化 发展的国民经济新的增长点在我国2006 年嵌入式软件产品占全年全部软件产值的23%还多. 据调查显示,目前嵌入式系统涉及的领域中,PDA占30%,手机占18%,数字信息家电占21%,工业控制5%,服务行业占2%,交通系统占2%,其他占22%.目前最值得关注的嵌入式产品市场主要有如下几类:

1.信息家电

后PC时代,家用电器将向数字化和网络化发展,电视机、微波炉、数字电话等都将嵌入微处理器并通过家庭网关与Internet连接,构成家庭信息网络. 届时, 人们可以远程控制家里的电器设备,可以实现远程医疗、远程教育, 可以视频点播,实现交互式电视,还可以提供各种网上服务等.一般可认为,那些低单价、操作简单、可通过因特网发送或获取信息, 将逐步分割或替代PC 的某些功能,并能

与其它信息产品交换资料或信息的产品可统称为信息家电.信息家电可以提供安全防范、消费电子产品的智能控制、交互式智能控制、家庭信息服务、自动维护、家庭医疗保健等服务. 而这些服务中的各类数字融合产品,都离不开嵌入式系统的支持,可以说,嵌入式系统是家庭信息网络、IT 融合的重要技术基础.具有丰富功能、高度集成的智能数字终端将是未来的发展方向. 智能数字终端和各类数字融合产品具有十分广阔的市场前景.

2. 移动计算设备

移动计算设备包括手机、PDA、 掌上电脑等各种移动设备. 中国拥有最大的手机用户,市场巨大,而掌上电脑或PDA 由于易于使用、 携带方便、 价格便宜,近几年在我国得到了快速地发展.PDA 与手机也已呈现融合趋势, 智能手机正在成为今后的发展趋势方向, 智能手机就是一台嵌入式系统. 智能手机要存放更多的软件和各种大容量的多媒体文件,必定要有操作系统, 目前智能手机操作系统主要有开源的Linux、微软公司的Windows CE系统和 Symbain 公司的 SymbainOs 系统.智能手机的功能越来越异常强大,为智能手机开发的各种功能程序已经在互联网上盛行.通过安装这些软件,可大大扩展手机的功能.

3. 网络设备

各种网络设备包括路由器交换机、Web Server、网络接入网关等, 都是一类嵌入式系统.随着下一代Internet 的研发成功和投入使用,必然会有更多更强的嵌入式网络设备和产品面世,这意味着巨大的嵌入式网络设备和产品市场需求.嵌入式系统也在向无线网络发展,无线网络已开发集成了802.11 芯片组. 无线嵌入式网络有望部署到住宅及商用建筑自动化、 工业设备监测以及其他无线传感和控制应用中. ZigBee 联盟已经为低成本、 低功率的无线嵌入式网络制定了标准. 这项标准定义了在IEEE 802.15.4 标准媒体接入控制层和物理层上的网络及支持的应用服务.这项标准很适合照明、 供暖、 冷却控制、 工业建筑、 自动化以及医疗设备监测等方方面面的应用. ZigBee联盟的长期目标是能够建立基于互操作平台和配置文件的可伸缩、 低成本的嵌入式基础架构.

4.自动化与测控仪器仪表

测控仪器仪表种类繁多,我国每年光进口的医疗设备就上亿, 每个医疗设备就是一套嵌入式系统.测控仪器仪表更是遍及大中小企业,新型的测控仪器仪表无一不是嵌入式系统.在工控和仿真领域,嵌入式设备也早已得到广泛应用.嵌入式系统在自动化行业已有很多成功应用案例,如数控机床控制系统、面向啤酒行业控制系统、水厂控制系统、缝纫机控制系统、可燃性气体报警系统、智能建筑安防系统、自动生产线分布式控制系统、变电站自动化系统、自动生产线检测系统等.我国的工业生产需要完成智能化、数字化改造,智能控制设备、智能仪表、自动控制等为嵌入式系统提供了巨大的市场. 工控、仿真、数据采集、军用等领域一般都要求实时操作系统支持.在金融业、电力系统和服务业,嵌入式也在发挥着越来越重要的作用.

5.嵌入式技术在交通管理、 环境监测中的应用

在交通系统,嵌入式的作用也日益重要. 汽车智能驾驶设备、汽车模拟驾驶器、汽车喷油泵调试台、轮船智能驾驶设备等都面临更新换代.这类新型设备也都离不开嵌入式系统.我国汽车业的发展必然为汽车电子的嵌入式系统应用带来良好商机.嵌入式系统在交通指挥系统、高速公路收费监控、汽车自导航、GPS车载终端、电子警察、 加油站和汽车检测中的应用都是非常广泛的,有良好的市场前景.在环境监测( 包括水文资料实时监测, 防洪体系及水土质量监测,堤坝安全,

地震监测网,实时气象信息网,水源和空气污染监测)中,嵌入式产品同样有着广泛的市场前景.

三、嵌入式系统的组成 1.底层(硬件层)

需要你自己对于硬件相当的了解,能够独立绘制PCB并进行焊接,之后调试板子,做好电路板。比如sc2410,你需要绘制至少四层PCB电路板,其中ARM核心板是最难掌握的部分,外围电路要注意各种走线技巧等等。绘制完PCB之后就需要你的焊接功夫。将元器件焊接在PCB上。最后调试电路板,这是这一层设计中的收尾工作,也是最具有挑战性的工作。调试电路需要大量的经验,对于初学者来说,需要很强的电路知识,对于硬件的性能以及应用要非常了解才行。

2.中间层(驱动层)

电路板已经有现成的。你需要编程使一个死的板子,活起来,就是把程序下载进去,能叫板子跑起来。这里需要你对于ARM芯片的结构有很好的掌握,要会读芯片资料(datasheet)通常都是英文的。了解其内部资源我们就可以进行驱动编程了。我们平时所使用单片机,一般都是写好的程序,各个管脚在什么时序下输出什么信号(1或0),来操作实现相应借口的外围设备,比如液晶屏、LED灯等。单片机也可以叫做简单的嵌入式。原理相同。ARM也可以向单片机一样使用,但我们更多的是要对ARM加入操作系统的,这才是我们最常说的嵌入式。加入操作系统了以后,芯片对于个个资源的调度有了更系统的统筹规划,可以更充分的利用ARM芯片的系统资源,提高性能,使资源合理分配。而通常的驱动是在操作系统下工作的。比如基于LINUX或WINCE等等下的驱动程序。驱动程序是链接硬件平台和操作系统的纽带,当然编写驱动要同时兼顾操作系统特点和硬件接口的特点。做驱动的开发,需要对于软硬件都要有所了解,其中更偏重操作系统的理解。这部分工作也是最难做的。

3. 上层(应用层):

应用层,即我们所说的软件编程了。就相我们手机里QQ和飞信一样,我们需要根据我们手机的操作系统来编写应用程序。对于各个开发板,我们同样需要根据它里边的系统进行应用开发。这部分,应该是几乎脱离硬件了,我们只需简单的了解硬件即可。我们只需深刻理解操作系统的中各个系统函数和接口函数,即可进行开发。需要很强的C++水平。

四、嵌入式系统的设计特点

嵌入式系统的开发通常采用“宿主机/目标机”方式。

宿主机(Host)是一台通用的计算机,一般是PC机。它通过串口或网络连接与目标机进行通信。

目标机(Target)常用在嵌入式系统的开发过程期间。目标机可以是嵌入式系统的实际运行环境,也可以是能替代实际环境的仿真系统。

首先,利用宿主机上丰富的设备资源以及良好的开发环境来开发和仿真调试目标机上的软件。

然后,通过UART接口或Ethernet接口将交叉编译生成的目标代码传输并下载到目标机上,并用交叉调试器在实时内核/操作系统或监控程序的支持下进行实时分析和调试。

最后,目标机在特定的环境下运行

五、体会

通过学习嵌入式的课程使我了解了什么是嵌入式,所谓嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通过实训课的训练不仅使我知道了嵌入式系统的组成及应用,而且拓展了自己的知识和动手能力也对自己今后的发展有很大的的帮助。

第四篇:报告嵌入式心得

专题课学习至今,学到了很多东西。而找工作时,各种笔试面试中,深刻地体会到“嵌入式系统”的重要性。这让我更坚定了学好嵌入式系统的想法。

嵌入式系统这门课和C语言颇有关联,这也重新夯实了我的C语言基础。而良好的C语言能力,也是学习嵌入式的必备基础。我决定在学好基础后,在对嵌入式进行扩展学习。

据了解嵌入式学习主要有两方面:软件和硬件。嵌入式软件的比较多,而做硬件不多,但多是高手。嵌入式的软件又有好多种,主要是针对不同CPU的,但是基本都是用C语言的,还有极少的汇编,主要在BOOT启动、初始代码中。目前来说,嵌入式Linux比较流行,安卓就是基于linux内核的。wince、Vxworks什么的貌似不多,特别是vxworks。

我也对嵌入式系统的应用方面进行了了解。现在在市场还是蛮吃香的,可从事的就业方向还是蛮多的比如:消费类电子(手机、PDA、游戏机)、数字 多媒体(网络点播、机顶盒)、汽车电子(导航仪)、医疗电子、工业控制等行业。

嵌入式系统是二十一世纪科技领域的重大创新,必将推进全球经济社会高速发展,实现人类发展史上的重大突破。科学在发展,人类在进步,随着一代又一代IT精英们的不断努力,未来的嵌入式系统一定会是更加方便人们的工作、学习、生活的好伴侣。

据了解 ,嵌入式市场有非常大的机会,预计到2012年将有30亿台嵌入式设备交货。这样一个“爆炸性”的增长主要是由于终端用户越来越基于连接性的用户体验及应用程序来购买具有智能、连接性、服务导向的设备。

嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置(”devices used to control, monitor, or assist the operation of equipment, machinery or plants)。从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专业计算机系统。

本文从嵌入式系统的

等方面来概要性地介绍嵌入式系统。

1.嵌入式系统的概念

1.1嵌入式系统的定义

根据IEEE(电气和电子工程师协会)的定义,嵌入式系统是“控制、监视或者辅助装置、机器和设备运行的装置”(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。从中可以看出嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。目前国内一个普遍被认同的定义是:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专业计算机系统。

1.2 嵌入式系统的特点

1.系统内核小。由于嵌入式系统一般是应用于小型电子装置的,系统的资源相对有限,所以内核较之传统的操作系统要小得多。

2.专用性强。嵌入式系统的个性化很强,其中的软件系统和硬件的结合非常紧密,一般要针对硬件进行系统的移植,即使在同一品牌、同一系列的产品中也需要根据系统硬件的变化和增减不断进行修改。同时针对不同的任务,往往需要对系统进行较大更改,程序的编译下载要和系统相结合,这种修改和通用软件的“升级”是完全两个概念。

3.系统精简。嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能设计及实现上过于复杂,这样一方面利于控制系统成本,同时也利于实现系统安全。

4.高实时性的系统软件(OS)是嵌入式软件的基本要求。而且软件要求固态存储,以提高速度;软件代码要求高质量和高可靠性。

5.嵌入式软件开发要想走向标准化,就必须使用多任务的操作系统。嵌入式系统的应用程序可以没有操作系统直接在芯片上运行;但是为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS(Real-Time Operating System)开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。

6.嵌入式系统开发需要开发工具和环境。由于其本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。开发时往往有主机和目标机的概念,主机用于程序的开发,目标机作为最后的执行机,开发时需要交替结合进行。

1.3几个关键概念的解释

1、嵌入式处理器

嵌入式系统的核心,是控制、辅助系统运行的硬件单元。范围极其广阔,从最初的4位处理器,目前仍在大规模应用的8位单片机,到最新的受到广泛青睐的32位,64位嵌入式CPU。

2、实时操作系统

实时操作系统 (RTOS-Real Time Operating System):

嵌入式系统目前最主要的组成部分。根据操作系统的工作特性,实时是指物理进程的真实时间。实时操作系统具有实时性,能从硬件方面支持实时控制系统工作的操作系统。其中实时性是第一要求,需要调度一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。

3、分时操作系统

对于分时操作系统,软件的执行在时间上的要求,并不严格,时间上的错误,一般不会造成灾难性的后果。目前分时系统的强项在于多任务的管理,而实时操作系统的重要特点是具有系统的可确定性,即系统能对运行情况的最好和最坏等的情况能做出精确的估计。

4、多任务操作系统

系统支持多任务管理和任务间的同步和通信,传统的单片机系统和DOS系统等对多任务支持的功能很弱,而目前的Windows是典型的多任务操作系统。在嵌入式应用领域中,多任务是一个普遍的要求。

5、实时操作系统中的重要概念

系统响应时间(System response time):系统发出处理要求到系统给出应答信号的时间。

任务换道时间(Context-switching time):任务之间切换而使用的时间。

中断延迟(Interrupt latency):机器接收到中断信号到操作系统作出响应,并完成换道转入中断程序的时间。

6、实时操作系统的工作状态

实时系统中的任务有四种状态:运行(Executing),就绪(Ready),挂起(Suspended),冬眠(Dormant)。

运行:获得CPU控制权。

就绪:进入任务等待队列,通过调度转为运行状态。

挂起:任务发生阻塞,移出任务等待队列,等待系统实时事件的发生而唤醒,从而转为就绪或运行。

冬眠:任务完成或错误等原因被清除的任务,也可以认为是系统中不存在的任务。

任何时刻系统中只能有一个任务在运行状态,各任务按级别通过时间片分别获得对CPU的访问权。

2.嵌入式系统的组成

有关嵌入式系统的组成非常多,限于篇幅,本文只介绍其中机电最关键概念。 嵌入式系统的组成

1)嵌入式系统硬件层。一般包括有:嵌入式处理器、存储器、I/O系统和外设 2)嵌入式系统的软件系统。包括:操作系统、应用软件

嵌入式系统的开发工具(1)硬件开发工具包括:仿真器等;其它(示波器等)(2)软件开发工具包括:编译、连接、定位软件,通常使用C语言;调试软件。

3)中间层。它将系统软件与底层硬件部分隔离,使得系统的底层设备驱动程序与硬件无关。 4)应用层

一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,如图1-1所示,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。

2.1硬件层

硬件层中包含嵌入式微处理器、存储器(SDRAM、ROM、Flash等)、通用设备接口和I/O接口(A/D、D/A、I/O等)。在一片嵌入式处理器基础上添加电源电路、时钟电路和存储器电路,就构成了一个嵌入式核心控制模块。其中操作系统和应用程序都可以固化在ROM中。

2.1.1、嵌入式微处理器

嵌入式系统硬件层的核心是嵌入式微处理器,嵌入式微处理器与通用CPU最大的不同在于嵌入式微处理器大多工作在为特定用户群所专用设计的系统中,它将通用CPU许多由板卡完成的任务集成在芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。

嵌入式微处理器的体系结构可以采用冯诺依曼体系或哈佛体系结构;指令系统可以选用精简指令系统(Reduced Instruction Set Computer,RISC)和复杂指令系统CISC(Complex Instruction Set Computer,CISC)。RISC计算机在通道中只包含最有用的指令,确保数据通道快速执行每一条指令,从而提高了执行效率并使CPU硬件结构设计变得更为简单。

嵌入式微处理器有各种不同的体系,即使在同一体系中也可能具有不同的时钟频率和数据总线狂度,或集成了不同的外设和接口。据不完全统计,目前全世界嵌入式微处理器已经超过1000多种,体系结构有30多个系列,其中主流的体系有ARM、MIPS、PowerPC、X86和SH等。但与全球PC市场不同的是,没有一种嵌入式微处理器可以主导市场,仅以32位的产品而言,就有100种以上的嵌入式微处理器。嵌入式微处理器的选择是根据具体的应用而决定的。

2.1.2、存储器

嵌入式系统需要存储器来存放和执行代码。嵌入式系统的存储器包含Cache、主存和辅助存储器。

1.Cache

Cache是一种容量小、速度快的存储器阵列它位于主存和嵌入式微处理器内核之间,存放的是最近一段时间微处理器使用最多的程序代码和数据。

在嵌入式系统中Cache全部集成在嵌入式微处理器内,可分为数据Cache、指令Cache或混合Cache,Cache的大小依不同处理器而定。一般中高档的嵌入式微处理器才会把Cache集成进去。

2.主存

主存是嵌入式微处理器能直接访问的寄存器,用来存放系统和用户的程序及数据。它可以位于微处理器的内部或外部,其容量为256KB~1GB,根据具体的应用而定,一般片内存储器容量小,速度快,片外存储器容量大。

常用作主存的存储器有:

ROM类 NOR Flash、EPROM和PROM等。

RAM类 SRAM、DRAM和SDRAM等。

其中NOR Flash 凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。

3.辅助存储器

辅助存储器用来存放大数据量的程序代码或信息,它的容量大、但读取速度与主存相比就慢的很多,用来长期保存用户的信息。

2.1.3、通用设备接口和I/O接口

嵌入式系统和外界交互需要一定形式的通用设备接口,如A/D、D/A、I/O等,外设通过和片外其他设备的或传感器的连接来实现微处理器的输入/输出功能。

2.2软件系统

系统软件层由实施多任务操作系统(Real-time Operation System,RTOS)、文件系统、图形用户接口(Graphic User Interface,GUI)、网络系统及通用组件模块组成。RTOS是嵌入式应用软件的基础和开发平台。

嵌入式实时操作系统:

实时多任务操作系统(RTOS)是嵌入式应用软件的基础和开发平台。RTOS是一段嵌入在目标代码中的程序,系统复位后首先执行,相当于用户的主程序,其他程序都建立在RTOS之上。

2.3中间层

硬件层与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),它将系统上层软件与底层硬件分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据BSP 层提供的接口即可进行开发。该层一般包含相关底层硬件的初始化、数据的输入/输出操作和硬件设备的配置功能。

BSP具有以下两个特点:

硬件相关性:因为嵌入式实时系统的硬件环境具有应用相关性,而作为上层软 件与硬件平台之间的接口,BSP需要为操作系统提供操作和控制具体硬件的方法。

操作系统相关性:不同的操作系统具有各自的软件层次结构,因此,不同的操作系统具有特定的硬件接口形式。

3.嵌入式系统的开发

3.1嵌入式两种开发

硬件,主要使用语言是C语言和汇编,例如做dsp开发,做驱动开发,这类的开发对硬件要求比较高,短期内比较难掌握,除非是专业人士,另外,这类开发的就业机会比较少,因为国内的硬件设计力量很弱,稍复杂的硬件都交给国外公司设计,所以大学生找这样的工作很难,这也是为什么很多这类的毕业生都转行去做应用层的软件开发或者做网络维护之类的工作了。

软件,主要基于嵌入式操作系统,例如Symbian、Linux、Windows mobile、Android等等,开发人员主要从事嵌入式操作系统和应用软件的开发。特点是:比较容易上手学习,就业机会多,因为嵌入式设备的增值很大程度上取决于嵌入式软件,这占了嵌入式系统的最主要工作。越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势,所以需要大量的研发人员,而且就业前景也非常的看好。

3.2嵌入式系统开发生命周期

硬件与软件将同时进行开发。理解硬件与软件功能相互之间的关系及界限有助于确保设计要求得到完整正确的理解和实现。

早在设计要求的定义与分析阶段,就必须分配系统仿真、原型设计和行为建模结果、一旦分配结束,就可以立即着手具体的设计和实现。实时系统开发中软硬件的并行设计会使用到各种分析技术,包括:

1. 硬件与软件仿真;

2. 硬件/软件协同仿真;

3. 可调度的建模技术,如速率恒定分析;

4. 原型设计和渐进式开发。

低层仿真可以用来为总线宽度和数据流程建模,这对性能评估是非常有用的。高层仿真可以满足功能的交互,并促成硬件/软件权衡研究及有效性设计。

4.嵌入式系统的现状与发展

发展现状:

随着信息化,智能化,网络化的发展,嵌入式系统技术也将获得广阔的发展空间。

硬件方面,不仅有各大公司的微处理器芯片,还有用于学习和研发的各种配套开发包。目前低层系统和硬件平台经过若干年的研究,已经相对比较成熟,实现各种功能的芯片应有尽有。而且巨大的市场需求给我们提供了学习研发的资金和技术力量。

从软件方面讲,也有相当部分的成熟软件系统。国外商品化的嵌入式实时操作系统,已进入我国市场的有WindRiver、Microsoft、QNX和Nuclear等产品。

发展趋势:

信息时代,数字时代使得嵌入式产品获得了巨大的发展契机,为嵌入式市场展现了美好的前景,同时也对嵌入式生产厂商提出了新的挑战,从中我们可以看出未来嵌入式系统的几大发展趋势:。

1.嵌入式开发是一项系统工程,因此要求嵌入式系统厂商不仅要提供嵌入式软硬件系统本身,同时还需要提供强大的硬件开发工具和数据库支持。

目前很多厂商已经充分考虑到这一点,在主推系统的同时,将开发环境也作为重点推广。 2.网络互联成为必然趋势。

未来的嵌入式设备为了适应网络发展的要求,必然要求硬件上提供各种通信接口。传统的单片机对于网络支持不足,而新一代的嵌入式处理器已经开始内嵌网络接口,支持更多协议。

3.精简系统内核、算法,降低功耗和软硬件成本。

未来的嵌入式产品是软硬件紧密结合的设备,为了减低功耗和成本,需要设计者尽量精简系统内核,只保留和系统功能紧密相关的软硬件。

第五篇:嵌入式实验报告

嵌入式系统及应用课 程设计报告

姓名:陈宥祎

班级:14级计算机01班 学号:1255010116 指导老师:黄卫红

按键输入实验

一.实验简介

在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。

二.实验目的

熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。

三.实验内容

实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。

使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤

1在实验1代码的基础上,编写中断初始化代码

2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序 3编写中断服务程序

4编译代码,使用JLINK下载到实验板 5.单步调试

6记录实验过程,撰写实验报告

六.实验结果及测试

源代码:

我们将通过MiniSTM32 板上载有的3个按钮,来控制板上的2个LED,其中KEY0控制LED0,按一次亮,再按一次,就灭。KEY1 控制LED1,效果同KEY0。KEY_2(KEY_UP),同时控制LED0 和LED1,按一次,他们的状态就翻转一次。

七.实验总结

通过本次实验,我学会了如何使用STM32 的IO 口作为输入用。TM32 的IO 口做输入使用的时候,是通过读取IDR 的内容来读取IO 口的状态的。这里需要注意的是 KEY0 和KEY1 是低电平有效的,而WK_UP 是高电平有效的,而且要确认WK_UP 按钮与DS18B20 的连接是否已经断开,要先断开,否则DS18B20 会干扰WK_UP按键!并且KEY0 和KEY1 连接在与JTAG 相关的IO 口上,所以在软件编写的时候要先禁用JTAG 功能,才能把这两个IO 口当成普通IO 口使用。

串口通信

一.实验简介

编写代码实现串口发送和接收,将通过串口发送来的数据回送回去。

二.实验目的

掌握STM32基本串口编程,进一步学习中断处理。

三.实验内容

编写主程序,初始化串口1,设置波特率为9600,无校验,数据位8位,停止位1位。 编写中断服务程序代码实现将发送过来的数据回送。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1编写串口初始化代码

2编写中断服务程序代码

3编译代码,使用JLINK或ISP下载到实验板 4记录实验过程,撰写实验报告

六.实验结果及测试

源代码:

把代码下载到 MiniSTM32 开发板,可以看到板子上的LED0 开始闪烁,说明程序已经在跑了。接着我们打开串口调试助手,看到如下信息:

证明串口数据发送没问题。接着,我们在发送区输入上面的文字,输入完后按回车键。然后单击发送,可以得到如下结果:

七.实验总结

通过本次实验,我进一步了解了串口的使用,学会了通过串口发送和接收数据,将通过串

口发送来的数据回送回去。该实验的硬件配置不同于前两个实验,串口 1 与USB 串口默认是分开的,并没有在PCB上连接在一起,需要通过跳线帽来连接一下。这里我们把P4 的RXD 和TXD 用跳线帽与P3 的PA9 和PA10 连接起来。

外部中断

一.实验简介

STM32 的 IO 口在本章第一节有详细介绍,而外部中断在第二章也有详细的阐述。这里我们将介绍如何将这两者结合起来,实现外部中断输入。

二.实验目的

进一步掌握串口编程,进一步学习外部中断编程,提高编程能力。

三.实验内容

初始化IO口的输入,开启复用时钟,设置IO与中断的映射关系,从而开启与IO口相对应的线上中断事件,设置触发条件。配置中断分组(NVIC),并使能中断,编写中断服务函数。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1. 2. 3. 4. 编写中断服务程序代码 使用ISP下载到实验板 测试运行结果

记录实验过程,撰写实验报告

六.实验结果及测试

源代码:

打开串口助手。

七.实验总结

首先需要将IO设置为中断输入口: 1)初始化 IO 口为输入。

2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。

3)开启与该 IO口相对的线上中断/事件,设置触发条件。

4)配置中断分组(NVIC),并使能中断。

5)编写中断服务函数。

这一节,使用的是中断来检测按键,通过 WK_UP 按键实现按一次 LED0 和 LED 1 同时翻转,按 KEY0 翻转 LED0,按 KEY1 翻转 LED1。 试验中外部中断函数不能进入的原因分析 : 1)GPIO或者AFIO的时钟没有开启。 2)GPIO和配置的中断线路不匹配。 3)中断触发方式和实际不相符合。

4)中断处理函数用库函数时,写错,经常可能出现数字和字母之间没有下划线。 5)外部中断是沿触发,有可能不能检测到沿,比如 中断线是低电平(浮空输入),触发是下降沿触发,可能会出现一直是低电平,高电平的时候是一样的情况,电平持续为高电平。

6)没有用软件中断来触发外部中断,调用函数EXTI_GenerateSWInterrupt;,因为软件中断先于边沿中断处理。

独立看门狗实验

一. 实验简介

独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

二.实验目的

通过编程,编写一个独立看门狗驱动程序

三.实验内容

启动 STM32 的独立看门狗,从而使能看门狗,在程序里面必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,我们本章将通过一个 LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1. 2. 3. 4. 参考教材独立看门狗部分,编写独立看门狗驱动程序。建立和配置工程 编写代码

使用ISP下载到实验板

记录实验过程,撰写实验报告

六.实验结果及测试

源代码:

在配置看门狗后,看到LED0 不停的闪烁,如果WK_UP 按键按下,就喂狗,只要WK_UP 不停的按,看门狗就一直不会产生复位,保持LED0 的常亮,一旦超过看门狗定溢出时间(Tout)还没按,那么将会导致程序重启,这将导致LED0 熄灭一次。

七.实验总结

通过本次实验,我掌握了启动独立看门狗的步骤: 1)向 IWDG_KR 写入 0X5555。 2)向 IWDG_KR 写入 0XAAAA。 3)向 IWDG_KR 写入 0XCCCC。

通过上面 3个步骤,启动 STM32 的看门狗,从而使能看门狗,在程序里面就必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,本章通过一个LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗。在配置看门狗后,LED0 将常亮,如果 WK_UP 按键按下,就喂狗,只要 WK_UP 不停的按,看门狗就一直不会产生复位,保持 LED 0 的常亮,一旦超过看门狗溢出时间(Tout)还没按,那么将会导致程序重启,这将导致 LED 0 熄灭一次。

第六篇:嵌入式实验报告

实验一 ARM汇编语言程序设计

一、 实验目的

1. 了解IAR Embedded Workbench 集成开发环境 2. 掌握ARM汇编指令程序的设计及调试

二、 实验设备

1. PC操作系统WIN98或WIN2000或WINXP,ADSI.2集成开发环境,仿真驱动程序

三、 实验内容

1. 熟悉IAR Embedded Workbench 集成开发环境

2. 理解下列程序,新建工程,加入下面的程序,并观察实验结果,解释程序实现的功能

分析:该程序实现的功能是程序功能:Y = A*B+C*D+E*F 程序代码:

AREA Examl, CODE,READONLY ;定义一个代码段 ENTRY

;程序入口

MOV R0,#0;设置R0寄存器的值为0 MOV R8,#0;设置R8寄存器的值为0 ADR R2,N;将R2寄存器的值设为数据域N的地址 LDR R1,[R2];将以R2的值为地址的数据读入R1 MOV R2,#0;设置R2的值为0 ADR R3,C; 将R3寄存器的值设为数据域C的地址 ADR R5,X; 将R5寄存器的值设为数据域X的地址 LOOP LDR R4,[R3,R8];将R3+R8的数据读入R4 LDR R6,[R5,R8];将R5+R8的数据读入R6 MUL R9,R4,R6;R9 = R4*R6 ADD R2,R2,R9;R2 = R2+R9 ADD R8,R8,#4;R8 = R8+4 ADD R0,R0,#1;R0 = R0+1 CMP R0,R1;比较R0和R1的值 BLT LOOP;R0

执行结果如下:

3. 实现1+2+3+4+····+100,求的值,并保存在地址0x90018的地址里面

程序代码:

MOV R0,#100;设置R0寄存器的值为100 LDR R2,=0X90018;设置R2寄存器指向地址0x90018 MOV R1,#0;设置R1的值为0 MOV R3,#0;设置R3的值为0 LOOP ADD R3,R3,R0;R3 = R3+R0 SUB R0,R0,#1;R0 = R0-1 CMP R0,R1;将R0和R1的值比较

BNE LOOP;不相等的话继续执行循环

STR R3,[R2];将R3的值装入到R2指向的地址块中。 END 程序执行结果:程序执行完在0x90018内存入的数据是0x13ba即5050

实验二 ARM汇编语言程序设计

一、实验目的

1. 了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程; 2. 掌握ARM汇编指令中的堆栈指令的操作,以及存储器的装载指令操作。

二、实验设备 1. PC操作系统WIN98或WIN2000或WINXP, ADS1.2. 集成开发环境,仿真器驱动程序。

三、实验内容

1. 理解下列程序,新建工程,加入下面的程序,并观察实验结果

程序代码:

x EQU 15;定义常量x=15 y EQU 61;定义常量y=61 stack_top EQU 0X1000;定义堆栈栈顶地址为0x1000 ENTRY;程序入口处

MOV sp,#stack_top;将堆栈指针指向栈顶 MOV r0,#x;将x的值放入r0 STR r0,[sp];将r0的值压入堆栈 MOV r0,#y;将y的值放入r0 LDR r1,[sp];将x的值放入r1 ADD r0,r0,r1;r0 = r0+r1 STR r0,[sp];将r0的值装入堆栈 Stop; B stop; 程序结果为:r1 = x+y = 0x6D

2. 编写程序循环R4~R11进行累加8次赋值,R4~R11初始值是1~8,每次操作后把R4~R11的内容放到SP栈中,SP初始设置为0x800,最后把R4~R11用LDMFD指令清空为0

程序代码如下: X EQU 1;定义常量x = 1 stack_top EQU 0X800;定义栈顶地址 ENTRY; MOV SP,#stack_top;将栈顶地址指向0x800 MOV R4,#1;设置R4 = 1 MOV R5,#2;设置R5 = 2 MOV R6,#3;设置R6 = 3 MOV R7,#4;设置R7 = 4 MOV R8,#5;设置R8 = 5 MOV R9,#6;设置R9 = 6 MOV R10,#7;设置R10 = 7 MOV R11,#8;设置R11 = 8 LOOP ADD R4,R4,#x; R4累加1 ADD R5,R5,#x; R5累加1 ADD R6,R6,#x; R6累加1 ADD R7,R7,#x; R7累加1 ADD R8,R8,#x; R8累加1 ADD R9,R9,#x; R9累加1 ADD R10,R10,#x; R10累加1 ADD R11,R11,#x; R11累加1 STMIA SP!,{R4-R11};将R4-R11的值压入堆栈

CMP R4,#9;比较R4和9的大小

BLT LOOP;R4 < 9继续执行循环

LDMFD SP!,{R4-R11};将R4-R11清零 END; 实验结果:主要实现将数据2-9,3-10,4-11……9-16压入堆栈(初始地址是0x800处开始),最后将R4-R11全部清零。

3. 更改实验中1中的X,Y的值,观察期结果 程序代码:

x EQU 20 y EQU 120 stack_top EQU 0X1000 ENTRY MOV sp,#stack_top MOV r0,#x STR r0,[sp] MOV r0,#y LDR r1,[sp] ADD r0,r0,r1 STR r0,[sp] Stop B Stop END 程序结果为:r0 = x+y = 140 = 0X8C

实验三 ARM汇编语言程序设计

一、 实验目的

1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程

2.掌握ARM汇编的存储器加载/存储指令,及if条件、循环、循环及循环的汇编实现

二、实验设备

1.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真器驱动程序

三、实验内容

1. 理解下列程序,新建工程,加入下面的程序,并观察实验结果 程序代码:

Num EQU 20;定义常量Num = 20 START; LDR r0,=src;将src数据块的开始地址存入r0中 LDR r1,=dst; 将dst数据块的开始地址存入r1中 MOV r2,#Num;设置r2的值为20 MOV sp,#0x400;堆栈指针sp指向0x400 blockcopy; MOVS r3,r2,LSR #3;将r2左移3位移入r3并且影响标志位 BEQ copywords;结果为0的话跳转到copywords STMFD SP!,{r4-r11};将r4-r11的值入栈 octcopy; LDMIA r0!,{r4-r11};将src的前8个字数据存入让r4-r11 STMIA r1!,{r4-r11};将r4-r11中的数据放入dst数据块中 SUBS r3,r3,#1;r3 = r3-1 BNE octcopy;结果不为0跳转到octcopy LDMFD SP!,{R4-R11};恢复原来的r4-r11 copywords; ANDS r2,r2,#7; r2 = r2&7 BEQ stop;结果为0跳转到stop wordcopy; LDR r3,[r0],#4;将r0指向的字数据放入r3中,r0 = r0+4 STR r3,[r1],#4;将r3中的数据存入到dst数据块中,r1 = r1+4 SUBS r2,r2,#1;r2 = r2 -1 BNE wordcopy;不为0跳转到wordcopy处 stop; B stop; src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4; dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; END; 程序结果:将src的数据全部存入到dst中

2. 新建工程,并自行编写程序,分别使用LDR,STR,LDMIA,STMIA操作,实现对某段连续存储单元写入数据,并观察结果 程序代码:

MOV R4,#1;设置r4 = 1; MOV R5,#2; 设置r5 = 1; MOV R6,#3;设置r4 = 1;

LDR R0,=dst;R0保存dst的首地址

STR R4,[R0];将r4的值装入r0执行的内存中

STR R5,[R0,#4]; 将r5的值装入r0+4执行的内存中 STR R6,[R0,#8]; 将r6的值装入r0+8执行的内存中 LDR R7,=src; R0保存src的首地址

LDMIA R7,{R8-R10};将r7执行的地址的数据读入r8=r10 LDR R3,=N;r3保存N的首地址

STMIA R3!,{R8-R10};将r8-r10装入r3指向的内存 N DCD 0,0,0 src DCD 1,2,3 dst DCD 0,0,0 END 程序结果:熟悉使用LDMIA,STMIA和LDR,STR指令

3. 使用ARM汇编指令实现if条件执行,使用ARM汇编指令实现for条件执行,

使用ARM汇编指令实现while条件执行,使用ARM汇编指令实现do…while条件执行。 程序代码:

实现if条件: MOV R0,#1 MOV R1,#2 CMP R0,R1 BGT LOOP1 BLT LOOP2 LOOP1 MOV R3,R0 LOOP2 MOV R3,R1 END 程序结果:

实现for和while条件:

MOV R1,#1 MOV R3,#0 MOV R2,#101; LOOP ADD R3,R1,R3 ADD R1,R1,#1 CMP R1,R2 BLT LOOP END 程序结果:

实现do…while条件:

MOV R0,#1 MOV R1,#100 MOV R3,#0 LOOP CMP R0,R1 BGT STOP ADD R3,R0,R3 ADD R0,R0,#1 B LOOP STOP END 程序结果:

实验四 基于ARM的C语言程序设计

一、实验目的

1.了解ARM C语言的基本框架,学会使用ARM的C语言编程。 2. 掌握C语言和汇编语言编程的相互调用。

二、实验设备

1. EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆。

三、ARM C语言简介与使用规则

1. ARM使用C语言编程是大势所趋

在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量巨大,并且不宜移植。由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。因此,C语言的在ARM编程中具有重要地位。

2. ARM C语言程序的基本规则

在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。

C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。

在使用C语言时,要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通过ATPCS的规定与C程序相互调用与访问。

ATPCS,就是ARM、Thumb的过程调用标准(ARM/Thumb Procedure Call Standard),它规定了一些子程序间调用的基本规则。如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。

在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。而使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,汇编语言的子程序应满足下面3个条件:

● 在子程序编写时,必须遵守相应的ATPCS规则; ● 堆栈的使用要遵守相应的ATPCS规则; ● 在汇编编译器中使用-atpcs选项。 基本的ATPCS规定,请详见相关技术文档。

汇编程序调用C程序

汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。 在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。 在调用C程序时,要正确设置入口参数,然后使用BL调用。

C程序调用汇编程序

汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。

在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。 在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。

在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup44b0/INC目录下都有一个44b.h的头文件,那里面定义了所有关于44B0的硬件寄存器的宏,对宏的读写,就能操作44B0的硬件。

具体的编程规则同标准C语言。

四、实验内容

1、理解下列程序,新建工程,加入下面的程序,并观察实验结果。 程序代码:

/*实现5个数的相加*/ int sum5(int a,int b,int c,int d,int e){ return (a+b+c+d+e); } ;汇编语言

IMPORT sum5;声明调用c函数 CALLSUMS STMFD SP!,{LR};将LR寄存器入栈 MOV R0,#1;r0 = 1 ADD R1,R0,R0;r1 = 2 ADD R2,R1,R0;r2 = 3 ADD R3,R1,R2;r3 = 5 STR R3,[SP,#-4]!;将r3的值入栈当做第五个参数 ADD R3,R1,R1;R3 = R3+R1=4 BL sum5;调用sum5 ADD SP,SP,#4;sp = sp+4 LDMFD SP,{PC} 程序结果:实现了i+2i+3i+4i+5i的汇编语言调用c语言

2、用汇编语言实现1到100累加的函数,用C言语编写主程序,在主程序中调用所编写的汇编函数 程序代码:

NAME asmfile PUBLIC sum5 SECTION .intvec : CODE (2) CODE32 sum5 ENTRY MOV R1,#1 MOV R2,#0 sum6 ADD R2,R1,R2 ADD R1,R1,#1 CMP R1,R0 BLE sum6 MOV PC,LR END

#include extern void sum5(int x); int main(void){ const int n = 100; sum5(n); return(0); } 程序结果:

总结

本次实验主要是通过对ARM的各种指令进行操作,通过对这些指令的应用,让我们学会了如何使用汇编来进行编程,掌握汇编编程和C语言编程的技巧,并且能够熟练的使用汇编语言,深刻理解ARM的工作。并且培养了我们写代码的能力以及对代码的阅读能力和修改能力。为我们在以后的学习和生活中更实用ARM,利用汇编进行编程奠定了一定的基础!

上一篇:青协申请书下一篇:强军梦演讲稿