嵌入式系统就业前景

2022-08-22

第一篇:嵌入式系统就业前景

嵌入式系统

嵌入式系统 实验报告

闻悦 孙恩比 虞淦超 孙德一 滑冰 2010年1月5日

一. 选题

我们组的实验题目是:将配制过并且用Open64编译过的linux操作系统移植到ebox中。 这个实验是编译原理实验和嵌入式系统实验的结合。我们的小组成员有三位选了董渊老师的编译原理专题训练。当时董渊老师对大实验给出了一个提议,用open64编译器编译busybox,并且和嵌入式系统实验相结合。我们组员感觉这将是一个很好的尝试。另外,在ebox平台上运行linux,网上鲜有现成的案例。我们觉得,虽然ebox运行Embedded WinCE已经可以满足很多商业上的需求,但是linux有它的许多特点是WinCE不具备的。显然最重要的就是它的开源特性,使得功能的开发变得更加灵活,虽然可能没有WinCE容易上手,但是linux可以支持更多的CPU类型,应用的场合也较多。

新的创意往往可以激发我们的干劲。实验刚一开始,我们就为这个前所未有的挑战而激动万分,跃跃欲试。我们也很想通过实验,使得我们在学习嵌入式系统新知识的同时,尝试运用编译知识和巩固以前学过的操作系统知识,以达到使知识融会贯通、学以致用的目的。

在接下来的实验报告中,我们将主要体现嵌入式实验部分的工作。

二. 实验过程

嵌入式linux操作系统的三大要素是:bootloader, kernel image和根文件系统。我们也就按照这三点要素来总结我们的实验流程。

1. 初选bootloader

在查阅了一些嵌入式linux的资料后,我们把bootloader的备选集定位在了lilo、grub和syslinux上面。根据我们的实验设计,我们希望首先尝试用U盘引导,之后再尝试把U盘的内容写到ebox里面引导linux。明确了需求,我们就对这些bootloader的功能和适用性进行了比较。

Lilo是Grub的前身,grub在很多功能上加强了lilo,在实验设计做好之后,我们进一步询问业内人士并且得到了一些建议:GRUB不像LILO一样使用裸扇区,而是可以从ext2或ext3文件系统中加载Linux内核。这也就是说,如果用U盘做引导,lilo可能不能用,而grub是可以的。syslinux相对于grub是一个更轻量级的引导器,一般用于光盘和U盘。原本我们认为syslinux可能比grub更适合我们的实验,但是由于网上关于grub的参考更多一些,并且我们认为grub是可以胜任预期的工作。于是我们没有实验syslinux,用grub开始了我们的初期实验之旅。

2. 编译配制kernel

构建一个根文件系统首先需要的就是加载一个kernel。我们将busybox集成在内核中,这样kernel启动后,再加载initramfs,就可以直接进入带shell的linux环境中了。

kernel我们选择的是Linux2.6.31.6的最新版本。由于ebox使用的Vortex也是x86系统的,因此不需要交叉编译。在编译kernel的时候,我们指定的是自己的initramfs。我们的initramfs只是增加了一个init文件。init是一个hello.c文件,如下: hello.c:

#include #include int main(int argc,char argv[]) { printf("hello world, from initramfs. "); sleep(9999999); return 0; }

创建一个initramfs的源文件目录image,把hello程序拷入,并改名为init。在image下,创建一个dev/console的设备文件,否则无法输出helloworld。

mknod -m 600 dev/console c 5 1

在编译kernel时,在general setup配置目录下的initramfs sources配置项下输入image的路径名。 为我们的init程序是ELF格式的,所以内核需要支持ELF的可执行文件,否则启动这个init程序会失败。在内核的 Executable file formats配置目录下,选择 kernel support for ELF binaries,则可使内核支持ELF格式的可执行文件。

在编译kernel的时候,需要配置选项。kernel中有很多可选模块,makeallconfig是加载所有模块,这样做编译完kernel会很大。makenoconfig是最小化kernel。我们一开始使用的是makedefconfig,使用默认的配置。但是事实证明这是不可取的。在后来grub加载kernel中,出现了cmov问题。kernel无法加载,这是由于可能ebox的主机不支持kernel中的cmov指令。后来我们从网上查找了相关的资料。http://.tw/tech/os-xlinux/详细介绍了在Vortex86上的移植。我们下载了kernel,它的kernel非常小,只有2.1Mb,这个kernel是可以用的,但是缺少了硬盘驱动。我们认为可能是在配置的时候,在device一块少了写什么。我们详细试验了一下几个选项的配置:

Generic Driver Options,Block devices,SCSI device support,Serial ATA and Parallel ATA drivers,Multi-device support (RAID and LVM),Input device support,ATA/ATAPI/MFM/RLL support,经过反复的调试,但是硬盘识别的问题还是没有解决,在进入根目录后,没有找到hd0或是sda文件夹,我们也很困惑。不知道是不是将busybox集成带来的问题。

3. 内核中集成Busybox——构造根文件系统

一个简单的内核运行在ebox中是没有意义的,我们进而考虑了如何利用busybox构造基于linux的嵌入式根文件系统。Busybox是一种可以提供很多标准的Unix工具的开源软件,它是专门为linux量身打造的一个轻便的软件包,对于嵌入式系统来说是十分合适的。busybox的使用也是我们此次实验与编译原理专题训练相结合的地方,编译实验要求我们利用目前还不完善的Open64编译器对Busybox源码进行编译,这部分在这里不多说。

在构建根文件系统之前,我们并没有使用busybox,而是尝试构建一个最简单的根文件系统。经过查阅资料,我们发现在编译linux内核的过程中,可以将文件系统部分直接编译到内核当中,这样在内核加载到内存中的时候,文件系统也会相应的随之加载。于是仿照一般的linux的文件系统的目录结构,我们尝试构建自己的文件目录(dev, sys, bin等)。linux内核成功加载之后,会首先运行一个根目录中的名字为init程序,于是我们写了一个打印helloworld的程序,编译之后生成名字为init的可执行文件。然后在qemu模拟器中运行,可以看到在内核加载完毕之后在屏幕上打印helloworld,初期的尝试性工作完成。

关于Busybox使用的第二个步骤是尝试将Busybox编译到内核当中,其中涉及到得问题是如何编译与安装Busybox。在安装Busybox的过程中,程序会自动在选定的安装目录中建立linux的目录结构,并且在/bin中加入了linux的命令。这里需要说明一下,Busybox的功能主要体现在/bin目录中的可执行程序,在编译Busybox的过程中,可以选择让Busybox支持什么样的linux指令,这样在编译安装结束后就会在/bin中出现相应的命令,编译好的linux内核也会支持相应的命令。安装Busybox成功之后,按照初期尝试的编译内核方法,将busybox编译到内核中去。这里需要注意一个问题,如果想在新生成的linux中使用busybox命令,就必须在系统初始化的过程中启动busybox的功能,这是就需要修改init程序。我们以shell脚本的方式写了一个init程序,该程序最后会启动/bin/sh命令(进入新的系统的shell程序)。上述工作完成之后,在qemu中进行模拟,可以发现此时的linux已经支持了常用的linux命令。

尝试busybox的第三个过程是如何将rootfs与kernel分离,之前的工作都是将构建好的文件系统直接编译到内核中,这样如果文件系统过大的话会增加内核的负担,另外,如果嵌入在内核中的文件系统就要求我们每次调试过程都要重新编译一边内核,花费比较多的时间。在这个步骤之中我们通过linux中带的cpio命令,该命令可以对指定的目录中的所有文件进行压缩,生成一个initrd文件,恰好达到我们的要求。这样,最终在qemu中模拟时不仅要选择使用的内核,也要指定相应的initrd。

4. 第一次尝试

我们把编译完成的kernel image,initrd文件连同grub一起考到U盘里面,进入ebox,在MBR处选择U盘启动,运行grub,定位kernel和initrd,最后boot,但是boot失败,错误在initrd里面,系统意外中止了。随即我们更换了kernel的版本,重新设置kernel选项,尝试了无数种选项的组合,但是每次boot的时候,这个问题始终存在。

5. 第二次尝试

在第一次尝试失败后,我们一度有些摸不清问题的所在,有些灰心丧气。元旦之前集体到陶老师处询问,并且也发邮件给ICOP的工作人员询问了关于kernel无法被引导的问题。看着网上众口不一的解决方案,我们也总结出了一些可能有效的办法。既然实验就是上面的几个部分组成,我们不妨试验一下换一换bootloader,或者换一换kernel。

换kernel是一件比较麻烦的事情,因为这个实验的kernel部分和编译的关系最密切。一旦换kernel,光编译就需要很久,编译部分的实验也要返工。我们大胆决定先换一个bootloader试试看,很幸运,我们成功了。

Grub4dos,一位活跃在某国际嵌入式爱好者论坛的外国朋友曾经向我们提到了这个引导工具,在我们最困难的时候,隔壁宿舍的周以苏同学也提议让我们试一试这个。它是一款主要由中国人维护的grub工具,对原始的grub做了许多改进。我们想既然外国朋友都向我们推荐我们自己的准国产工具,那我们不妨试试。

在用grub4dos替换掉了原先的grub之后,我们再次启动ebox,显示成功。

6. 告别U盘

U盘引导完成之后, 我们就很容易告别U盘了。在ebox自带的WinCE里,我们把U盘里面的linux目录拷贝到ebox的硬盘根目录下。再次启动ebox,通过原始默认的MBR进入DOS,运行刚刚拷贝到硬盘根目录下linux文件夹里面的grub4dos,进入grub4dos,设置好kernel和initrd的位置,boot。linux便可以在没有U盘的情况下,直接运行在ebox上了。

7. 用grub4dos做MBR

我们现在完成的linux boot过程可以简要概括为: 利用ebox原有的MBR(Master Boot Record)进入DOS,在DOS中找到ebox硬盘里面的grub4dos,利用grub4dos定位kernel和initrd,完成boot。可是在每次boot之前,都需要做一些引导设置的操作。实际grub4dos是可以省略这个二次引导的。它可以被直接装入MBR里面引导kernel和文件系统。我们尝试了这个装入。通过grub4dos提供的grub> fdisk /mbr命令。装入之后启动ebox,出现error 16并无法继续启动。由于原先的MBR已经被替换,ebox也没办法进入dos下,实验到此结束。

三. 进一步工作的设想

1. 用grub4dos做MBR

在一些情况下,用grub做二次引导的bootloader会更方便,而另一些情况是,把grub装入MBR内会更方便。我们上面已经提到,在实验的最后,装入MBR的过程没有成功。可能是因为误删除了一些grub的文件所致。这一步工作还可以继续尝试。 2. 尝试使用syslinux作为bootloader完成实验

这只是一个尝试。因为我们在实验中并没有实测syslinux这个bootloader是否可以很好地工作。实际上grub4dos已经很好了。 3. 使用支持更多linux功能的kernel

我们编译的kernel只是一个功能简单到不能再简单的kernel。一个实用的kernel必须做得更好,支持更多的功能,新添更多支持ebox的驱动。

四. 实验心得体会

我们这次实验完成将配制过并且用Open64编译器编译过的linux操作系统移植到ebox中。工作大致可以分为编译部分和ebox引导部分。编译部分我们完成了用open64编译kernel以及根文件系统。ebox引导部分我们将编译好的linux操作系统移植到了ebox上。在实验中涉及到许多学科的知识,我们将编译原理、嵌入式系统乃至操作系统等课程的知识结合在一起进行实际使用,是嵌入式系统课之前所没有同学尝试过的一次创新性的实验。当然,有创新,就会有很多不确定的因素,这对我们来说是一次风险性的挑战。实验没有现成的文档可以参考,而且有关ebox上移植linux系统的资料也并不多。在我们遇到问题的时候,我们想了很多方法去解决,在一次次失败中磨练了我们,也使我们对我们的实验越来越深入,越来越了解。在一步一步克服困难的努力中,我们都学到了很多。现在我们做到了这个程度,可以说我们基本上赢了。很感谢老师提供的文档帮助我们解决了一些问题,也很感谢隔壁宿舍的张伟达同学和周以苏同学的帮助,更是有网络上很多国内外的嵌入式爱好者们耐心地解答我们用邮件咨询的种种问题。如此的参与规模,可以说这个实验是大学期间最难以忘怀的实验之一。在实验中,我们真切地体会了团队合作精神,大家一起想办法,同时在团队讨论中,我们每个人都学到了很多。我们觉得,这个实验其实是可以做为一个基础实验来给之后的同学做的。相比于基础实验中在ebox上安装WinCE,我们这个linux实验与底层更贴近。整个boot的过程都在实验的每个环节中充分地体现出来。做完实验,我们可以对MBR、bootloader以至加载kernel和文件系统的整体流程更加清晰。实验还残留着上面提到的一些问题,希望以后会有同学可以继续探索这个实验,也希望这个实验可以继续对以后同学有所帮助吧。

第二篇:嵌入式系统设计论文

业:

电子信息工程(信号处理)

级:

名:

指导教师:

分:

月 日

【摘要】

当今信息时代,嵌入式系统的应用无处不在,而ARM嵌入式系统应用市场份额约占75%。从嵌入式系统的基本概念入手,分别从ARM的定义、ARM微处理器、ARM开发工具及调试方法来介绍ARM嵌入式系统基础知识。接着,讨论了ARM嵌入式系统的实时性要求,介绍了目前市场上的实时多任务操作系统(RTOS)。最后,概括了ARM技术的应用领域及其产业化发展,并预测ARM技术发展的前景。

关键词:嵌入式系统;ARM;微处理器;RTOS

目录

1.引言 ...................................................................... 1 2 .嵌入式系统 ................................................................ 1 2.1 2.2

................................................... 1 ................................................... 1 3 .ARM嵌入式系统 ............................................................ 2 3.1 什么是ARM ......................................................... 2 3.2 ARM3.3 ARM3.4 ARM3.5 ARM

............................................. 2 ................................................. 3

............................................. 3

................................... 4 4. ARM嵌入式系统的实时性要求 ................................................ 5 4.1 嵌入式系统软件需要RTOS

.................................... 5 4.2 RTOS ............................................................... 6 5.嵌入式系统的信息产业化发展 ................................................. 6 5.1 ARM

................................................. 6 5.2 嵌入式系统产业化发展 ................................................. 7 6...................................................................... 7 参考文献..................................................................... 8

1.引言

随着计算机技术、网络技术和微电子技术的深入发展,嵌入式系统的应用无处不在。

ARM是目前公认的业界领先的32位嵌入式RISC(精简指令计算机)微处理器。ARM技术日益成熟和不断发展,正在逐步渗入到我们生活的各个方面。

本文从实际出发,首先介绍嵌入式系统的基本概念,随之重点阐述了由ARM微处理器构成的嵌入式系统(简称ARM嵌入式系统)的基础知识,最后分析了ARM技术的产业化发展过程及发展趋势。

2 .嵌入式系统

2.1

嵌入式系统的英文叫做Embedded System,是一种包括硬件和软件的完整的计算机系统,但又跟通用计算机系统不同。嵌入式系统的定义是:“嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可剪裁,适用于应用系统对功能、可靠性、成本、体积和功耗有严格要求的专用计算机系统。”嵌入式系统所用的计算机是嵌入到被控对象中的专用微处理器,但是功能比通用计算机专门化,具有通用计算机所不能具备的针对某个方面特别设计的、合适的运算速度、高可靠性和较低比较成本的专用计算机系统。

2.2

嵌入式系统作为一类特殊的计算机系统,自底向上包含有3个部分,如图1所示。

(1)硬件环境:是整个嵌入式操作系统和应用程序运行的硬件平台,硬件平台包括嵌入式处理器和外围设备。嵌入式处理器是嵌入式系统的核心,是控制、辅助系统运行的硬件单元。

(2)嵌入式操作系统:完成嵌入式应用的任务调度和控制等核心功能。具有内核较精简、可配置、与高层应用紧密关联等特点。嵌入式操作系统具有相对

1 不变性。

(3)嵌入式应用程序:运行于操作系统之上,利用操作系统提供的机制完成特定功能的嵌入式应用。不同的系统需要设计不同的嵌入式应用程序。

3 .ARM嵌入式系统

3.1 什么是ARM

ARM是Advanced RISC Machines的缩写,是微处理器行业的一家知名企业,该企业设计了大量廉价、高性能、低功耗的RISC

ARM技术有很好的性能和功效,其合作伙伴包括世界许多顶级的半导体公司。目前,共有30家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG半导体、NEC、SONY、PHILIPS和国家半导体这样的大公司。可以说,ARM不仅仅代表一个公司,代表了一类微处理器,代表了一种技术,还代表了一种新型的产业发展模式。

3.2 ARM处理器核系列及应用

ARM公司开发了一系列ARM处理器核。目前最新的系列已经是ARM11了。ARM6及更早的系列已经罕见了,ARM7以后的核也不是都获得广泛应用。目前应用最多的是ARM7系列、ARM9系列、ARM9E系列、ARM10系列、SecurCore系列、Intel的StrongARM 、XScale

ARM7系列:包括ARM7TDMI、ARM7TDMI-S、带有高速缓存处理器宏单元的ARM720T和扩充了Iazelle 的ARM7EJ-S。该系列广泛应用于多媒体和嵌入式设备,包括Internet设备、网络和调制解调器设备以及移动电话、PDA等无线设备。

ARM9系列:包括ARM9TDMI、ARM920T和带有高速缓存处理器宏单元的ARM940T。该系列主要应用于引擎管理、仪器仪表、安全系统、机顶盒、高端打印机、PDA、网络电脑以及带有MP3音频和MPEG4视频多媒体格式的智能电话

ARM9E系列:为综合处理器,包括ARM926EJ-S、带有高速缓存处理宏单元的ARM966E-S/ARM946E-S。该系列强化了数字信号处理功能,可应用于需要DSP与微控制器结合使用的情况,将Thumb技术和DSP都扩展到ARM指令集中,并

2 具有EmbeddedICE-RT

ARM10系列:包括ARM1020E和ARM1020E微处理器核。其核心在于使用向量浮点(VFP)单元VFP10提供高性能的浮点解决方案,从而极大地提高了处理器的整型和浮点运算性能,为用户界面的2D和3D图形引擎应用夯实基础,

SecurCore系列:包括SC100、SC

110、SC200和SC210处理器核。该系列主要针对新兴的安全市场,以一种全新的安全处理器设计为智能卡和其他安全IC开发提供独特的32位系统设计,并具有特定的反伪造方法,从而有助于防止对

StrongARM系列:StrongARM处理器将Intel处理器技术和ARM体系结构融

Xscale系列:提供全性能、高性价比和低功耗的解决方案,支持16位Thumb指令和DSP指令。

3.3 ARM微处理器的特点

采用RISC体系架构的ARM微处理器一般有如下特点: (1)体积小、低功耗、低成本、高性能;

(2)支持Thumb(16位)/ARM(32位)双指令集,能很好的兼容8位/16位器件;

(3)大量使用寄存器,指令执行速度更快; (4)大多数数据操作都在寄存器中完成; (5)寻址方式灵活简单,执行效率高; (6)指令长度固定。

3.4 ARM微处理器的指令结构

ARM微处理器在较新的体系结构中支持两种指令集:ARM指令集和Thumb指令集。其中,ARM指令为32位的长度,Thumb指令为16位长度。Thumb指令集为ARM指令集的功能子集,但与等价的ARM代码相比较,可节省30%-40%以上的存储空间,同时具备32位代码的所有优点。

3 3.5 ARM嵌入式系统开发工具及调试方法

ARM处理器产品作为一种高性能、低功耗的处理器产品,现在已经得到广泛的应用。

ARM开发工具也因此得到发展,除ARM公司自己推出ARM集成开发工具外,还有一些公司也研发ARM开发工具。目前市场上有ARM SDT、ARM ADS、MULTI 2000、Hitools for ARM、Embest IDE for ARM五种集成开发环境。这些产品在国内有相对较畅通的销售渠道,用户容易购买。前三种由国外厂商出品,历史比较悠久,在全球范围内应用较为广泛,后两种由国内厂商推出,具有很高的性价比。

ARM应用软件的开发工具根据功能的不同,分别有编译软件、汇编软件、链接软件、调试软件、嵌入式实时操作系统、函数库、评估板、JTAG仿真器、在线仿真器等。

用户选用ARM处理器开发嵌入式系统时,选择合适的开发工具可以加快开发进度,节省开发成本。因此一套含有编辑软件、编译软件、汇编软件、链接软件、调试软件、工程管理及函数库的集成开发环境(IDE)一般来说是必不可少的,至于嵌入式实时操作系统、评估板等其他开发工具则可以根据应用软件规模和开发计划选用。目前常见的调试方法有以下几种。

(1)指令集模拟器。

部分集成开发环境提供了指令集模拟器,可方便用户在PC机上完成一部分简单的调试工作,但是由于指令集模拟器与真实的硬件环境相差很大,因此即使用户使用指令集模拟器调试通过的程序也有可能无法在真实的硬件环境下运行,

(2)驻留监控软件。

驻留监控软件(Resident Monitors)是一段运行在目标板上的程序,集成开发环境中的调试软件通过以太网口、并行端口、串行端口等通讯端口与驻留监控软件进行交互,由调试软件发布命令通知驻留监控软件控制程序的执行、读写存储器、读写寄存器、设置断点等。

驻留监控软件是一种比较低廉有效的调试方式,不需要任何其他的硬件调试和仿真设备。ARM公司的Angel就是该类软件,大部分嵌入式实时操作系统也是采用该类软件进行调试,不同的是在嵌入式实时操作系统中,驻留监控软件是作为操作系统的一个任务存在的。

驻留监控软件的不便之处在于它对硬件设备的要求比较高,一般在硬件稳定之后才能进行应用软件的开发,同时它占用目标板上的一部分资源,而且不能对

4 程序的全速运行进行完全仿真,所以对一些要求严格的情况不是很适合。

(3)JTAG仿真器。

JTAG仿真器也称为JTAG调试器,是通过ARM芯片的JTAG边界扫描口进行调试的设备。JTAG仿真器比较便宜,连接比较方便,通过现有的JTAG边界扫描口与 ARM CPU 核通信,属于完全非插入式(即不使用片上资源)调试,它无需目标存储器,不占用目标系统的任何端口,而这些是驻留监控软件所必需的。另外,由于JTAG调试的目标程序是在目标板上执行,仿真更接近于目标硬件,因此,许多接口问题,如高频操作限制、AC和DC参数不匹配,电线长度的限制等被最小化了。使用集成开发环境配合JTAG仿真器进行开发是目前采用最多的一种调试方式。目前国际市场上较流行的两种JTAG仿真器:EPI公司的JEENI和ARM公司的Multi-ICE。

(4)在线仿真器。

在线仿真器使用仿真头完全取代目标板上的CPU,可以完全仿真ARM芯片的行为,提供更加深入的调试功能。但这类仿真器为了能够全速仿真时钟速度高于100MHz的处理器,通常必须采用极其复杂的设计和工艺,因而其价格比较昂贵。在线仿真器通常用在ARM的硬件开发中,在软件的开发中较少使用,其价格高昂也是在线仿真器难以普及的因素。

另外国际市场上较流行的有两种JTAG仿真器:EPI公司的JEENI和ARM公司的Multi-ICE。

4. ARM嵌入式系统的实时性要求

4.1 嵌入式系统软件需要RTOS开发平台

通用计算机具有完善的操作系统和应用程序接口(API),是计算机基本组成不可分离的一部分,应用程序的开发以及完成后的软件都在OS平台上面运行,但一般不是实时的。嵌入式系统则不同,应用程序可以没有操作系统直接在芯片上运行;但是为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。

5 4.2 RTOS

RTOS是英文Real Time multi-tasking Operation System的缩写,即实时多任务操作系统。它是嵌入式应用软件的基础和开发平台。目前在中国大多数嵌入式软件开发还是基于处理器直接编写,没有采用商品化的RTOS,不能将系统软件和应用软件分开处理。RTOS最关键的部分是实时多任务内核,它的基本功能包括任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理、旗语管理等,这些管理功能是通过内核服务函数形式交给用户调用的,也就是RTOS的API。RTOS的引入,对嵌入式软件的标准化和加速知识创新是一个里程碑。

5.嵌入式系统的信息产业化发展

5.1 ARM技术的应用领域

现在,嵌入式技术无处不在,ARM几乎成为嵌入式技术的代名词。作为一种16/32位高性能、低成本、低功耗的嵌入式RISC微处理器,ARM微处理器目前已经成为应用广泛的嵌入式微处理器。ARM微处理器及技术的应用几乎已经深入到各个领域。

(1)工业控制领域:作为32位的RISC架构,基于ARM核的微控制器芯片不但占据了高端微控制器市场的大部分市场份额,同时也逐渐向低端微控制器应用领域扩展,ARM控制器的低功耗、高性价比,向传统的8位/16位微控制器提出了挑战。

(2)无线通讯领域:目前已有超过85%的无线通讯设备采用了ARM技术,ARM以其高性能和低成本,在该领域的地位日益巩固

(3)网络应用:随着宽带技术的推广,采用ARM技术的ADSL芯片正逐步获得竞争优势。此外,ARM在语音及视频处理上进行了优化,并获得广泛支持,也对DSP的应用领域提出了挑战。

(4)消费类电子产品:ARM技术在目前流行的数字音频播放器、数字机顶盒和游戏机中得到广泛应用。

(5)成像和安全产品:现在流行的数码相机和打印机中绝大部分采用ARM技术。手机中的32位SIM智能卡也采用了ARM技术。

6 除此以外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。

5.2 嵌入式系统产业化发展

市场需求为嵌入式系统产业化发展注入巨大推动力。嵌入式系统的市场是巨大的,市场需求是嵌入式系统产业化发展的巨大推动力。据报告,10%~20%的计算机芯片是为台式或便携式电脑设计的,80%~90%的计算机芯片是为嵌入式设备设计的,这意味着每年有10亿至20亿个CPU是为嵌入式设备设计制造的。2003年,全球嵌入式系统产品的产值已达2000亿美元,估计全世界嵌入式系统产品潜在的市场将超过10 000亿美元。世界范围内嵌入式系统带来的工业年产值已超过了1万亿美元。

6.

随着半导体工艺技术的发展及系统设计水平的提高,ARM技术将会不断的变化和进步,ARM技术的应用领域会再次扩大,ARM技术带来的工业产值将会剧增,ARM技术产品的市场前景更加美好。总之,ARM技术的不断创新会给人类社会生活带来奇迹和享受。

参考文献

[1]ARM公司.ARM Architecture Reference Manual[M].ARM公司,2000. [2]周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005. [3]郑文波,曹金安.嵌入式系统的产业化发展——市场、技术与前景[J].自动化博览,2005,(1):17. [4]罗蕾.嵌入式实时操作系统及应用开发[M].北京:北京航空航天出版社,2005. [5]中国计算机学会微机专业委员会.2004中国计算机科学技术发展报告——嵌入式系统部分[EB/OL].

读书的好处

1、行万里路,读万卷书。

2、书山有路勤为径,学海无涯苦作舟。

3、读书破万卷,下笔如有神。

4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文

5、少壮不努力,老大徒悲伤。

6、黑发不知勤学早,白首方悔读书迟。——颜真卿

7、宝剑锋从磨砺出,梅花香自苦寒来。

8、读书要三到:心到、眼到、口到

9、玉不琢、不成器,人不学、不知义。

10、一日无书,百事荒废。——陈寿

11、书是人类进步的阶梯。

12、一日不读口生,一日不写手生。

13、我扑在书上,就像饥饿的人扑在面包上。——高尔基

14、书到用时方恨少、事非经过不知难。——陆游

15、读一本好书,就如同和一个高尚的人在交谈——歌德

16、读一切好书,就是和许多高尚的人谈话。——笛卡儿

17、学习永远不晚。——高尔基

18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向

19、学而不思则惘,思而不学则殆。——孔子

20、读书给人以快乐、给人以光彩、给人以才干。——培根

第三篇:嵌入式系统linux

关于如何学习嵌入式,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。

专科生学嵌入式到找到工作的前前后后--学习的榜样

先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。

退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。

一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。

回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。

后来,我在百度知道看到一篇让我很鼓舞的文章《如何学习嵌入式》,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。

我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。

主意一定,我就去搜索嵌入式的视频,虽然零星找到一些嵌入式的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。 后来我又找到一份很好的视频,是在嵌入式学习网推出的一份视频《嵌入式视频教程--零基础手把手教你学嵌入式》,里面的教程还不错,很完整,可以让我从基础的开始学起。视频不便宜啊,但是我也忍了,毕竟买几本书都要几百了,何况他们还有半年的技术咨询和服务,算值了。

======这里我就不给出他们的网址,如果你也想要嵌入式视频的话,那就自己去百度搜索:零基础手把手教你学嵌入式。

下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。

收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视频教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机上都有做练习,敲linux的基本命令,写简单的C语言代码,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了C和linux的基本操作。

接下来我就去学习了人家的视频的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。

这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,同时我不懂的就问,这里真的很感谢他们的技术客服对我的任何问题都是耐心的解答,每天都我几乎都有好几个问题问他们,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。

最后的一个月,我就去看关于实践部分的内容,了解嵌入式项目具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视频,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右

我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。

后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。

把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。

最后祝愿所有想学嵌入式的朋友更早的入门!!!

回答者: 热心网友 | 2010-12-20 22:22 我知道的ARM入门最好的方法

1、抓住51开发ARM

我自己个人的观点:51是一个基础,而且还很重要,这是再我看了ARM之后感觉到的。它可以加速你的ARM学习速度,真得!不相信你试一试好了。 凡是要求一个速度、效率,不要做一些无用功,抓紧身边的每一个一分钟,人是活的,东西(知识、书)是死得。

2、ARM怎么入门?

一、首先说说ARM的发展

可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位。广义的嵌入式无非几种:传统的什么

51、AVR、PIC称做嵌入式微控制器;ARM是嵌入式微处理器;DSP;FPGA。客观的讲,工作需求量上DSP的需求比ARM要多,而ARM和FPGA差不多。DSP因为数字处理与通信领域的空前发展而火暴,小到MP3 射象头,大到我们军品里的控制器,应用面很广。

值得注意的是:在找工作中,企业(著名的,小的不算)对单纯的ARM硬件开发工程师并不比单片机重视,很少有大企业的职位里写“从事过ARM开发优先”。写的多的是什么?“嵌入式LINUX”到这相信大家看出来了吧,需要的是硬件中的软件。

二、ARM是硬件还是软件

很难说,ARM是硬件,LINUX是软件。ARM的硬件多半已经模块化了,像我这样把板子改成这样的就算动的多的了,这同样是ARM公司的战略,再次佩服。实际中的LINUX的开发工作更多,更耗时。从这方面说ARM应该算是软件了。

在找工作中更是这样,举个例子,联想里和ARM最接近的是“BIOS工程师”是软件,MOTO里接近的是嵌入式LINUX工程师是软件。而其他很多公司把嵌入式产品开发归为硬件。所以,不要讨论这个,好好玩转自己的板子才是关键。实在不爽你就把自己叫“嵌入式开发工程师”。

四、要不要有51 AVR等单片机基础

有更好,但没有也无所谓。

五、开发都需要学习哪些软件

总结起来最主要的有以下几个吧:

1、ADS调试用

确切的说是ADS+AXD。ADS里包含AXD。原来都用SDT后来ARM公司停止对SDT支持了,改支持ADS了,还是用ADS吧。

有的人的程序发布的仍然是SDT版本的,但基本都可以找到相应ADS的,新人在这里不要发蒙。ADS是编译器,AXD是调试器。便宜成AXF以后再在ARM的RAM里调试。

2、PLASHPGM

FLASH烧写的软件。AXD在RAM里调试,掉电就没有了,方便程序修改。调试好的程序再下到FLASH里,上电直接运行。

同类的软件还有很多,什么FLUTED了、FLSHP了都是,但FLASHPGM最好,要是有人还问FLASH不支持BIN格式文件的问题就要看我写的PLASHPGM使用了。

3、BANYANT调试代理(不知道名对不,起这么个难记的,我一般都叫它“半羊”因为知道它那几天刚吃了烤羊)

调试代理就是用它帮你使用更简单的JTAG(便宜啊)来实现原本1K才卖的JTAG仿真器的大部分功能。JTAG调试原理看我另一篇笔记。简单的就可以把他理解为你自己做的JTAG的驱动就行了。调试代理还有很多种,什么H-JTAG了、ARM7了(不知道具体叫什么,就记得可执行文件叫 ARM7.EXE)都是,BANYANT比较好。需要注意的是,没种调试代理安装方法虽然都简单但都不一样,需要看说明。而且AXD调试之前都要运行。省钱了,就别怕麻烦了。

4、ARM-ELF-TOOLS工具链

里面是UCLINUX开发用的工具比如ARM-ELF-GCC只类的。工具链就是把很多工具打包在一起发布的方便你开发的东西。具体安装方法看我另一篇笔记。另外如果你开发LINUX就要用ARM-LINUX-TOOLS,不一样,不通用。

5、U-BOOT

大名鼎鼎的BOOTLOADER生成工具,同类的好象还有VIVI(名字很暧昧~~),生成的BOOTLOADER烧到FLASH里,然后就可以用 BOOTLOADER下载烧写其他了。有了BOOTLOADER才能下UCLINUX。BOOTLOADER就像电脑上的BIOS。当然UCOS的不用这个,用什么我不知道:)最新版本是1.1.4 具体使用方法看我另一篇笔记吧。

6、UCLINUX包

UCLINUX的源码包,不用多说了吧?建议大家用现成的先体会一下,然后再自己编译,裁剪。因为单独UCLINUX的编辑技术上比较简单,但涉及的方面还是比较广的。

7、VMWARE

老牌的虚拟机软件,在一个机器上虚拟出一个机器装LINUX(PC上用的),省得你来回开关机了。记得装VMWARE-TOOLS,安装方法在我另一篇笔记里。

六、有哪些书推荐

主要推荐ZLG的三本书,有这3本再加网络就不用别的书了,其中主要推荐前2本,3是介绍体系结构的,也不错:

1、ARM嵌入式LINUX系统构建与驱动开发,北航版,驱动写的很详细,前期开发介绍也很好

2、ARM 嵌入式系统实验教程

(二),北航版,有ZLG2200的原理图,实验程序和注释,了解人家是怎么开发的。

3、ARM嵌入式系统基础教程,最重要的是体系结构,汇编部分介绍,看看吧,增加理论素质。

4、44B0数据手册,写在这里是强调它的重要。

不推荐ZLG早期出的红色皮的ARM什么体系结构~只类的,写的太多,看烦了。其他的书没了几本,没看见好的,大家有看过的推荐吧。

七、选UCOS?UCLINUX?LINUX?VXWORKS?还是当单片机用

1、搞开发,工程设计,用UCOS,小巧,多进程,简单,体现了ARM7的精髓。

2、LINUX 正根的嵌入式系统,LINUX消费与通信领域用的比较多,但缺点是必须ARM9才能跑,ARM9的板子自己做就不行了,6层板太贵。买开发板1K达底吧。但是还是推荐选ARM9+LINUX

3、UCLINUX 算投机嵌入式系统:)ARM7上可以跑,由有LINUX近亲,学好好可以比较方便的转向LINUX,像我一样的穷鬼用吧,呵呵

4、VXWORKS,学好后可以找到高薪工作,但工作机会本身并不比LINUX好找。

5、当单片机用,不推荐,虽然我景仰的ZLG一直号召这么干。因为对于学习来说多进程的系统设计才是ARM7的玩头,至少你也要整个UCOS啊:)

有朋友问我先学这个当基础不行吗?那当然可以~~但我当时就用了1周搞定,就是我先的ADS在RAM中调试的笔记。后来我清空FLASH用的小段程序还是当时写的LED闪烁程序呢。另外1周里其中还因为自己过于菜,没把OM设置好导致晶阵不阵哈哈。这个是必须做的,但一带而过。目标放的远一点。

八、学习要用多长时间

我从菜鸟到现在两个多月,中间被打扰数次。仍然搞定了PCB设计与制版,RAM调试,FLASH下载,UBOOT移植和下载UCLINUX(没剪裁,用现成的),LCD驱动。再次坦诚的说:我确实比较菜,说这些不是让大家羡慕,只是告诉你们“你们应该比这个更好”,我相信良好的态度+合适的方法+及时的总结=成绩!

九、ARM都玩什么 就几点:

1、硬件设计

2、系统移植

3、驱动开发

4、应用开发

没了。其中推荐把注意力放在后两个上,3有难度,4比较灵活,最重要的是都是找工作的砝码。

十一、开发流程

这里是我的开发流程:

1、设计原理图(含WIGGLER的JTAG访真器)

2、设计PCB(含WIGGLER的JTAG访真器)

3、制版

4、焊接电压,确定电压没问题

5、焊接44B0+JTAG电路+WIGGLER的JTAG访真器+周边电路,用BANYANT+仿真器连接,BANYANT提示错误,但可以显示44B0编号,好象是0X0F0F0F0F只类的,说明44B0没问题

6、焊接晶体+RAM+ROM+周边电路,用BANYANT+仿真器连接,可以显示正确的44B0了

7、用BANYANT+仿真器连接,开AXD,在命令行窗口操作RAM,看可不可以修改,可以的话(用内存窗口看RAM地址)RAM就没问题,可以用这个命令“setmem 0xc000000,0xffffffff,32”,我的RAM挂在BANK6上所以地址是0XC000000,你要是改了就也得改。

8、用我写的《自己写了个C工程模板又写了个使用说明 》里的方法调试程序吧,写个简单的,我当时写个LED闪烁的。看好使不。

9、把程序按照《FLASH烧写总结 》里的烧到FLASH里,测试一下

10、按照《UBOOT 移植操作》移植UBOOT

11、按照《UCLINUX下载简单说明》下个UCLINUX

12、看看驱动开发的方法,自己写个驱动看看

13、还有很多事东西着你玩 呵呵

十二、关于JTAG访真器

JTAG访真器现在用的多是简板的,一个244那种,用的没什么不好。按照并口定义不同分几种,建议选WIFFLER定义的,因为支持的软件多。这个网上多的是,不多说了。值得提的是有的JTAG访真器原理图上有跳线用来使能复位信号,这个一般不跳上。就是不用复位信号,因为JTAG协议里本身也可以控制 44B0复位。当然,板子上的复位信号跳线也不用跳。

s

第四篇:嵌入式系统课程设计

《嵌入式系统概论》综合设计报告书

设计题目:用键盘控制LED显示不同图形

中央民族大学 二零零八年十月三十一日

一、 设计目的

了解LED点阵和矩阵键盘的工作原理。

二、 设计内容

编写程序控制用矩阵键盘控制LED点亮,产生不同的图形。

三、 设计方案

功能概述:

本设计要实现的功能是通过键盘控制LED点阵图形显示,如果键盘输入0-9十个数字时显示相应的数字,如果输入其他的键,则显示“+”号。

1、程序设计思路

本设计要实现键盘控制LED点阵图形显示,就必须要编写键盘和LED点阵的程序。先通过扫描矩阵键盘,得到键盘值,然后再调用点阵显示子函数,根据扫描的键盘值,在LED点阵上显示不同的图形。

2、主程序设计

主程序要实现的功能是矩阵键盘扫描,得到键盘值,然后把值传给LED显示函数。

程序流程图如下:

3、LED点阵显示函数设计

本函数要实现的功能是根据键盘的值,在LED点阵上显示不同的图形。 如果键盘的输入值为0-9则显示相应的数字,如果输入的是其他值,则显示“+”。本程序采用二维数组存放要显示的图形的字模,然后再通过逐行扫描LED点阵,把要显示的图形分8次显示,一次显示一行,利用人眼的视觉暂留效应,是人看到的是一个图形一次显示出来,通过一个循环控制图形显示的时间。 程序流程图如下:

4、点阵图形设计

根据8*8 LED点阵的原理,8X8 点阵共需要64 个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置1 电平,某一行置0 电平,则相应的二极管就亮;

先绘制出要显示的图形如下:

根据图形中点亮的LED灯的位置,得到相应图形的16进制数,存放在二维数组Buf1[11][8]中。

所以要显示的图形的字模如下:

buf1[11][8]={ {0x3c,0x24,0x24,0x24,0x24,0x24,0x3c,0x00},

//0

{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},

//1

{0x3c,0x20,0x20,0x3c,0x04,0x04,0x3c,0x00},

//2

{0x3c,0x20,0x20,0x3c,0x20,0x20,0x3c,0x00},

//3

{0x24,0x24,0x24,0x3c,0x20,0x20,0x20,0x00},

//4

{0x3c,0x04,0x04,0x3c,0x20,0x20,0x3c,0x00},

//5

{0x3c,0x04,0x04,0x3c,0x24,0x24,0x3c,0x00},

//6

{0x3c,0x20,0x20,0x20,0x20,0x20,0x20,0x00},

//7

{0x3c,0x24,0x24,0x3c,0x24,0x24,0x3c,0x00},

//8

{0x3c,0x24,0x24,0x3c,0x20,0x20,0x3c,0x00},

//9

{0x08,0x08,0x08,0x3e,0x08,0x08,0x08,0x00}

//+

};

四、 程序源代码

//*************************************************************** #include #include #include #include // open() close() #include // read() write() #include

#define DEVICE_NAME "/dev/led_ary_ctl" #define DEVICE_NAME1 "/dev/keypad"

void Key(unsigned char b[]);

//------ main ---- int main(void) {

int fd;

int ret;

unsigned char buf[2] ;

double x;

char pre_scancode = 0xff;

printf(" start keypad_driver test ");

fd = open(DEVICE_NAME1, O_RDWR);

printf("fd = %d ",fd);

if (fd == -1) {

printf("open device %s error ",DEVICE_NAME1); }

else {

buf[0]=0x22;

while (1)

{

read (fd,buf,1);

if(buf[0]!= pre_scancode)

{

if(buf[0]!=0xff)

{

printf("key =%x ",buf[0]);

Key(buf);

}

}

pre_scancode = buf[0];

usleep(50000);

}

// close

ret = close(fd);

printf ("ret=%d ",ret);

printf ("close keypad_driver test "); }

return 0; }// end main //***************************************************************************** //--------------- void Key(unsigned char b[]) { int fd;

int ret;

int i,j,k;

unsigned char buf[2] ;

unsigned char buf2[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char buf1[11][8]={{0x3c,0x24,0x24,0x24,0x24,0x24,0x3c,0x00},

//0

{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},

//1

{0x3c,0x20,0x20,0x3c,0x04,0x04,0x3c,0x00},

//2

{0x3c,0x20,0x20,0x3c,0x20,0x20,0x3c,0x00},

//3

{0x24,0x24,0x24,0x3c,0x20,0x20,0x20,0x00},

//4

{0x3c,0x04,0x04,0x3c,0x20,0x20,0x3c,0x00},

//5

{0x3c,0x04,0x04,0x3c,0x24,0x24,0x3c,0x00},

//6

{0x3c,0x20,0x20,0x20,0x20,0x20,0x20,0x00},

//7

{0x3c,0x24,0x24,0x3c,0x24,0x24,0x3c,0x00},

//8

{0x3c,0x24,0x24,0x3c,0x20,0x20,0x3c,0x00},

//9

{0x08,0x08,0x08,0x3e,0x08,0x08,0x08,0x00}

//+

};

// begin of led ary

buf[0]= 1;

buf[1]= 0;

if(b[0]<=9) i=b[0]; else

i=10;

fd = open(DEVICE_NAME, O_RDWR);

printf("fd = %d ",fd);

if (fd == -1)

printf("open device %s error ",DEVICE_NAME);

else {

for(j=0;j<=5;j++)

{

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

{

buf[0]=buf1[i][k];buf[1]=buf2[k];

write(fd,buf,2);

}

usleep(1);

}

// close

ret = close(fd);

printf ("ret=%d ",ret);

printf ("close led_driver test "); } } //-

五、 设计结果

实现键盘控制LED点阵显示,输入0-9十个数字时显示相应的数字,如果输入其他的键,则显示“+”号。

六、 心得体会

通过本次实验,我们对linux下的实验更加熟悉了,对LED点阵显示和矩阵键盘的原理有了深入的了解,掌握了点阵图形的设计方法和键盘的输入的读取,并把二者结合起来,实现了键盘控制点阵图形现实。

在实验过程中,我们也出现了问题,最开始时,由于不清楚点阵的C,R的高低位的对应情况,经过试验,才确定。然后就是点阵的显示是一闪即过的,然后我们通过循环控制了点阵的显示时间。总之,通过这次设计,我们都学到了很多东西。

第五篇:嵌入式系统实验报告

广西工学院鹿山学院

实 验 报 告

课程名称: 嵌入式系统

指导教师: 刘瑞琪 班 级: 自动化101 姓 名: 杨杰 学 号: 20102787 成绩评定: 指导教师签字:

2013年5月25日

实验一

简单的程序

一 实验目的:

1 、动手实践一个简单的字符型设备驱动程序。

2 、学习Linux 驱动程序构架。

3 、学习在应用程序中调用驱动。

二 实验内容:

编写简单的字符型设备驱动程序。编写相应的应用程序。

三 实验设备:

1 、一套S3C2410RP 嵌入式实验箱。

2 、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四 实验步骤

实验二 CPU GPIO 驱动程序及测试程序

一、实验目的:

编写第一个针对实际硬件的驱动程序,进一步了解驱动程序构架。

二、实验内容:

1 、编写S3C2410 GPIO驱动程序。

2 、编写S3C2410 GPIO应用程序。

3 、在 LINUX系统中插入自己的驱动程序,调用它。实现用 CPU GPIO 控制外部LED , 利用S3C2410 核心板上的 LED 验证我们的工作。

三、实验设备

1 、一套S3C2410RP 嵌入式实验箱。

2 、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、复制Experiment_KeyHello_driverapl_test文件下的simple_test_driver.c文件到Experiment_KeyGPIO文件夹下,将文件名更改为test.c。

2、打开test.c,在else语句后更改函数语句如下:

3、复制Experiment_KeyADapl_test文件夹下的Makefile到Experiment_KeyGPIO文件夹下,打开并将中的ADC删除。

4、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。

5、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句:

if(cmd==0)GPBDAT &= ~(0xf<<5);

if(cmd==1)GPBDAT |= (0xf<<5); 如下图所示:

6、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示:

保存并关闭。

7、打开终端,并编译test.c文件和gpio_led.c文件。

8、重新打开一个终端,并按步骤输入如下语句:

9、依次输入如下语句:

1、cd ..

2、ls

3、mknod /dev/hello_ctl c 97 1

4、./test

实验三 中断实验及LED显示

一、实验目的:

学习Linux 系统是如何处理中断。

二、实验内容:

编写获取和处理外中断的驱动程序。

三、实验设备:

1 、一套S3C2410RP 嵌入式实验箱。

2 、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、打开Experiment_KeyGPIOdriver文件下的gpio_led.c文件。

2、在ssize_t SIMPLE_GPIO_LED_ioctl函数下添加如下语句:

if(cmd==0)GPBDAT &= ~(0xf<<5);

if(cmd==1)GPBDAT |= (0xf<<5); 如下图所示:

3、在int __init HW_GPIO_LED_CTL_init函数下屏蔽for循环,如下图所示:

保存并关闭。

4、打开Experiment_KeyInterruptdriver下的Interrupt.c文件,并在其interrupt函数下添加for语句,如下图所示:

5、打开终端,并编译Interrupt.c文件和gpio_led.c文件。

6、重新打开一个终端,并按步骤输入如下语句:

7、依次输入如下语句:

1、cd /mnt/2410RP_linux/Experiment_Key/Interrupt/driver

2、ls

3、insmod Interrupt.o

实验四 数码管显示实验

一、实验目的:

学习串并转换的相关知识,并编写驱动程序。

二、实验内容:

编写针对zlg7289A 的驱动程序。

三、实验设备:

1 、一套S3C2410RP 嵌入式实验箱。

2 、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四、实验步骤

1、打开Experiment_KeySpi_leddriver文件夹下的spi_led.c

2、并在spi_ledInit函数下添加如下语句:

保存并关闭。

3、打开终端,并编译spi_led文件。

4、重新打开一个终端,并输入如下语句:

实验五

AD 驱动实验

一 实验目的:

1 、了解模数转换的基本原理;

2 、掌握模数转换的编程方法。

二 实验内容:

1 、编程对模拟量输入进行采集和转换,并将结果显示在超级终端上。

2 、通过改变模拟量输入,观察显示结果。

三 实验设备:

1 、一套S3C2410RP 嵌入式实验箱。

2 、安装Redhat9的宿主PC机,并且配置好 ARM Linux 的开发环境。

四 实验步骤

1、在spi_led..c中的simpled ioctl中加入以下程序

2、在testADC中复制以下程序并修改如下

3、挂载程序

cd /mnt/2410RP_linux/Experiment_Key/spi_led/driver

ls insmod spi_led.o

cd /mnt/2410RP_linux/Experiment_Key/ad/driver

insmod adc.o cd /mnt/2410RP_linux/Experiment_Key/ad/apl_test

ls

mknod /dev/spi c 104 1

ls

./testADC

上一篇:青年志愿者规章制度下一篇:七年级作文指导训练