一起合同网

导航栏 ×

合同范本|嵌入式学习计划(锦集十九篇)

发布时间:2020-07-08

嵌入式学习计划(锦集十九篇)。

[1] 嵌入式学习计划

此次设计我们采用以LM3S2100为微控制器,并通过硬件和软件两方面设计,结合6位LED数码管,放大整形电路,来实现频率计在嵌入式系统中的开发与应用。

本次课程设计其主要目的是通过这学期所学的ARM知识,来实现频率计的功能,本次设计我们利用了定时计数器的功能,对输入的信号进行实时的、高精度的频率测量,并通过6位LED数码显示管显示测量结果。论文中阐述了相关的硬件原理与应用方案,并在此基础上叙述了软件设计最终结合硬件和软件完成了本次设计。

关键词:LM3S2100、频率计、LED数码显示管

1 绪论

频率计是计算机、通讯设备、音频视频等科研生产领域不可缺少的测量仪器。它是一种用十进制数字显示被测信号频率的数字测量仪器。它的基本功能是测量正弦信号,方波信号及其他各种单位时间内变化的物理量。在进行模拟、数字电路的设计、安装、调试过程中,由于其使用十进制数显示,测量迅速,精确度高,显示直观,经常要用到频率计。

本频率计将采用定时、计数的方法测量频率。测量范围在9kHz以下的方波,时基宽度为1us,10us,100us,1ms。用ARM芯片实现自动测量功能。

基本设计原理是直接用十进制数字显示被测信号频率的一种测量装置。它以测量周期的方法对方波的频率进行自动的测量。

1.1本次设计任务

一.设计题目:ARM为内核的频率计

二.主要功能:用ARM的定时器/计数器的定时和计数功能,外部扩展6位数码管,要

求累计每秒进入ARM的外部脉冲个数,用LED数码管显示出来,或是

用上位机显示。

三.设计要求:用protel画出最小系统和外围扩展电路。显示部分可用LED数码管或是

上位机显示。要求小组成员分工明确。

1.2设计基本原理

所谓频率,就是周期性信号在单位时间(1s)内变化的次数,若在一定时间间隔T内测得这个周期性信号的重复变化次数为N,则其频率可表示为

被测信号经放大整形电路变成计数器所要求的脉冲信号,其频率与被测信号的频率相同。当1s信号来到时,被测脉冲信号进入芯片相关的,计数器开始计数,直到1s信号结束时,停止计数。若在1s时间内计数器计得的脉冲数为N,则被测信号频率fX?Nhz。

2 设计理念及设备

2.1设计理念

说到用单片机设计[2]的频率计,这里说一下单片频率计ICM7216D。单片频率计ICM7216D是美国Intersil公司首先研制的专用测频大规模集成芯片。它是标准的28引脚的双列直插式集成电路,采用单一的+5V稳压电源工作。它内含高频振荡器、10进制计数器、7段译码器、位多路复用器、能够直接驱动LED显示器的8段段码驱动器、8位位码驱动器。其基本的测频范围为DC至10MHz,若加预置的`分频电路,则上限频率可达40MHz或100MHz,单片频率计ICM7216D只要加上晶振、量程选择、LED显示器等少数器件即可构成一个DC至40MHz的微型频率计,可用于频率测量、机械转速测量等方面的应用。还有,PTS2600是英国研制的一款微波频率计,该频率计可以测量频率高达26GHz的信号,而价格才只有几万元,可谓是物美价廉。PTS2600虽然是一个低价格的微波频率计,但它能在四个波段有很好的灵敏度测量40Hz到20GHz的频率。也可以用它来测量高达26GHz的频率,只是灵敏度稍稍低了一些。日常工作中,用它来测量

VF/VHF/UHF频段的频率,也十分方便和准确。PTS2600使用一个12位数字的LCD液晶显示屏来显示所测得的频率、闸口时间(分辨率相关)、菜单功能以及频率表的测量结果。所有这些数值都是同时显示在一个屏幕上的。PTS2600的机箱采用高标准的铝质材料制成,各模块安装在下方有钢板支承的母板上。模块相对独立,维修方便,主要通过更换模块进行。 我国利用相检宽带测频技术设计的高精度频率计也非常具有突破性和实用性。该项新技术及仪器是针对已有测频技术的特点及存在问题,推出完全新颖的检测精度高、便于实施且设备构成又比较经济的一种新技术及仪器。

2.2设计所用设备和器材

(1)电源模块

(2)放大整形电路(三极管9014和74LS00)

(3)ARM开发板LPC2131

(4)LED数码显示管

3 硬件设计方案

3.1设计系统原理框图及介绍

图1 原理框图

由上图知,一个被测信号经过放大整形再进入ARM开发板,然后经过1S的定时捕获得出频率值,再经由6位LED数码显示管显示出数值。

3.2电源

电源模块——参考电压源为系统芯片如A/D、D/A转换IC或外设提供参考电压,电路如图2。

[2] 嵌入式学习计划

本人本科学的是电子信息工程专业,其实这个专业和嵌入式没有多大的关系,要说有关系就是简单的讲了下C语言语法,学完之后还不知道什么是C语言,只记住了char,int,long等占几个字节,if, while,for循环什么的,感觉也就能算一些小学就会的题目,全国计算机二级C语言也就糊涂的过了。我这个专业没学过C++,一开始不知道什么是面向对象,这可能会让人笑话了。不过这说的是实话,本科的时候,学院安排的课程大部分偏硬件部分,动手机会比较多,自然而然比较喜欢硬件方面。

在大二的时候就听学长说,单片机很难学,那时候经学长介绍,淘宝买了本郭天祥老师出的书《51单片机C语言教程》,一开始还真是不怎么懂,感觉有点像是看天书,然后硬着头皮去看,当我把51的结构看完了,就不像一开始那样一头雾水了,自己在纸上把51的结构图默画一遍,然后再把各个寄存器功能写一下,各个功能口的结构粗略画了下,然后觉得51整体已在我心中了,虽然没有什么作用,但是至少懂得这门课要怎么去学习。其实有些时候不是这个东西你不会,而是在不会的时候自己先告诉自己这个太难了,自己先放弃了。

在大三的时候,第一学期课比较少,我就经常待在图书馆,会去蛮看些专业相关的书籍,现在想想,那时候也是机缘巧合下,看到了一本书《从51到ARM》,讲述的是从51系列单片机的一般知识出发,将arm处理器和51系列单片机进行对比,引导读者去理解和学习arm处理器的知识。那个时候也有考虑到以后就业的问题,就想到一件事情,如果去应聘工作的话,每个工科院校电子信息类的毕业生都会异口同声地说:我会51系列单片机。当他说这句话的时候,他和别人是站在同一起跑线上的。可我们完全有可能和别人不站在同一起跑线上。正是这本书给我开启了另外一扇大门,让我初步了解了嵌入式。后来去报考全国计算机等级考试三级教程——嵌入式系统开发技术,在图书馆奋斗了两个月,最后取得优秀的成绩,也让我进一步了解嵌入式系统。

在大四的时候,我们有嵌入式的选修课,不过当时因为考研的缘故,就没有去上过这门课,好可惜呀!但是,在选择读研研究方向的时候我还是毅然选择了嵌入式方向,我知道这将成为我未来三年研究的方向。这学期(研一下学期),很开心能够再次接触嵌入式系统这门课程,对于导师教的这门课程,我觉得自己上课还是蛮认真听讲的,当然也被师在台上那讲得头头是道,温文儒雅的风姿所吸引。对于没有学过微机8086的我,有些时候,老师用微机与嵌入式的对比让我头脑没有相关概念...

首先,我对嵌入式在概念上有了一个比较精确的了解。嵌入式是指以应用为中心,以计算机为基础,并且软硬件可裁剪,适用于对功能、可靠性、成本、体积和功耗有严格要求的专用计算机系统。它由硬件平台和系统软件组成。硬件平台指嵌入式处理器和与之通过接口连接的外围硬件平台。系统软件是指实时操作系统和用户应用软件。

谈到硬件部分,我首先想到的是嵌入式处理器那些外围功能模块。对于这部分的学习,我当初花了好长时间看《深入浅出ARM7——LPC2400》这本书,现在想想觉得自己学习方法没用对,完全没有那个必要,自己却花了大把时间在看这些寄存器引脚的使用,因为单纯的看过之后还是很容易忘的,之后在进行实验的时候还是翻书来查就证明了这一点。不过一些最基本的模块,例如通用输入/输出口(GPIO),通用异步收发器(UART),向量中断控制器(VIC),外部中断输入和定时器/计数器还是需要看书认真去记住那些常用的引脚功能。对于CPU异常这部分,我一开始以为异常就是中断,因为处理程序流程设计是相似的,都是请求处理器打断正常的.程序执行流程,进入特定程序的一种机制。当时还对老师提出的一个看法有点疑义,51可以处理中断嵌套而ARM处理器却不能?我当时脑子里面就在想:中断不都是有硬件设备产生的,那按常理来讲ARM处理器也可以处理的呀。后来在认真查书,发现CPU异常有7种:复位,数据中止,中断,快中断,预取中止,未定义,软件中断。而异常向量会使CPU转入异常入口地址执行程序,开始了异常处理。同理的话,中断向量使CPU转入中断入口地址执行程序,开始了中断处理。即当发生IRQ中断时,程序返回地址被存入该IRQ中断模式下的LR,如果继续发生IRQ中断,那第二次的中断返回地址也还是被存入该IRQ中断模式下的LR中,那先前发生中断时候存入的程序返回地址将被覆盖掉,导致不能返回正确的位置。在我解决这个问题的期间,每次睡前思维准会定格在这问题上,久久不能绕出来,其实有时候查书还是最好的解决方案,因为网络资源只能提供给我们部分的参考资料。

对于ARM汇编语言这部分的学习,我认为是需要重视的,学汇编不是说用这语言做多牛逼的事情, 问题的关键在于, 学透了汇编会使你真正理解计算机。另外一方面,只要以后在嵌入式工作中你迟早会在某个阴暗的角落里遇到汇编。“不管你承认不承认, 现在的CPU没有直接跑高级语言的, 哪怕是虚拟机也都是类似汇编的指令集.当遇到崩溃分析, 性能优化甚至编译器抽风等等的时候, 汇编是你最后一根救命稻草(这句话是福来师兄讲的)。”为此他给了我们一份资料,周立功lpc21xx/lpc22xx系列ARM7启动代码分析,主要讲述的是startup.s文件的分析,看了下才发现老师上课讲的那个启动代码分析很多不理解之处这里都有详细的介绍,这分析太精辟了。

学 ARM7这么久,我认为从硬件上讲,一方面就是学习接口电路设计,另一方面就是学习汇编和C语言的板级编程。如果从软件上讲,就是要学习基于ARM处理器的操作系统层面 的驱动和移植。这些对于我们初学者来说必须明确,要么从硬件着手开始学,要么从操作系统的熟悉到应用开始学,但不管学什么,只要不是纯的操作系统级,硬件的寄存器类的东西还是要能看懂的,基于板级的汇编和C编程还是要会的。

μC/OS-II 是一种基于优先级的抢占式多任务实时操作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量,邮箱,消息队列)和内存管理等功能。它可以使各个任务独立工作,互不干涉,很容易实现准时而且无误执行,使实时应用程序的设计和扩展变得容易,使应用程序的设计过程大为减化。μC /OS-II是一个完整的、可移植、可固化、可裁剪的占先式实时多任务内核。μC/OS-II绝大部分的代码是用ANSI的C语言编写的,包含一小部分汇编代码,使之可供不同架构的微处理器使用。

μC/OS-II可以大致分成内核结构、任务管理、时间管理、任务之间通信与同步4个部分。内核结构是操作系统的处理核心,包括操作系统初始化、操作系统运行、中断进出的前导、时钟节拍、任务调度、事件处理等多部分。任务管理部分中的内容都是与任务的操作密切相关的。包括任务的建立、删除、挂起、恢复等等。因为μC/OS-II是以任务为基本单位调度的,所以这部分内容也相当重要。μC/OS-II中的最小时钟单位是timetick(时钟节拍),任务延时等操作是在时间管理这部分完成的。任务之间通信与同步为事件处理部分,包括信号量、邮箱、邮箱队列、事件标志等部分;主要用于任务间的互相联系和对临界资源的访问。μC/OS-Ⅱ操作系统是在main()中建立的,首先要系统初始化,OSInit(),初始化系统所有的变量和数据结构。然后进行任务的创建,OSTaskCreate();之后进行多任务的启动,OSStart()。在进行任务的并行处理的时候,一个任务的程序是顺序执行的,而不同任务的程序却是并行执行的。从应用程序的观点来看,此处的并行处理只是一个假象。而实际上它是通过实时操作系统的内核控制任务之间的切换来实现的,也就是任务调度啦。

μCOS-Ⅱ总是运行进入就绪态任务中优先级最高的那一个。当创建新任务时,或当前任务调用一些可能把自己挂起的系统函数(如OSMBoxPend)时,内核就要进行任务切换。在上述的场合,任务级的调度是由函数OSSched()完成的。

在一个多任务的应用工程中,任务之间并不是完全独立的,它们存在一些需相互配合的处理,这些相互配合是靠任务间的通讯或同步,信号量、邮箱、消息队列可以实现这种任务与任务,任务与中断服务函数间的通讯与同步。

邮箱可以使一个任务或者中断服务子程序向另一个任务发送一个指针型的变量。而信号量不可以,其只能发送信号量。消息队列可以使一个任务或者中断服务子程序向另一个任务发送以指针方式定义的变量。因具体的应用有所不同,每个指针指向的数据结构变量也有所不同,实际上,我们可以将消息队列看作多个邮箱组成的数组,只是它们共用一个等待任务列表。

我们实验所用的ARM开发工具是ADS1.2。ARMADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。现在ADS的最新版本是1.2,支持软件调试及JTAG硬件仿真调试、支持汇编、C语言、C++源程序,具有编译效率高、系统库功能强等特点。在安装ADS1.2的时候出现过小问题,当时我的电脑是64位的,安装完之后显示不了,后来百度查找到原因,竟然是文件夹放错地方,应该放在Program Files(x86)这个文件夹中。后来有同学问我这方面的问题,但是发现他们的ADS1.2安装不了的原因是因为Licence弄错了。在打开CodeWarrior for ARM Developer Suite的时候,一定要记得选DebugInChipRAM,否则Make都出现很多error,而且那些几乎都是未定义函数的错误。之后就进行Debug,调试成功之后会跳出AXD的界面,选择Options里面的ConfigureTarget,再添加H-JTAG的文件,之后点击GO,程序会跳出汇编语言的界面,再点击下就跳到C语言程序入口地址,之后再点击下GO,程序就开始跑起来。前面所述的这些步骤是理想情况下程序自身没有发生错误,当然在调试过程中,还是有很多硬件上的问题,一方面是有些开发板可能用久了,用JTAG并口连接的时候接触不良,很容易自动掉线,常出现未连接设备的的Error,还有一方面是跑程序过程常会出现兼容性的问题,导致程序AXD调试时候会出现卡在某个部分一直进入死循环,这个后来是解决了,但是偶尔还是会出现这个BUG。

通过这学期对嵌入式的学习,我发现自己尚未掌握的知识点还是蛮多的,尤其是对μC/OS-II的移植方面,我只是理论上粗略了解,没有经过实验的操作。还有对存储器加速模块(MAM)这方面不够了解,主要一方面当初在做消息队列采集实验(KeySem_SampdataQeue),这个模块被代替掉,不需要使用它,所以后来也没有去掌握相关知识点。对于任务就绪算法这部分,我只是上课的时候听“懂”了,课后自己再看完全懵了。对于CAN总线调试的部分,老师上课没有讲到这部分的介绍与应用,但是后来通过自己对实验室师兄们所做的课题初步了解,发现我自己有必要去弄懂它的构造和原理。

“看书不要希望一次就会,一次就明白是什么意思,也不要死记硬背,看不明白也没关系,以后遇到了知道去哪里去找就可以了,以后遇到的多了,也就记住了,遇到的少的,忘记也就忘记了。”依然记得当初不懂怎么解决某个问题的时候请教李硕师兄,师兄对我说的这番话。自己在μC/OS-II这部分内容挣扎了好久,现在想想,觉得当初不应该一上来就直接阅读内核源代码,看了一些自己把头撞破也想不明白的事,这样直接正面打击我学习嵌入式的积极性。学习啊,还是得要循序渐进。如果你想学习嵌入式一定要有块学习板。看再多的视频,看再多的书,也不如自己动手试一下,看着很简单的东西,做起来就可能遇到很多的问题,遇到问题找到原因,解决问题,只有这样才能学到东西。记得我第一次仿写led的驱动,想自己试一下,可是自己一试,就出了好多的问题,那个led弄了我一天才把led灯点亮。所以不要眼高手低。

对于初学者,有一点小建议,我们拿到一个开发板,很兴奋也很激动,想法自然也很多,想用开发板实现自己的这个想法,实现那个想法,然后又不知道从何下手,然后就去论坛中发一个贴,最后等着别人去回复,当见没人回复就开始抱怨。这种做法是不可取的,有想法是好的,我们要实现自己的想法也是有前提的,首先,我们对这部分知识了解吗?如果不了解就去google一下(最好别用百度,不太好用),了解了一些,也就大概知道要怎么做了。如果再遇到问题,再去发贴问,这样也显得咱们有水平。比如自己连串口是什么都不太清楚呢,就问串口通信怎么做啊,就是人家把代码给咱,咱也不明白是怎么回事啊。见多识广,熟能生巧。多看代码,要从代码中读出代码的意思来。自己平时也要多写代码,多练习(这一点我做的不好,写的少)。

最后,我想说的是嵌入式系统的学习和研究一旦我们达到了一定的水平后,其实很简单,就是如何去看CPU和相关芯片的Datasheet!

[3] 嵌入式学习计划

所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。下面是小编整理的关于嵌入式系统体系结构,欢迎大家参考!

嵌入式系统体系结构:

嵌入式系统的组成包含了硬件层、中间层、系统软件层和应用软件层。

1、硬件层:嵌入式微处理器、存储器、通用设备接口和I/O接口。

嵌入式核心模块=微处理器+电源电路+时钟电路+存储器

Cache:位于主存和嵌入式微处理器内核之间,存放的是最近一段时间微处理器使用最多的程序代码和数据。它的主要目标是减小存储器给微处理器内核造成的存储器访问瓶颈,使处理速度更快。

2、中间层(也称为硬件抽象层HAL或者板级支持包BSP).

它将系统上层软件和底层硬件分离开来,使系统上层软件开发人员无需关系底层硬件的具体情况,根据BSP层提供的接口开发即可。BSP有两个特点:硬件相关性和操作系统相关性。

设计一个完整的BSP需要完成两部分工作:

A、 嵌入式系统的硬件初始化和BSP功能。

片级初始化:纯硬件的初始化过程,把嵌入式微处理器从上电的默认状态逐步设置成系统所要求的工作状态。

板级初始化:包含软硬件两部分在内的初始化过程,为随后的系统初始化和应用程序建立硬件和软件的运行环境。

系统级初始化:以软件为主的初始化过程,进行操作系统的初始化。

B、 设计硬件相关的设备驱动。

3、系统软件层:由RTOS、文件系统、GUI、网络系统及通用组件模块组成。

RTOS是嵌入式应用软件的基础和开发平台。

4、应用软件:由基于实时系统开发的应用程序组成。

嵌入式芯片体系结构介绍

1.嵌入式微处理器(Micro Processor Unit,MPU)

嵌入式微处理器是由通用计算机中的CPU演变而来的。它的特征是具有32位以上的处理器,具有较高的性能,当然其价格也相应较高。但与计算机处理器不同的是,在实际嵌入式应用中,只保留和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,这样就以最低的功耗和资源实现嵌入式应用的特殊要求。和工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。目前主要的嵌入式处理器类型有Am186/88、386EX、SC-400、Power PC、68000、MIPS、ARM/ StrongARM系列等。其中Arm/StrongArm是专为手持设备开发的嵌入式微处理器,属于中档的价位。

Power PC:

由IBM、Apple和Motorola联合开发,并制造出基于PowerPC的多处理器计算机。PowerPC架构具有可伸缩性好、方便灵活的特点。主要有以下产品使用Power PC微处理器

苹果公司:Power Macintosh系列、PowerBook系列(1995年以后的产品)、iBook系列、iMac系列(2005年以前的产品)、eMac系列产品。

任天堂:GameCube 和 Wii。

Sony:PlayStation 3。

MIPS:

MIPS是世界上很流行的一种RISC处理器。MIPS的意思“无内部互锁流水级的微处理器”(Microprocessor without interlocked piped stages),其机制是尽量利用软件办法避免流水线中的数据相关问题。它最早是在80年代初期由斯坦福(Stanford)大学Hennessy教授领导的研究小组研制出来的。MIPS公司的R系列就是在此基础上开发的RISC工业产品的'微处理器。这些系列产品为很多计算机公司采用构成各种工作站和计算机系统。MIPS技术公司是美国著名的芯片设计公司,它采用精简指令系统计算结构(RISC)来设计芯片。和英特尔采用的复杂指令系统计算结构(CISC)相比,RISC具有设计更简单、设计周期更短等优点,并可以应用更多先进的技术,开发更快的下一代处理器。MIPS是出现最早的商业RISC架构芯片之一,新的架构集成了所有原来MIPS指令集,并增加了许多更强大的功能。MIPS处理器是八十年代中期RISC CPU设计的一大热点。MIPS是卖的最好的RISC CPU,可以从任何地方,如Sony, Nintendo的游戏机,Cisco的路由器和SGI超级计算机,看见MIPS产品在销售。目前随着RISC体系结构遭到x86芯片的竞争,MIPS有可能是起初RISC CPU设计中唯一的一个在本世纪盈利的。和英特尔相比,MIPS的授权费用比较低,也就为除英特尔外的大多数芯片厂商所采用。

2.嵌入式微控制器(Microcontroller Unit, MCU)

嵌入式微控制器的典型代表是单片机,从70年代末单片机出现到今天,虽然已经经过了20多年的历史,但这种8位的电子器件目前在嵌入式设备中仍然有着极其广泛的应用。单片机芯片内部集成ROM/EPROM、RAM、总线、总线逻辑、定时/计数器、看门狗、I/O、串行口、脉宽调制输出、A/D、D/A、Flash RAM、EEPROM等各种必要功能和外设。和嵌入式微处理器相比,微控制器的最大特点是单片化,体积大大减小,从而使功耗和成本下降、可靠性提高。微控制器是目前嵌入式系统工业的主流。微控制器的片上外设资源一般比较丰富,适合于控制,因此称微控制器。由于MCU低廉的价格,优良的功能,所以拥有的品种和数量最多,比较有代表性的包括8051、MCS-251、MCS-96/196/296、P51XA、C166/167、68K系列以及 MCU 8XC930/931、C540、C541,并且有支持I2C、CAN-Bus、LCD及众多专用MCU和兼容系列。目前MCU占嵌入式系统约70%的市场份额。近来Atmel出产的Avr单片机由于其集成了FPGA等器件,所以具有很高的性价比,势必将推动单片机获得更高的发展。

3.嵌入式DSP处理器(Embedded Digital Signal Processor, EDSP)

DSP处理器是专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,具有很高的编译效率和指令的执行速度。在数字滤波、FFT、谱分析等各种仪器上DSP获得了大规模的应用。DSP的理论算法在70年代就已经出现,但是由于专门的DSP处理器还未出现,所以这种理论算法只能通过MPU等由分立元件实现。MPU较低的处理速度无法满足DSP的算法要求,其应用领域仅仅局限于一些尖端的高科技领域。随着大规模集成电路技术发展,1982年世界上诞生了首枚DSP芯片。其运算速度比MPU快了几十倍,在语音合成和编码解码器中得到了广泛应用。至80年代中期,随着CMOS技术的进步与发展,第二代基于CMOS工艺的DSP芯片应运而生,其存储容量和运算速度都得到成倍提高,成为语音处理、图像硬件处理技术的基础。到80年代后期,DSP的运算速度进一步提高,应用领域也从上述范围扩大到了通信和计算机方面。90年代后,DSP发展到了第五代产品,集成度更高,使用范围也更加广阔。目前最为广泛应用的是TI的TMS320C2000/C5000系列,另外如Intel的MCS-296和Siemens的TriCore也有各自的应用范围。根据芯片厂商采用不同的IP核,可以分为以下几类:

StarCore

Freescale

飞思卡尔数字信号处理器采用StarCore技术,是业内最高性能的可编程器件,可满足基带、航空航天、国防、医疗和测试与测量市场的需求。我们设计的StarCore DSP系列产品提供全面灵活扩展的解决方案,帮助客户加快产品上市。StarCore DSP具有低功耗、低成本的显著特点,是下一代设计的理想解决方案。通过新一代创新实现更加智能的世界。多核芯片主要包括:MSC8122: 带有以太网的四核16位DSP,MSC8126: 带有以太网、TCOP和VCOP的四核16位DSP,MSC8144: 四核DSP,MSC8152: 高性能双核DSP,MSC8154: 高性能四核DSP,MSC8154E: 带有安全功能的高性能四核DSP,MSC8156: 高性能六核DSP,MSC8156E: 带有安全功能的高性能六核DSP,MSC8157: MSC8157宽带无线接入DSP,MSC8158: MSC8158宽带无线接入DSP,MSC8252: 高性能双核DSP,MSC8254: 高性能四核DSP,MSC8256: 高性能六核DSP 。单核芯片主要包括: MSC8151: 高性能单核DSP,MSC8251: 高性能单核DSP。

4.嵌入式片上系统(System On Chip)

SoC追求产品系统最大包容的集成器件,是目前嵌入式应用领域的热门话题之一。SOC最大的特点是成功实现了软硬件无缝结合,直接在处理器片内嵌入操作系统的代码模块。而且SOC具有极高的综合性,在一个硅片内部运用VHDL等硬件描述语言,实现一个复杂的系统。用户不需要再像传统的系统设计一样,绘制庞大复杂的电路板,一点点的连接焊制,只需要使用精确的语言,综合时序设计直接在器件库中调用各种通用处理器的标准,然后通过仿真之后就可以直接交付芯片厂商进行生产。由于绝大部分系统构件都是在系统内部,整个系统就特别简洁,不仅减小了系统的体积和功耗,而且提高了系统的可靠性,提高了设计生产效率。由于SOC往往是专用的,所以大部分都不为用户所知,比较典型的SOC产品是Philips的Smart XA。少数通用系列如Siemens的TriCore,Motorola的M-Core,某些ARM系列器件,Echelon和Motorola联合研制的Neuron芯片等。预计不久的将来,一些大的芯片公司将通过推出成熟的、能占领多数市场的SOC芯片,一举击退竞争者。SOC芯片也将在声音、图像、影视、网络及系统逻辑等应用领域中发挥重要作用。

嵌入式系统的组成结构

1.硬件层

(1)嵌入式微处理器

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

嵌入式微处理器有各种不同的体系,即使在同一体系中也可能具有不同的时钟频率和数据总线宽度,或集成了不同的外设和接口。据不完全统计,目前全世界嵌入式微处理器已经超过1000多种,体系结构有30多个系列,其中主流的体系有ARM、MIPS( Microprocessor without InterlockedPiped Stages,无互锁流水级的微处理器)/Power PC、X86、SH等。

(2)存储器

嵌入式系统需要存储器来存放可执行代码和数据。嵌入式系统的存储器包含Cache、内存和外存。

① Cache: Cache是一种容量小、速度快的存储器阵列,它位于内存和嵌入式微处理器内核之间,存放的是近一段时间微处理器使用多的程序代码和数据。在嵌入式系统中,Cache全部集成在嵌入式微处理器内,可分为数据Cache、指令Cache和混合Cache, Cache的大小依不同处理器而定。

②内存:位于微处理器的内部,用来存放系统和用户的程序及数据。片内存储器容量小、速度快。

③外存:外存用来存放大数据量的程序代码或信息,它的容量大,但读取速度与内存相比慢很多,用来长期保存用户的信息。

嵌入式系统中常用的外存有硬盘、NAND Flash、CF卡、MMC、SD卡等。

(3)通用设备接口和I/O接口

嵌入式系统和外界交互需要一定形式的通用设备接口,如A/D、D/A、I/O等,外设通过和片外其他设备或传感器的连接来实现微处理器的输入/输出功能。每个外设通常都只有单一的功能,它可以在芯片外也可以内置芯片中。外设的种类很多,可从一个简单的串行通信设备到非常复杂的802.11无线设备。

目前,嵌入式系统中常用的通用设备接口有A/D(模/数转换接口)、D/A(数/模转换接口),I/O接口有RS-232接口(串行通信接口)、Ethernet(以太网接口)、USB(通用串行总线接口)、音频接口、VGA视频输出接口、I2C(现场总线)、SPI(串行外围设备接口)、IrDA(红外线接口)等

2.中间层

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

实际上,BSP是一个介于操作系统和底层硬件之间的软件层次,包括了系统中大部分与硬件联系紧密的软件模块。设计一个完整的BSP需要完成两部分工作:嵌入式系统的硬件初始化以及BSP功能,设计硬件相关的设备驱动。

3.软件层

软件层由嵌入式操作系统( Embedded OperaTIon System,EOS)、文件系统、图形用户接口( Graphic User Interface,GUI)、网络系统及通用组件模块组成。EOS是嵌入式应用软件的基础和开发平台。以下先介绍前三种。

(1)嵌入式操作系统

不同功能的嵌入式系统的复杂程度有很大不同。简单的嵌入式系统仅仅具有单一的功能,存储器中的程序就是为了这一功能设计的,其系统处理核心也是单一任务处理器。复杂的嵌入式系统不仅功能强大,往往还配有嵌入式操作系统,如功能强大的智能手机等,几乎具有与微型计算机一样的功能。

嵌入式操作系统( Embedded OperaTIon System,BOS)是一种用途广泛的系统软件,过去它主要应用于工业控制和国防系统领域。EOS负责嵌入系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。它必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。目前,已推出一些应用比较成功的EOS产品系列。随着 Internet技术的发展、信息家电的普及应用及EOS的微型化和专业化,EOS开始从单一的弱功能向高专业化的强功能方向发展。嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固化、应用的专用性等方面具有较为突出的特点。

(2)文件系统

嵌入式文件系统比较简单,主要提供文件存储、检索、更新等功能,一般不提供保护、加密等安全机制。它以系统调用和命令方式提供文件的各种操作,主要有设置、修改对文件和目录的存取权限,提供建立、修改、改变和删除目录等服务,提供创建、打开、读写、关闭和撤销文件等服务。

(3)图形用户接口

图形用户接口(GUI)的广泛应用是当今计算机发展的重大成就之一,它极大地方便了非专业用户的使用,人们从此不再需要死记硬背大量的命令,取而代之的是通过窗口、菜单、按键等方式来方便地进行操作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特点。

4.功能层

功能层也称为应用软件层,应用软件是由基于实时系统开发的应用程序组成,运行在嵌入式操作系统之上,一般情况下与操作系统是分开的。应用软件用来实现对被控制对象的控制功能。功能层是要面对被控对象和用户,为方便用户操作,往往需要提供一个友好的人机界面。

[4] 嵌入式学习计划

1、嵌入式C语言的特点

作为一种结构化程序设计语言,C 语言兼顾多种高级语言的特点,具有很强的功能性和可移植性。但在嵌入式系统开发中,出于对低价产品的需求,系统的计算能力和存储容量都非常有限,因此如何利用好这些资源就显得十分重要。开发人员应注意嵌入式 C语言和标准 C 语言的区别,减少生成代码长度,提高程序执行效率,在程序设计中对代码进行优化。

2、C代码在程序中的优化

现在的 C 编译器会自动对代码进行优化,但这些优化是对执行速度和代码长度的平衡。如果要获得更小且执行效率更高的代码,需要程序员手工对代码进行优化。

  3、变量类型的定义

不同的数据类型所生成的机器代码长度相差很多,变量类型选取的范围越小运行速度越快,占用的内存越少。能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变量就不要用长整型(long int),能不使用浮点型(float)变量就不要使用浮点型变量。相同类型的数据类型,有无符号对机器代码长度也有影响。因此我们应按照实际需要合理的选用数据类型。当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值,C编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。

4、算法优化

算法优化指对程序时空复杂度的优化:在 PC 机上进行程序设计时一般不必过多关注程序代码的长短,只需考虑功能的实现,但嵌入式系统就必须考虑系统的硬件资源,在程序设计时,应尽量采用生成代码短的算法,在不影响程序功能实现的情况下优化算法。

  5、适当的使用宏

在C程序中使用宏代码可以提高程序的执行效率。宏代码本身不是函数,但使用起来像函数。函数调用要使用系统的栈来保存数据,同时 CPU 在函数调用时需要保存和恢复当前的现场,进行进栈和出栈操作,所以函数调用也需要 CPU时间。而宏定义就没有这个问题:宏定义仅仅作为预先写好的代码嵌入到当前程序中,不产生函数调用,所占用的仅仅是一些空间,省去了参数压栈,生成汇编语言的 call 调用,返回参数,执行 return等过程,从而提高了程序的执行速度。虽然宏破坏了程序的可读性,使排错更加麻烦,但对于嵌入式系统,为了达到要求的性能,嵌入代码常常是必须的做法。

此外,我们还要避免不必要的函数调用,请看下面的代码:

[plain] view plain copy print?

void str_print( char *str )

{

int i;

for ( i = 0; i < strlen ( str ); i++ )

{

printf("%c",str[ i ] );

}

}

void str_print1 ( char *str )

{

int len;

len = strlen ( str );

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

{

printf("%c",str[ i ] );

}

}

请注意,这两个函数的功能相似。然而,第一个函数调用strlen函数多次,而第二个函数只调用函数strlen一次。因此第二个函数性能明显比第一个好。

  6、内嵌汇编

程序中对时间要求苛刻的部分可以用内嵌汇编来重写,以带来速度上的显着提高。但是,开发和测试汇编代码是一件辛苦的工作,它将花费更长的时间,因而要慎重选择要用汇编的部分。在程序中,存在一个80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。

7、提高循环语言的效率

在 C 语言中循环语句使用频繁,提高循环体效率的基本办法就是降低循环体的复杂性:

(1) 在多重循环中,应将最长的循环放在最内层,最短的循环放在最外层。这样可以减少 CPU跨切循环的次数。如例 1-1 的.效率比 1-2 的效率要低:

[plain] view plain copy print?

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

{

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

{……}

} // 例子 1-1

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

{

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

{……}

} // 例子 2-2 程序部简洁但效率高

8、提高 switch 语句的效率

switch 语句是 C 语言中常用的选择语句, 在编译时会产生if- else- if 嵌套代码,并按照顺序进行比较,发现匹配时,就跳转到满足条件的语句执行。

当 switch 语句中的 case 标号很多时,为了减少比较的次数,可以把发生频率相对高的条件放到第一位或者把整个 switch 语句转化嵌套 switch 语句。把发生频率高的 case 标号放在最外层的 switch 语句中,发生相对频率相对低的 case 标号放在另外的 switch 语句中。如例 3 中,把发生率高的case 标号放在外层的 switch 语句中,把发生频率低的放在缺省的(default)内层 switch 语句中。

[plain] view plain copy print?

switch (表达式)

{

case 值1:

语句1: break;

case 值2:

语句2:break;

……

/*把发生频率低的放在内层的switch语句中*/

default:

switch (表达式)

{

case 值n:

语句n: break;

case 值m:

语句m: break;

……

}

}

例子3 使用嵌套switch语句提高程序执行效率。

  9、避免使用标准库

使用 C语言标准库可以加快开发进度,但由于标准库需要设法处理用户所有可能遇到的情况,所以很多标准库代码很大。比如标准库中的 sprintf函数非常大。这个庞大的代码中有很大一部分用于处理浮点数,如果程序中不需要格式化浮点数值( 如%f),程序设计人员就可以根据实际情况用少量的代码实现这个功能。

  采用数学方法优化程序

数学是计算机之母,没有数学的依据和基础,就没有计算机的发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。有时候这个问题常常被大家忽略, 对于没有经验的程序员来说更是如此。例如:求 1~100 的和:

sum = 100*(100+1)/2;

数学公式: (a1 + an)*n/2

使用C语言的位操作可以减少除法和取模的运算。在计算机程序中数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。因而,灵活的位操作可以有效地提高程序运行的效率。比如用用位操作区代替除法:比如:128 / 8 ->> 128 >> 3;

优化算法和数据结构对提高代码的效率有很大的帮助。当然有时候时间效率和空间效率是对立的,此时应分析哪个更重要, 做出适当的折中。另外,在进行优化的时候不要片面的追求紧凑的代码,因为紧凑的代码并不能产生高效率的机器码。

  存储器分配

由于成本限制,嵌入式系统存储器容量有限。程序中所有的变量,包含的库函数以及堆栈等都使用有限的内存:全局变量在整个程序范围内都有效。程序执行完后才会释放;静态变量的作用范围也是整个程序,只有局部变量中的动态变量在函数执行完后会释放。因此, 在程序中应尽量使用局部变量,提高内存使用效率。程序中堆的大小受限于所有全局数据和栈空间都分配后的剩余量,如果堆太小,程序不能够在需要的时候分配内存。因此在使用 malloc 函数申请内存之后一定要用 free 函数进行释放, 防止内存泄露。

选择好的无限循环

在编程中,我们常常需要用到无限循环,常用的两种方法是while (1) 和 for (;;)。这两种方法效果完全一样,但那一种更好呢?然我们看看它们编译后的代码:

编译前:

while (1);

编译后:

mov eax,1

test eax,eax

je foo+23h

jmp foo+18h

编译前:

for (;;);

编译后:

jmp foo+23h

显然,for (;;)指令少,不占用寄存器,而且没有判断,跳转,比while (1)好。

  使用Memoization,以避免递归重复计算

考虑Fibonacci(斐波那契)问题,Fibonacci问题是可以通过简单的递归方法来解决:

[plain] view plain copy print?

1. int fib ( n )

2. {

3. if ( n == 0 || n == 1 )

4. {

5. return 1;

6. }

7. else

8. {

9. return fib( n - 2 ) + fib ( n - 1 );

10. }

11. }

注:在这里,我们考虑Fibonacci 系列从1开始,因此,该系列看起来:1,1,2,3,5,8,…

注意:从递归树,我们计算fib(3)函数2次,fib(2)函数3次。这是相同函数的重复计算。如果n非常大,fib函数的效率会比较低。Memoization是一个简单的技术,可以被用在递归,加强计算速度。fibonacci 函数Memoization的代码如下:

[plain] view plain copy print?

1. int calc_fib ( int n )

2. {

3. int val[ n ] , i;

4. for ( i = 0; i <=n; i++ )

5. {

6. val[ i ] = -1; // Value of the first n + 1 terms of the fibonacci terms set to -1

7. }

8. val[ 0 ] = 1; // Value of fib ( 0 ) is set to 1

9. val[ 1 ] = 1; // Value of fib ( 1 ) is set to 1

10. return fib( n , val );

11. }

12.

13. int fib( int n , int* value )

14. {

15. if ( value[ n ] != -1 )

16. {

17. return value[ n ]; // Using memoization

18. }

19. else

20. {

21. value[ n ] = fib( n - 2 , value ) + fib ( n - 1 , value ); // Computing the fibonacci term

22. }

23. return value[ n ]; // Returning the value

24. }

除了编程上的技巧外,为提高系统的运行效率,我们通常也需要最大可能地利用各种硬件设备自身的特点来减小其运转开销,例如减小中断次数,利用DMA传输方式等。

[5] 嵌入式学习计划

岗位职责:

1. 电子工程、自动化相关专业,本科及以上学历,熟悉ARM和DSP的编程、优化、调试;

2.了解计算机视觉的基础知识,有计算机视觉项目经验者优先;

3.有良好的编程基础和代码风格,熟悉C/C++。岗位职责:

1. 嵌入式软件工程师岗位,能完成上级交给的设计工作

2. 完成工程需要的.算法嵌入式实现,并能系统调试,方便移植。

3. 能主动设计算法模型,并提出自己独到的见解。

任职要求:

1. 精通C、C++等编程语言

2. 嵌入式多年工作经验,熟悉多种ARM芯片

3. 对陀螺仪传感器、加速度传感器有实际设计经验,实际算法书写调试经验

4. 数学精通,精通多种信号处理算法,能快速简洁通过嵌入式实现数学算法。

5. 有良好的文档书写习惯,善于协作,善于沟通。

[6] 嵌入式学习计划

嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是是由单个程序实现整个控制逻辑,笼统地来说,嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。

所谓物联网,是指通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信,以实现对物品的智能化识别、定位、跟踪、监控和管理的一种网络。而嵌入式技术是将“无感知物体”转变为“智能物体”的关键技术,该特性使物体具备根据外部环境变化进行反应的能力。嵌入式智能技术的特点是将硬件和软件相结合,利用了嵌入式微处理器的`低功耗、体积小、集成度高,以及嵌入式软件的高效率、高可靠性等优点,综合人工智能技术,推动物联网中智能环境的实现。

嵌入式系统涵盖嵌入式硬件和软件两大部分,硬件由嵌入式处理器、存储器与外围设备、现场总线组成,软件包括操作系统、文件系统、图形用户接口等。伴随着网联网时代的到来,也极大得推动嵌入式技术的发展和应用。

[7] 嵌入式学习计划

一、嵌入式系统的概念

着重理解“嵌入”的概念

主要从三个方面上来理解。

1、从硬件上,将基于CPU的处围器件,整合到CPU芯片内部,比如早期基于X86体系结构下的计算机,CPU只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16C550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到CPU内部,还有PC机有显卡,而多数嵌入式处理器都带有LCD控制器,但其种意义上就相当于显卡。比较高端的ARM类Intel Xscale架构下的IXP网络处理器CPU内部集成PCI控制器(可配成支持4个PCI从设备或配成自身为CPI从设备);还集成3个NPE网络处理器引擎,其中两个对应于两个MAC地址,可用于网关交换用,而另外一个NPE网络处理器引擎支持DSL,只要外面再加个PHY芯片即可以实现DSL上网功能。IXP系列最高主频可以达到1.8G,支持2G内存,1G×10或10G×1的以太网口或Febre channel的光通道。IXP系列应该是目标基于ARM体系统结构下由intel进行整合后成Xscale内核的最高的处理器了。

2、从软件上前,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到ROM中。而在定制操作系统内核时所选择的应用程序组件就是完成了软件的“嵌入”,比如WinCE在内核定制时,会有相应选择,其中就是wordpad,PDF,MediaPlay等等选择,如果我们选择了,在CE启动后,就可以在界面中找到这些东西,如果是以前PC上将的windows操作系统,多半的东西都需要我们得新再装。

3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的ROM中就实现了一个真正的“嵌入”。

以上的定义是我在6、7年前给嵌入式系统下自话侧重于理解型的定义,书上的定义也有很多,但在这个领域范围内,谁都不敢说自己的定义是十分确切的,包括那些专家学者们,历为毕竟嵌入式系统是计算机范畴下的一门综合性学科

二、嵌入式系统的分层与专业的分类。

嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。

1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用C和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成CPLD的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。

硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、C语言。

2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可是最高的。

驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。

3、操作系统层,对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,XP操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲Hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。

4、应用层,相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。如果涉及Java方面的编程也是如此的。嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发(比如基于SIP、H.323、Astrisk)方面又较为复杂,并且有难度了。

三、目标与定位。

先有目标,再去定位。

学ARM,从硬件上讲,一方面就是学习接口电路设计,另一方面就是学习汇编和C语言的板级编程。如果从软件上讲,就是要学习基于ARM处理器的操作系统层面的驱动、移植了。这些对于初学都来说必须明确,要么从硬件着手开始学,要么从操作系统的熟悉到应用开始学,但不管学什么,只要不是纯的操作系统级以上基于API的应用层的编程,硬件的寄存器类的东西还是要能看懂的,基于板级的汇编和C编程还是要会的。因此针对于嵌入式系统的硬件层和驱动程的人,ARM的接口电路设计、ARM的C语言和汇编语言编程及调试开发环境还是需要掌握的。

因此对于初学者必然要把握住方向,自己的目标是什么,自己要在那一层面上走。然后再着手学习较好,与ARM相关的嵌入式系统的较为实际的两个层面硬件层和驱动层,不管学好了那一层都会很有前途的。

如果想从嵌入式系统的应用层面的走的话,可能与ARM及其它体系相去较远,要着重研究基嵌入式操作系统的环境应用与相应开发工具链,比如WinCe操作系统下的EVC应用开发(与windows下的VC相类似),如果想再有突破就往某些音视频类的协议上靠,比如VOIP领域的基于SIP或H。323协议的应用层开发,或是基于嵌入式网络数据库的开发等等。

对于初学者来讲,要量力而行,不要认为驱动层工资高就把它当成方向了,要结合自身特点,嵌入式系统四个层面上那个层面上来讲都是有高人存在,当然高人也对应的高工资,我是做硬件层的,以前每月工资中个人所得税要被扣上近3千大元,当然我一方面充当工程师的角色,一方面充当主管及人物的角色,两个职位我一个人干,但上班时间就那些。硬件这方面上可能与我PK的人很少了,才让我拿到那么多的工资。

四、开发系统选择。

很多ARM初学者都希望有一套自己能用的系统,但他们住住会产生一种错误认识就是认为处理器版本越高、性能越高越好,就象很多人认为ARM9与ARM7好,我想对于初学者在此方面以此入门还应该理智,开发系统的选择最终要看自己往嵌入式系统的那个方向上走,是做驱动开发还是应用,还是做嵌入式系统硬件层设计与板级测试。如果想从操作系统层面或应用层面上走,不管是驱动还是应用,那当然处理器性能越高越好了,但这个东西自学,有十分大的困难,不是几个月或半年或是一年二年能搞定的事。

在某种意义上请,ARM7与9的差别就是在某些功能指令集上丰富了些,主频提高一些而已,就比如286和386。对于用户来讲可能觉查不到什么,只能是感觉速度有些快而已。

ARM7比较适合于那些想从硬件层面上走的人,因为ARM7系列处理器内部带MMU的很少,而且比较好控制,就比如S3C44B0来讲,可以很容易将Cache关了,而且内部接口寄存器很容易看明白,各种接口对于用硬件程序控制或AXD单步命令行指令都可以控制起来,基于51单片机的思想很容易能把他搞懂,就当成个32位的单片机,从而消除很多51工程师想转为嵌入式系统硬件ARM开发工程师的困惑,从而不会被业界某此不是真正懂嵌入式烂公司带到操作系统层面上去,让他们望而失畏,让业界更加缺少这方面的人才。

而嵌入式系统不管硬件设计还是软件驱动方面都是十分注重接口这部分的,选择平台还要考察一个处理器的外部资源,你接触外部资源越多,越熟悉他们那你以后就业成功的机率就越高,这就是招聘时所说的有无“相关技能”,因为一个人不可能在短短几年内把所有的处理器都接触一遍,而招聘单位所用的处理器就可能是我们完全没有见过的,就拿台湾数十家小公司(市价几千万)的公司生产的ARM类处理器,也很好用,但这些东西通用性太差,用这些处理器的公司就只能招有相关工作经验的人了,那什么是相关工作经验,在硬件上讲的是外围接口设计,在软件上讲是操作系统方面相关接口驱动及应用开发经验。我从业近十年,20xx年ARM出现,我一天始做ARM7,然后直接跑到了Xscale(这个板本在ARM10—11之间),一做就是五年,招人面试都不下数百人,在这些方面还是深有体会的。

我个人认为三星的S3C44b0对初学者来说比较合适,为什么这么说哪?因为接口资源比较丰富,技术成熟,资料较多,应该十分适合于初学者,有问题可能很容易找人帮且解决,因为大多数人都很熟悉,就如同51类的单片机,有N多位专家级的人物可以给你帮忙,相关问题得以很快解答,所然业界认为这款ARM都做用得烂了,但对于初学者来,就却是件好事。

因此开发系统的选择,要看自己的未来从来目标方向、要看开发板接口资源、还要看业界的通用性。

五、如何看待培训。

首先说说我自己,我目前从业近十年,与国内嵌入式系统行业共同起步,一直站在嵌入式系统行业前沿,设计过多款高端嵌入式系统平台产品并为众多公司提供过解决方案,离职前为从事VOIP的美资公司设计IP—PBX,历任项目经理、项目主管、技术总监、部门经理,积累众多人脉,并集多年经验所得,考虑到学生就业与公司招人的不相匹配,公司想招人招不到,而学生和刚毕业的工程师想找份工作也不太容易,于此力创知天行科技有限公司,开展嵌入式系统教育培训。

因一线的科研人员和一线的教师不相接触,导至国内嵌入式人才缺乏,国外高校的技术超前于业界公司,而国内情况是业界公司方面的嵌入式系统技术要远远领先于高校。为架构业界与高校沟通的桥梁,把先进技能带给高校学子,为学生在就业竞争中打造一张王牌,并为业界工程师快速提升实现自我创造机遇,我就这样辞去了外企年薪20多万的职位,做嵌入式系统方面的培训了。

对于培训来讲,是花钱来买时间,很多工程师都喜欢自己学,认为培训不值,这也是有可能的,纯为赚钱的培训当然不会太有价值,但对于实力型的培训他们可能就亏大了,有这样一笔帐不知他们算过没有,如果一个一周的培训,能带给他们自学两年后才能掌握的知识,在培训完后他们用三个月到半年时间消化培训内容,这样他会省约至少一年半的时间来学其它的或重新站在另一个高度上工作,那么他将最迟一年后会拿到他两年后水平所对应的工资,就是在工资与水平对应的关系上比同批人缩短一年,每月按最少1千计,再减去培训费用至少多1.0万,同时也省了一年时间,不管是休闲也好,再继续提高也好,总之是跑到了队伍的前面了。

另一层面上讲,对于新人的培训相当于他们为自己提前买了份失业保险,有师傅会带领他们入道,我今年暑假时班里最年轻的一个学生是大二的,今年才上大三,这学期才刚学单片机,但现在ARM方面的编程工作已经搞得有声有色了,再过一年多毕业,他还会失业吗?再者通过培训,你可以知道很多业界不为常人所知的事,同时也为自己找了个师傅,就比如说,两个工程师分别用S3C2410和PXA255来做手持设备,同样两人都工作四年,再出去找工作,两人工资可能最多可相差一倍,为什么?这就是业界不为常人所知的规则,2410属于民品,被业界用烂了,做产品时成本特敏感,当然也对人才成本敏感了,PXA255是intel的东西,一个255 CPU能买三个2410,一直被业界定义为贵族产品,用的公司都是大公司或为军方服务的公司,不会在乎成本,只要把东西做好,一切都好说,但这方面做的人也少啊,因为开发系统贵啊。

对于说为自已找了个好师傅,我想是这样的,因为同级工程师间存在着某此潜在的竞争关系,有很多人不愿意把自己知道的东西教给别人,这意味着他将要失业,就是所说的教会徒弟,饿死师傅,但对于我们这些人就不存在这样的关系了,我是在嵌入式系统平台设计上走到了一定程序,目前在国内这块的技术上已经是自己很难再突破自己,因此很多东西我对大家都是OPEN的,就比如说下面那部分关于接口设计中所提到的时序接口东西,我要是不讲,却使是高级硬件工程师我想也几乎只有10%的人能知道吧。

六、成为高级嵌入式系统硬件工程师要具备的技能。

首先我声明,我是基于嵌入式系统平台级设计的,硬件这个方向我相对来讲比较有发言权,如果是其它方面所要具备的基本技能还要和我们培训中心其它专业级讲师沟通。他们的方面上我只能说是知道些,但不是太多,初级的问题也可以问我。

对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的Modem射频模块,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15K以上。

另一类就是数字部分了,在大方向上又可分为51/ARM的单片机类,DSP类,FPGA类,国内FPGA的工程师大多是在IC设计公司从事IP核的前端验证,这部分不搞到门级,前途不太明朗,即使做个IC前端验证工程师,也要搞上几年才能胜任。DSP硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。而ARM单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互PK,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单的连接,比如PXA255处理器I2C要求速度在100Kbps,如果把一个I2C外围器件,最高还达不到100kbps的与它相接,必然要导致设计的失败。这样的情况有很多,比如51单片机可以在总线接LCD,但为什么这种LCD就不能挂在ARM的总线上,还有ARM7总线上可以外接个Winband的SD卡控制器,但为什么这种控制器接不到ARM9或是Xscale处理器上,这些都是问题。因此接口并不是一种简单的连接,要看时序,要看参数。一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师把方案中的5V变1。8V的DC芯片,直接更换成LDO,有时就会把CPU烧上几个。前几天还有人希望我帮忙把他们以前基于PXA255平台的手持GPS设备做下程序优化,我问了一下情况,地图是存在SD卡中的,而SD卡与PXA255的MMC控制器间采用的SPI接口,因此导致地图读取速度十分的慢,这种情况是设计中严重的缺陷,而不是程序的问题,因此我提了几条建议,让他们更新试下再说。因此想成为一个优秀的工程师,需要对系统整体性的把握和对已有电路的理解,换句话说,给你一套电路图你终究能看明白多少,看不明白80%以上的话,说明你离优秀的工程师还差得远哪。其次是电路的调试能力和审图能力,但最最基本的能力还是原理图设计PCB绘制,逻辑设计这块。这是指的硬件设计工程师,从上面的硬件设计工程师中还可以分出ECAD工程师,就是专业的画PCB板的工程师,和EMC设计工程师,帮人家解决EMC的问题。硬件工程师再往上就是板级测试工程师,就是C语功底很好的硬件工程师,在电路板调试过程中能通过自已编写的测试程序对硬件功能进行验证。然后再交给基于操作系统级的驱动开发人员。

总之,硬件的内容很多很杂,硬件那方面练成了都会成为一个高手,我时常会给人家做下方案评估,很多高级硬件工程师设计的东西,经常被我一句话否定,因此工程师做到我这种地步,也会得罪些人,但硬件的确会有很多不为人知的东西,让很多高级硬件工程师也摸不到头脑。

那么高级硬件件工程师技术技能都要具备那些东西哪,首先要掌握EDA设计的辅助工具类如ProtelORCADPowperPCBMaplux2ISE、VDHL语言,要能用到这些工具画图画板做逻辑设计,再有就是接口设计审图能力,再者就是调试能力,如果能走到总体方案设计这块,那就基本上快成为资深工程师了。

[8] 嵌入式学习计划

嵌入式系统(Embedded system),是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,根据英国电气工程师协会( U.K. Institution of Electrical Engineer)的定义,嵌入式系统为控制、监视或辅助设备、机器或用于工厂运作的设备。与个人计算机这样的通用计算机系统不同,嵌入式系统通常执行的是带有特定要求的预先定义的任务。由于嵌入式系统只针对一项特殊的任务,设计人员能够对它进行优化,减小尺寸降低成本。嵌入式系统通常进行大量生产,所以单个的成本节约,能够随着产量进行成百上千的放大。

嵌入式系统是用来控制或者监视机器、装置、工厂等大规模设备的系统。国内普遍认同的嵌入式系统定义为:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。

嵌入式系统的核心是由一个或几个预先编程好以用来执行少数几项任务的微处理器或者单片机组成。与通用计算机能够运行用户选择的软件不同,嵌入式系统上的软件通常是暂时不变的;所以经常称为“固件”。

联网:

随着医疗电子、智能家居、物流管理和电力控制等方面的不断风靡,嵌入式系统利用自身积累的底蕴经验,重视和把握这个机会,想办法在已经成熟的平台和产品基础上与应用传感单元的结合,扩展物联和感知的`支持能力,发掘某种领域物联网应用。作为物联网重要技术组成的嵌入式系统,嵌入式系统的视角有助于深刻地、全面地理解物联网的本质。

这有两层意思:第一,物联网的核心仍然是互联网,是在互联网基础上的延伸和扩展的网络;第二,其用户端延伸和扩展到了任何物品与物品之间,进行信息交换和通信,必须具备嵌入式系统构建的智能终端。因此,物联网系统是通过射频识别(RFID)、红外感应器、全球定位系统、激光扫描器等信息传感设备,按约定的协议,把任何物品与互联网相连接,进行信息交换和通信的系统架构。

物联网不仅仅提供了传感器的连接,其本身也具有智能处理的能力,能够对物体实施智能控制,这就是我们嵌入式系统所能做到的。诚然,物联网将传感器和智能处理相结合,利用云计算、模式识别等各种智能技术,扩充其应用领域。从传感器获得的海量信息中分析、加工和处理出有意义的数据,以适应不同用户的不同需求,发现新的应用领域和应用模式。

[9] 嵌入式学习计划

一、嵌入式系统开发与应用概述

在今日,嵌入式ARM 技术已经成为了一门比较热门的学科,无论是在电子类的什么领域,你都可以看到嵌入式ARM 的影子。如果你还停留在单片机级别的学习,那么实际上你已经落下时代脚步了,ARM 嵌入式技术正以几何的倍数高速发展,它几乎渗透到了几乎你所想到的领域。本章节就是将你领入ARM 的学习大门,开始嵌入式开发之旅。以嵌入式计算机为技术核心的嵌入式系统是继网络技术之后,又一个IT领域新的技术发展方向。由于嵌入式系统具有体积小、性能强、功耗低、可靠性高以及面向行业具体应用等突出特征, 目前已经广泛地应用于军事国防、消费电子、信息家电、网络通信、工业控制等各个领域。嵌入式的广泛应用可以说是无所不在。

嵌入式微处理器技术的基础是通用计算机技术。现在许多嵌入式处理器也是从早期的PC 机的应用发展演化过来的,如早期PC 诸如TRS-80、Apple II 和所用的Z80 和6502 处理器,至今仍为低 端的嵌入式应用。在应用中,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高的优点。嵌入式处理器目前主要有Am186/88、386EX、SC-400、Power PC、68000、MIPS、ARM 等系列。

在早期实际的嵌入式应用中,芯片选择时往往以某一种微处理器内核为核心,在芯片内部集成必要的ROM/EPROM/Flash/EEPROM、SRAM、接口总线及总线控制逻辑、定时/计数器、WatchDog、I/O、串行口、脉宽调制输出、A/D、D/A 等各种必要的功能和外设。

二、实习设备

硬件:Embest EduKit-IV实验平台、ULINK2仿真器套件、PC机

软件:mu;Vision IDE for ARM集成开发环境、Windows 98//NT/XP

三、实习目的

1.初步掌握液晶屏的使用及其电路设计方法;掌握S3C2410X处理器的LCD控制器的使用;掌握通过任务调用的方法把液晶显示函数添加到uC/OS-II中;通过实验掌握液晶显示文本及图形的方法与程序设计。

2.了解S3C2410X处理器UART相关控制寄存器的使用; 熟悉ARM处理器系统硬件电路中UART接口的设计方法:掌握ARM处理器串行通信的软件编程方法。

3.掌握有关音频处理的基础知识;通过实验了解IIS音频接口的工作原理;通过实验掌握对处理器S3C2410X中IIS模块电路的控制方法;通过实验掌握对常用IIS接口音频芯片的控制方法。

4.了解mu;C/OS-II移植条件和内核基本结构;掌握将mu;C/OS-II内核移植到ARM9处理器上的方法和步骤。

四、实习要求

通过对mu;C/OS-II移植实验、mu;C/OS-II LCD显示实验、串口通信实验、IIS音频实验、液晶显示实验的学习,并将各部分内容合并,最终得出实习结果,实习要求在键盘上输入学号,在液晶显示屏上显示相应的学生信息。学生信息包括显示每个人的照片和姓名系别等,并用键控设置学生输出的顺序,输入学号就显示那个学生的信息,然后过一段时间就顺序循环播放。

移植mu;C/OS-II内核到ARM处理器S3C2410,在IDE中观察其运行状况编写S3C2410X处理器的串口通信程序;监视串行口UART1动作;将从UART1接收到的字符串回送显示。将从UART1接收到的字符串回送显示。

通过使用Embest EduKit-IV实验板的彩色液晶屏(800*480)进行电路设计,掌握液晶屏作为人机接口界面的设计方法,并编写任务函数在uC/OS-II系统中实现位图显示。在uC/OS-II中建立五个任务Tast1和Tast2,其中Tast1顺序熄灭四个LED,延迟一会在顺序点亮四个LED。Tast2在LCD屏幕上循环显示三幅图片,并打印一些文字信息和背景音乐。过使用Embest EduKit-III实验板的256 色彩色液晶屏(320x240)进行电路设计,掌握液晶屏作为人机接口界面的设计方法,并编写程序实现:画出多个矩形框;显示ASCII字符;显示汉字字符;显示彩色位图。

五、实习步骤

1. 准备实验环境

使用ULINK2仿真器连接Embest EduKit-IV实验平台的主板JTAG接口;使用Embest EduKit-IV实验平台附带的交叉串口线,连接实验平台主板上的COM2和PC机的串口(一般PC只有一个串口,如果有多个请自行选择,笔记本没有串口设备的可购买USB转串口适配器扩充);使用Embest EduKit-IV实验平台附带的电源适配器,连接实验平台主板上的电源接口。

2. 串口接收设置

在PC机上运行windows自带的超级终端串口通信程序,或者使用实验平台附带光盘内设置好了的超级终端,设置超级终端:波特率115200、1位停止位、无校验位、无硬件流控制,或者使用其它串口通信程序。(注:超级终端串口的选择根据用户的PC串口硬件不同,请自行选择,如果PC机只有一个串口,一般是COM1)

3. 打开实验例程

1)打开实验程序

2)运行mu;Vision IDE for ARM软件

3)默认打开的工程在源码编辑窗口会显示实验例程的说明文件readme.txt,详细阅读并理解实验内容。

4)工程提供了两种运行方式:一是下载到SDRAM中调试运行,二是固化到Nor Flash中运行。用户可以在工具栏Select Target下拉框中选择在RAM中调试运行还是固化Flash中运行。下面实验将介绍下载到SDRAM中调试运行,所以我们在Select Target下拉框中选择UART_Test IN RAM。

5)接下来开始编译链接工程,在菜单栏“Projiet”选择“Build target”或者“Rebuild all target files”编译整个工程。

6编译完成后,在输出窗口可以看到编译提示信息,比如““.SDRAMUART_Test.axf” - 0 Error(s), 1 Warning(s).”,如果显示“0 Error(s)”即表示编译成功。

7)拨动实验平台电源开关,给实验平台上电,单击菜单栏Debug->Start/Stop Debug Session项将编译出来的映像文件下载到SDRAM中,或者单击工具栏“”按钮来下载。

8)下载完成后,单击菜单栏Debug->Run项运行程序,或者单击工具栏“”按钮来全速运行程序。用户也可以使用进行单步调试程序。

9)全速运行后,用户可以在超级终端看到程序运行的信息。

10)用户可以Stop程序运行,使用mu;Vision IDE for ARM的一些调试窗口跟踪查看程序运行的`信息。 注:如果在第4)步用户选择在Flash中运行,则编译链接成功后,单击菜单栏Flash->Download项将程序固化到NorFlash中,从实验平台的主板拔出JTAG线,给实验平台重新上电,程序将自动运行。

部分程序图:

串口通信实验:

IIS音频实验:

六、实习体会

在嵌入式系统中,除了课本上的基础知识外,还学会了软件编程的基本思路,掌握了液晶屏的使用及其电路设计方法;掌握有关音频处理的基础知识;掌握液晶显示文本及图形的方法与程序设计。

通过这次设计,掌握了液晶显示实验、mu;C/OS-II移植、mu;C/OS-IILCD显示的工作原理及串口通信实验的工作过程,学会了使用仿真软件Embest EduKit-IV实验平台及ULINK2仿真器套件,并学会通过应用软件仿真来实现各种通信系统的设计,对以后的学习和工作都起到了一定的作用,加强了动手能力和学业技能。虽然花了很长时间编写软件程序设计,但这一切还是理论上的。希望学校能提供机会和条件,让我们能够去真正地将理论和实践相结合。通过这次程序,感觉自己所掌握的知识是那么的有限,还有许多需要改进和不足的地方,同时也帮助了我怎样学好这门课程,增加了我对这门学科的兴趣。总体来说,这次实习我受益匪浅。在摸索该如何设计电路使之实现所需功能的过程中特别有趣,培养了我的设计思维,增加了实际操作能力。在让我体会到了设计电路的艰辛的同时,更让我体会到成功的喜悦和快乐。通过这次实习通信系统的设计,使我更加清楚以后的发展及学习的方向。

最后感谢老师这个学期的指导和帮助!

七、参考文献

《ARM9嵌入式系统设计与开发应用》熊茂华、杨震伦编著 清华大学出版社

《ARM9嵌入式系统设计与开发教程》于明编著 电子工业出版社

《Linux嵌入式系统教程》马忠梅 北京航空航天大学出版社

[10] 嵌入式学习计划

1 实时系统

实时系统是指数据产生时,能以足够快的速度来进行处理,处理的结果能在规定的时间内来控制生产过程与处理系统,让它做出极快的响应。在实时系统中,如果指定的时间没有完成确定的任务,整个系统会全面失败,这被称为硬实时系统,反之,如果在指定的时间内没有完成确定的任务,不会出现致命的错误就被称为软实时系统。

2 分时系统

分时系统是把时间划为长短基本相同的时间片,操作系统轮流分配给各个作业使用,如果某个作业在时间片结束完成,这个作业被挂起,等下一轮循环再继续使用,分时操作系统具有以下几个特点:多路性,用户通过各自的'终端可以同时使用一个系统;及时性,对于提出的要求,系统能在较短的时间内得到响应与处理;独立性,虽然同一时间内可以多个用户使用同一个CPU,但是用户之间操作独立,彼此不干涉。

3 嵌入式系统选型

选择自己需要的嵌入式系统,可以从以下几方面进行对比选择。

3.1 进入市场时间

产品的进入时间与选择的操作系统有很大的关系,实际的产品与演示的产品不同。一些高效推出的操作系统由于研发时间不够、技术累积不够,导致成本高、核心竞争能力差。比如WinCE操作系统,它就是在windows系统上作一定程度的改变,去掉一些不需要的功能,很快推出产品,结果实用时出现很多问题。

3.2 可移植性

通常来说,嵌入式系统的移植性越好,可在在不同平台、不同系统上都能移植,那是处于最理想的状态,然而实际运用中并不能达到这种理想状态,如果过于强调移植性,那么会付出性能优化的代价。

3.3 可利用资源

嵌入式系统是以快速、低成本、高效率的推平适合用户需要的一个系统平台,而在这个平台上能使用多少功能,需要使用第三方的产品,因此这个平台上能使用多少第三方的产品是选型的一个重要条件,有些嵌入式系统为了满足高性能、高可靠性的要求,使用比较封闭的操作系统,多数只能使用自己独立

3.4 系统定制能力

用户在使用嵌入式操作系统的时候,要求能定制不同的硬件平台,比如会要求能否对系统提出底层的更动要求?能否定制出现能满足自己需要、更有自己特色的系统、能否开放原代码等等。

3.5 成本

选择嵌入式操作系统,需要考虑成本的问题,比如一个系统是完全免费的,还是需要支付许可使用费等等,在这个选择中,并不是免费的就是最好的,这要考虑到硬件设计人员的投入、公司的管理、第三方软件的开发及使用,等等方面的问题,最后对成本作一个综合考量。

3.6 语言内核支持

语言内核支持指操作系统能使用几种语言操作,比如西文的、中文的,如果是可以使用中文操作,那么它是否支持双字节编码,是只支持简体中文系统还是同时支持繁体系统,同时还要考虑中文输入法与处理系统,语言内核的支持与第三方软件资源的利用有非常重要的联系。

[11] 嵌入式学习计划

摘要:随着CPU的性能的不断提升,处理速度越来越快,运算能力不断增强,在许多嵌入式系统的开发中逐渐出现了软外设(Software Peripherals)。所谓软外设是指以软件编程为手段,模拟CPU的外围设备的功能,真正达到以软代硬的目的。软外设的出现给产品的开发带来了极大的灵活性,不但使系统体积变得更小,而且使系统的升级换代变得更为方便,从而真正实现SOC。

本文介绍软外设的设计思想以及在开发过程中应注意的事项,并结合一个嵌入式系统,分析软外设对系统的影响以及如何使设计合理化。

关键词:嵌入式系统 UART Software Peripherals

一、介绍

应该说软外设并不是一个新思想,从计算机发明以来,电子系统设计人员一直试图尽可能多地用软件编程来代替实际电路,通过这种方式把外设嵌入进系统。但由于CPU速度、计算能力有限,以及内存技术的发展不够成熟,从而束缚了软外设的发展。

近年来,随着电子技术的发展,越来越多的处理器厂家在处理器的设计中加大了对软外设的支持,象ARM公司宣称他们的32、64位RISC处理器已经能用软件实现更多更强的功能,指令集也更为丰富,甚至包括DSP方面的许多功能现在已经能够在CPU上实现。Motorola公司已经开发出基于SM56PCI接口的用纯软件实现的调制解调器。这些都说明电路设计已经进入了一个崭新的时期。

目前,电子设计中把外设嵌入进系统的方法主要有两种。方法Ⅰ是采用标准的微处理器+一块辅助芯片,辅助芯片可以是FPGA或CPLD等可编程逻辑芯片;方法Ⅱ是采用基本的CPU内核+附加逻辑单元,这些可以在一块高密度可编程逻辑芯片上实现,CPU内核往往为Altera和Xilinx等FPGA生产厂家提供的软件模块。以上两种方法都需要开发人员熟悉硬件描述语言,但在实际应用中CPU内核以及各种IP核的使用的往往要得到产权许可,而且可编程逻辑芯片体积大,价格昂贵,故在一些便携式装置的研制中不便采用。

软外设的设计通常是采用标准的微处理器,在满足系统稳定和系统负荷允许的条件下,设计中尽可能多地采用可配置的软件模块,用这些可配置的软件模块来实现某种外设的功能。并且可以配置、升级、重组,从而完成特定的功能。应该说明的是,并不是所有外设的功能都能完全由软件实现,这种设计方法的目的是在系统允许的条件下尽量“以软代硬”,以尽可能少的硬件开销取得最佳的性能比。

二、系统要求

下面给出具有软外设的嵌入式系统结构图。

下面给出对嵌入式系统的要求:

(1)高性能CPU内核。软外设的必须以高性能CPU内核为支持,只有采用高性能CPU内核,系统的频率才能得以提高,软外设和CPU之间才能高速传送数据,软外设才能得以高速运行而对系统整体工作不会有太多影响。建议采用带有流水线、32位以上RISC核的CPU。

(2)快速的中断响应。软外设均采用中断方式向CPU提出服务请求。可以在片上存储器与内部总线之间增加寄存器组来减少系统的中断响应时间。

(3)附加硬件模块。正如前面所提,系统有些特性是不能由软件实现的,象定时器、中断控制器。另外在信号处理中由于A/D、D/A转换如果用软件实现对系统开销太大,由硬件实现较好。

(4)快速、足够的存储器和高性能的运算单元。

三、软外设的算法设计

由于软外设要求实时性强,有时需要和别的应用程序并行执行,在设计时可以把软外设看作等待服务的任务,协调、安排好这些任务非常重要,根据任务的确定性可以把实时系统的进程调度策略划分为两类:一类是静态的,主要负责预先知道发生时间的任务;要求按进度准点完成的任务;要求固定时间发生的任务。对这类调度策略可以采用Round-robin算法或间隔算法(见3)。另外一类是动态进程调度策略,负责那些不能预测何时发生任务;不知执行周期有多长的任务。这是一些具有临时性的任务,比如含有条件循环的任务(不知何时满足条件)。以上两种策略分别适用于不同的情况,在一个复杂的系统中,往往存在几个要求并行执行的软外设,进程的调度对任务的同步和系统的优化非常重要。

另外为了设计的可移植性和简便,要进行模块化和层次化设计,复杂的软外设可以看作由几个具有层次的简单的模块构成。

四、性能分析

现以示出了一个嵌入式系统的框图,该系统采用Motorola公司生产的MCF5104型号CPU,接有三个软外设,分别为UART、LCD和键盘控制器。现在从工作速度和能量损耗方面以UART软外设为例,对软外设进行性能分析。

在UART实现程序中,共有16条汇编指令,假定每条指令需要一个时钟周期(即CPI=1),没有奇偶校验功能。通过改变CPU主频(变化范围为30~100),计算执行的时间占有CPU时间的比率,分析UART软外设在不同波特率情况下对CPU的负担,计算过程如下:

假定CPU发送/接收一个字节的时间为t。UART软外设的CPU占有率为T,则

t=指令数×CPI+中断响应周期×CPU主频-1。

T=t×波特率。

结果如表1所示。

表1 UART的CPU占有率

Rate(bit/s)

MHz

19200

38400

57600

1152000

30

1.534%

3.070%

4.605%

9.215%

50

0.920%

1.843%

2.764%

5.530%

75

0.614%

1.227%

1.843%

3.687%

100

0.460%

0.921%

1.380%

2.764%

上表中的统计数据是在假定UART工作在全双工方式(FD)下,没有检错功能得到的,而系统绝大多数时间是工作在半双工方式(HD)下的,HD方式下该UART的CPU占有时间率要减少25%。如果加上奇偶校验功能,该软外设的CPU占有时间率在FD方式会增加11.45%,HD方式下增加7.60%。

由表1可知,CPU频率越高,软外设对系统的负担越小,另外随着UART的波特率增加,系统负担加重。建议软外设的运行占CPU时间不能超过20%,实验证明,软外设的CPU占有率不超过20%的情况下对系统来说是可以承受的。

接下来我们分析该软外设的能耗问题。图三示出了CPU在接有URAT软外设或URAT硬件的情况下在不同情况下的CPU消耗电流曲线。

上图表明:

1.随着波特率增加,UART软外设的能耗增加。

2.随着CPU主频增加,UART软外设的能耗增加。

3.波特率在小于70Kbit/s时UART软外设的能耗低于硬件外设,此时选用软外设可以降低能耗,即该软外设适合于数据量不是很大的场合(如语音通信)。在要求系统传输速率极快的情况下(如视频流传输),选用硬件实现较为合适。

五、结束语

本文系统地介绍了软外设的设计思想,并以一个软外设为例,分析了它的一些性能指标。软外设具有许多优点:如调试方便,系统可移植性强,能耗小,成本低。很适合在一些要求便携式、低能耗的场合应用。虽然也存在一些缺点,如速度慢,并行性差,但随着CPU相关技术的发展以及算法的完善,这些方面在一定程度上会得到改观。设计人员在设计时需要对硬件设计和软件设计进行折衷考虑。毕竟,软外设的出现给嵌入式系统设计提供了一种更为灵活的设计方案,给设计人员也提供了更多的选择余地,更广的设计空间。

[12] 嵌入式学习计划

嵌入式系统是以应用为中心,以计算机为基础,软硬件可裁剪,适用于系统对功能、可靠性、成本、功耗严格要求的专用计算机系统。实时性是嵌入式系统的基本要求,其次,还要求代码小,速度快,可靠性高。嵌入式Linux(Embedded Linux)是指对Linux经过裁剪小型化后,可固化在存储器或单片机中,应用于特定嵌入式场合的专用Linux操作系统。嵌入式Linux的开发和研究已经成为目前操作系统领域的一个热点。与其它嵌入式操作系统相比,Linux的特点如下:

第一,Linux系统是层次结构且内核完全开放。Linux是由很多体积小且性能高的微内核系统组成。在内核代码完全开放的前提下,不同领域和不同层次的用户可以根据自己的应用需要方便地对内核进行改造,低成本地设计和开发出满足自己需要的嵌入式系统。

第二,强大的网络支持功能。Linux诞生于因特网时代并具有Unix的特性,保证了它支持所有标准因特网协议,并且可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。

第三,Linux具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,可以跨越嵌入式系统开发中仿真工具的障碍。Linux也符合IEEE POSIX.1标准,使应用程序具有较好的可移植性。

传统的嵌入式开发的程序调试和调试工具是用在线仿真器(ICE)实现的。它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,完成监视和调试程序;但一般价格比较昂贵,只适合做非常底层的调试。

第四,Linux具有广泛的`硬件支持特性。无论是RISC还是CISC、32位还是64位等各种处理器,Linux都能运行。这意味着嵌入式Linux将具有更广泛的应用前景。

[13] 嵌入式学习计划

嵌入式系统常用术语锦集

嵌入式系统是面向用户、面向产品、面向应用的,它必须与具体应用相结合才会具有生命力、才更具有优势。以下是关于嵌入式系统常用术语,希望大家认真阅读!

A

ASIC(专用集成电路)

Application-Specific Integrated Circuit. A piece of custom-designed hardware in a chip.

专用集成电路。一个在一个芯片上定制设计的硬件。

address bus (地址总线)

A set of electrical lines connected to the processor and all of the peripherals withwhich itcommunicates. The address bus is used by the processor to select aspecific memory location or register within a particular peripheral. If the address bus contains n electrical lines, the processor can uniquely address up to 2^n such locations.

一个连接处理器与所有外设的,用来通讯的电子线路集。地址总线被处理器用来选择在特定外设中的存储器地址或寄存器。如果地址总线有n条电子线路,处理器能唯一寻址高达2^n的地址空间。

application software(应用软件)

Describes software modules specific to a particular embedded project. Theapplication software is unlikely to be reusable across embedded platforms, simplybecause each embedded system has a different application.

用来描述一个特定的嵌入式项目中的某一软件模块。应用软件不象可重用的交叉嵌入式平台,只是因为每一个嵌入式系统有不同的应用软件。

assembler(汇编编译器)

A software development tool that translates human-readable assembly languageprograms into machine-language instructions that the processor can understandand execute.

一个能把人可读的汇编语言程序转换到处理器可理解和运行的机器指令的软件开发工具。

assembly language(汇编语言)

A human-readable form of a processor"s instruction set. Most processor-specific functions must be written in assembly language.

一种人可读的处理器指令集的形式。大多数处理器相关的功能必须用汇编语言编写。

B

BSP(板卡支持包)

See board support package.

见board support package。

binary semaphore(二元信号)

A type of semaphore with just two states. Also called a mutex.

一种只有两种状态的信号。也叫互斥信号。

board support package(板卡支持包)

Part of a software package that is processor or platform-dependent. Typically,sample source code for the board support package is provided by the package developer. The sample code must be modified as necessary, compiled, and linked with the remainder of the software package.

软件包的具有平台依赖性的那一部分。典型地,板卡支持包的样例源程序由包开发者提供。样例源程序必须能在需要时被修改、编译并与软件包的剩下的部分连接起来。

bond-out processor (外合处理器)

A special version of a processor that has some of the internal signals brought out to external pins. A bond-out processor is most often found within an emulator and is never intended to be used in a production system.

一种特殊版本的处理器,它有一些,内部的信号能传达到外置的针脚上。一个外合处理器绝大多数情况下只用在模拟器上,从来不会被特意用在产品系统上。

Breakpoint (断点)

A location in a program at which execution is to be stopped and control of the processor switched to the debugger. Mechanisms for creating and removing breakpoints are provided by most debugging tools.

一个在程序中的地址,在那里程序的执行被停止,并且处理器的控制转换到了除错程序。大多数除错工具提供增加与删除一个断点的机制。

C

CISC(复杂指令集计算机)

Complex Instruction Set Computer. Describes the architecture of a processor family. CISC processors generally feature variable-length instructions, multiple addressing formats, and contain only a small number of general-purpose registers. Intel"s 80x86 family is the quintessential example of CISC. Contrast with RISC.

复杂指令集计算机。对一种处理器架构的描述。CISC处理器一般产生变长的指令,多种地址格式,并且仅仅有少量的通用寄存器。Intel的80x86家族是是典型的CISC处理器。相对于RISC而言。

CPU(中央处理器)

Central Processing Unit. The part of a processor that executes instructions.

中央处理器。处理器中执行指令的那一部分。

Compiler(编译器)

A software development tool that translates high-level language programs into the machine-language instructions that a particular processor can understand and execute.

把高级编程语言程序转换到只有特定的处理器能了解和执行的机器指令的一种软件开发包。

context (上下文)

The current state of the processor"s registers and flags.

处理器当前的状态和标志。

context switch(上下文切换)

The process of switching from one task to another in a multitasking operating system. A context switch involves saving the context of the running task and restoring the previously-saved context of the other. The piece of code that does this is necessarily processor-specific.

在多任务操作系统中我一个任务切换到另一个的过程。上下文切换包括保存正在运行的任务的上下文和恢复早先保存的另一个任务的上下文。做这个工作的一段代码必须具有处理器特权。

counting semaphore(计数信号)

A type of semaphore that is used to track multiple resources of the same type. An attempt to take a counting semaphore is blocked only if all of the available resources are in use. Contrast with binary semaphore.

一种用来跟踪多个相同类型资源的信号灯。仅仅在所有可用的资源都被用完了时才阻塞。相对二元信号而言。

critical section(临界段)

A block of code that must be executed in sequence and without interruption to guarantee correct operation of the software. See also race condition.

一段必须按次序执行的代码,并且不能被中断,否则不能保证软件正确地操作。参照:竞争状况。

cross-compiler(交叉编译器)

A compiler that runs on a different platform than the one for which it produces object code. A cross-compiler runs on a host computer and produces object code for the target.

一个运行在不同的平台上的编译器,其中之一能产生目标代码。交叉编译器在主机上运行并且产生目标机的目标代码。

D

DMA(直接内存访问)

Direct Memory Access. A technique for transferring data directly between two peripherals (usually memory and an I/O device) with only minimal intervention by the processor. DMA transfers are managed by a third peripheral called a DMA controller.

直接内存访问。一种直接在两个外设(通常是内存和I/O设备)之间进行数据传输的技术,它只要处理器最少的介入。DMA传输由叫DMA控制器的第三方外设进行管理。

DRAM(动态随机访问存储器)

Dynamic Random-Access Memory. A type of RAM that maintains its contents only as long as the data stored in the device is refreshed at regular intervals. The refresh cycles are usually performed by a peripheral called a DRAM controller.

动态随机访问存储器。一种RAM,存储在其设备中的数据被定期刷新时才能保存它的内容。刷新周期一般由一个叫DRAM控制器的外设完成。

Data bus(数据总线)

A set of electrical lines connected to the processor and all of the peripherals with which it communicates. When the processor wants to read (write) the contents of a memory location or register within a particular peripheral, it sets the address bus pins appropriately and receives (transmits) the contents on the data bus.

连接处理器与所有外设进行通讯的电子线路集。当一个处理器想去写(读)某一特定外设中的存储器地址或寄存器中的内容时,处理器设置地址总线并在数据总线上接收(传输)内容。

Deadline(死线)

The time at which a particular set of computations must be completed. See also real-time system.

一个特定计算必须被完成的时间。请看实时系统。

Deadlock(死锁)

An unwanted software situation in which an entire set of tasks is blocked, waiting for an event that only a task within the same set can cause. If a deadlock occurs, the only solution is to reset the hardware. However, it is usually possible to prevent deadlocks altogether by following certain software design practices.

一种不希望出现的软件状态,在这个状态下,所有的任务因为等待一个只有在这些被阻塞任务之一才能产生的事件而被阻塞。如果死锁发生,唯一解决的方法是重启动硬件。但是,通过可靠的软件设计实践活动通常可以防止死锁的发生。

debug monitor(除错监视程序)

A piece of embedded software that has been designed specifically for use as a debugging tool. It usually resides in ROM and communicates with a debugger via a serial port or network connection. The debug monitor provides a set of primitive commands to view and modify memory locations and registers, create and remove breakpoints, and execute your program. The debugger combines these primitives to fulfill higher-level requests like program download and single-step.

嵌入式软件被特殊设计来作为除错工具的一部分。它一般被放在ROM中,通过串口或网络与除错器进行通讯。除错监视程序提供一个简单的命令集来显示和内存地址和寄存器、建立和移除断点,并且运行你的程序。除错监视器组合这些简单的命令去实现象程序下载各单步调试等高端的请求。

Debugger(除错器)

A software development tool used to test and debug embedded software. The debugger runs on a host computer and connects to the target through a serial port or network connection. Using a debugger you can download software to the target for immediate execution. You can also set breakpoints and examine the contents of specific memory locations and registers.

一个软件开发工具,被用来对嵌入式软件进行测试和除错。除错器在宿主机上运行并且通过串口或网络连接到目标机上。你能使用除错器下载软件到目标机并直接运行。你也可以设置断点并检查特定内存地址或寄存器的内容。

device driver(设备驱动程序)

A software module that hides the details of a particular peripheral and provides a high-level programming interface to it.

一个软件模块,它隐藏特定外设的细节并提供高级的外设编程接口。

device programmer(设备编程器)

A tool for programming non-volatile memories and other electrically-programmable devices. Typically, the programmable device is ed into a socket on the device programmer and the contents of a memory buffer are then transferred into it.

一种用来对不挥发内存和其他电可编程设备进行编程的工具。典型地,可编程设备插在设备编程器的接口上,接着内存缓存器中的内容被传送到它里面。

[14] 嵌入式学习计划

一、嵌入式系统开发与应用概述

在今日,嵌入式ARM 技术已经成为了一门比较热门的学科,无论是在电子类的什么领域,你都可以看到嵌入式ARM 的影子。如果你还停留在单片机级别的学习,那么实际上你已经落下时代脚步了,ARM 嵌入式技术正以几何的倍数高速发展,它几乎渗透到了几乎你所想到的领域。本章节就是将你领入ARM 的学习大门,开始嵌入式开发之旅。以嵌入式计算机为技术核心的嵌入式系统是继网络技术之后,又一个IT领域新的技术发展方向。由于嵌入式系统具有体积小、性能强、功耗低、可靠性高以及面向行业具体应用等突出特征, 目前已经广泛地应用于军事国防、消费电子、信息家电、网络通信、工业控制等各个领域。嵌入式的广泛应用可以说是无所不在。

嵌入式微处理器技术的基础是通用计算机技术。现在许多嵌入式处理器也是从早期的PC 机的应用发展演化过来的,如早期PC 诸如TRS-Apple II 和所用的Z重量轻、成本低、可靠性高的优点。嵌入式处理器目前主要有AmSC-Power PC、MIPS、ARM 等系列。

在早期实际的嵌入式应用中,芯片选择时往往以某一种微处理器内核为核心,在芯片内部集成必要的ROM/EPROM/Flash/EEPROM、SRAM、接口总线及总线控制逻辑、定时/计数器、WatchDog、I/O、串行口、脉宽调制输出、A/D、D/A 等各种必要的功能和外设。

二、实习设备

硬件:Embest EduKit-IV实验平台、ULINKPC机

软件:μVision IDE for ARM集成开发环境、Windows 98/2000/NT/XP

三、实习目的

1.初步掌握液晶屏的使用及其电路设计方法;掌握S3C2410X处理器的LCD控制器的'使用;掌握通过任务调用的方法把液晶显示函数添加到uC/OS-II中;通过实验掌握液晶显示文本及图形的方法与程序设计。

2.了解S3C2410X处理器UART相关控制寄存器的使用; 熟悉ARM处理器系统硬件电路中UART接口的设计方法:掌握ARM处理器串行通信的软件编程方法。

3.掌握有关音频处理的基础知识;通过实验了解IIS音频接口的工作原理;通过实验掌握对处理器S3C2410X中IIS模块电路的控制方法;通过实验掌握对常用IIS接口音频芯片的控制方法。

4.了解μC/OS-II移植条件和内核基本结构;掌握将μC/OS-II内核移植到ARM9处理器上的方法和步骤。

四、实习要求

通过对μC/OS-II移植实验、μC/OS-II LCD显示实验、串口通信实验、IIS音频实验、液晶显示实验的学习,并将各部分内容合并,最终得出实习结果,实习要求在键盘上输入学号,在液晶显示屏上显示相应的学生信息。学生信息包括显示每个人的照片和姓名系别等,并用键控设置学生输出的顺序,输入学号就显示那个学生的信息,然后过一段时间就顺序循环播放。

移植μC/OS-II内核到ARM处理器S3C2410,在IDE中观察其运行状况编写S3C2410X处理器的串口通信程序;监视串行口UART1动作;将从UART1接收到的字符串回送显示。将从UART1接收到的字符串回送显示。

通过使用Embest EduKit-IV实验板的彩色液晶屏(800*480)进行电路设计,掌握液晶屏作为人机接口界面的设计方法,并编写任务函数在uC/OS-II系统中实现位图显示。在uC/OS-II中建立五个任务Tast1和Tast2,其中Tast1顺序熄灭四个LED,延迟一会在顺序点亮四个LED。Tast2在LCD屏幕上循环显示三幅图片,并打印一些文字信息和背景音乐。过使用Embest EduKit-III实验板的256 色彩色液晶屏(320x240)进行电路设计,掌握液晶屏作为人机接口界面的设计方法,并编写程序实现:画出多个矩形框;显示ASCII字符;显示汉字字符;显示彩色位图。

五、实习步骤

1. 准备实验环境

使用ULINK2仿真器连接Embest EduKit-IV实验平台的主板JTAG接口;使用Embest EduKit-IV实验平台附带的交叉串口线,连接实验平台主板上的COM2和PC机的串口(一般PC只有一个串口,如果有多个请自行选择,笔记本没有串口设备的可购买USB转串口适配器扩充);使用Embest EduKit-IV实验平台附带的电源适配器,连接实验平台主板上的电源接口。

2. 串口接收设置

在PC机上运行windows自带的超级终端串口通信程序,或者使用实验平台附带光盘内设置好了的超级终端,设置超级终端:波特率无校验位、无硬件流控制,或者使用其它串口通信程序。(注:超级终端串口的选择根据用户的PC串口硬件不同,请自行选择,如果PC机只有一个串口,一般是COM1)

3. 打开实验例程

1)打开实验程序

2)运行μVision IDE for ARM软件

3)默认打开的工程在源码编辑窗口会显示实验例程的说明文件readme.txt,详细阅读并理解实验内容。

4)工程提供了两种运行方式:一是下载到SDRAM中调试运行,二是固化到Nor Flash中运行。用户可以在工具栏Select Target下拉框中选择在RAM中调试运行还是固化Flash中运行。下面实验将介绍下载到SDRAM中调试运行,所以我们在Select Target下拉框中选择UART_Test IN RAM。

5)接下来开始编译链接工程,在菜单栏“Projiet”选择“Build target”或者“Rebuild all target files”编译整个工程。

6编译完成后,在输出窗口可以看到编译提示信息,比如“".SDRAMUART_Test.axf" - 0 Error(s), 1 Warning(s).”,如果显示“0 Error(s)”即表示编译成功。

7)拨动实验平台电源开关,给实验平台上电,单击菜单栏Debug->Start/Stop Debug Session项将编译出来的映像文件下载到SDRAM中,或者单击工具栏“”按钮来下载。

8)下载完成后,单击菜单栏Debug->Run项运行程序,或者单击工具栏“”按钮来全速运行程序。用户也可以使用进行单步调试程序。

9)全速运行后,用户可以在超级终端看到程序运行的信息。

10)用户可以Stop程序运行,使用μVision IDE for ARM的一些调试窗口跟踪查看程序运行的信息。 注:如果在第4)步用户选择在Flash中运行,则编译链接成功后,单击菜单栏Flash->Download项将程序固化到NorFlash中,从实验平台的主板拔出JTAG线,给实验平台重新上电,程序将自动运行。

部分程序图:

串口通信实验:

IIS音频实验:

六、实习体会

在嵌入式系统中,除了课本上的基础知识外,还学会了软件编程的基本思路,掌握了液晶屏的使用及其电路设计方法;掌握有关音频处理的基础知识;掌握液晶显示文本及图形的方法与程序设计。

[15] 嵌入式学习计划

摘要:实时性、可靠性的要求,使得许多嵌入式应用使用自己的内存管理程序。本文探讨嵌入式系统中对内存管理的要求、存在的问题以及可能的解决策略;介绍一种“一次分配,多次使用”的动态内存分配方法,并给出2个例子。

    关键词:嵌入式系统 内存管理 一次分配多次使用

1 嵌入式系统中对内存分配的要求

①快速性。嵌入式系统中对实时性的保证,要求内存分配过程要尽可能地快。因此在嵌入式系统中,不可能采用通用操作系统中复杂而完善的内存分配策略,一般都采用简单、快速的内存分配方案。当然,对实性要求的程序不同,分配方案也有所不同。例如,VxWorks采用简单的最先匹配如立即聚合方法;VRTX中采用多个固定尺寸的binning方案。

②可靠性。也就是内存分配的请求必须得到满足,如果分配失败可能会带来灾难性的后果。嵌入式系统应用的环境千变万化,其中有一些是对可靠性要求极高的。比如,汽车的自动驾驶系统中,系统检测到即将撞车,如果因为内存分配失败而不能相应的操作,就会发生车毁人亡的事故,这是不能容忍的。

③高效性。内存分配要尽可能地少浪费。不可能为了保证满足所有的内存分配请求而将内存配置得无限大。一方面,嵌入式系统对成本的要求使得内存在其中只是一种很有限的资源;另一方面,即使不考虑成本的因素,系统有限的空间和有限的板面积决定了可配置的内存容量是很限的。

2 静态分配与动态分配

究竟应用使用静态分配还是动态分配,一直是嵌入式系统设计中一个争论不休的总是。当然,最合适的答案是对于不同的系统采用不同的方案。如果是系统对于实时性和可靠性的要求极高(硬实时系统),不能容忍一点延时或者一次分配失败,当然需要采用静态分配方案,也就是在程序编译时所需要的内存都已经分配好了。例如,火星探测器上面的嵌入式系统就必须采用静态分配的方案。另外,WindRiver公司的一款专门用于汽车电子和工业自动化领域的实时操作系统OSEKWorks中就不支持内存的动态分配。在这样的应用场合,成本不支持内存的动态分配。在这样的应用场合,成本不是优先考虑的对象,实时性和可靠性才是必须保证的。当然,采用静态分配一个不可避免的总是就是系统失去了灵活性,必须在设计阶段就预先知道所需要的内存并对之作出分配;必须在设计阶段就预先考虑到所有可能的情况,因为一旦出现没有考虑到的情况,系统就无法处理。这样的分配方案必须导致很大的浪费,因为内存分配必须按照最坏情况进行最大的配置,而实际上在运行中可能使用的只是其中的一小部分;而且在硬件平台不变的情况下,不可能灵活地为系统添加功能,从而使得系统的升级变得困难。

大多数的系统是硬实时系统和软实时系统的综合。也就是说,系统中的一部分任务有严格的时限要求,而另一部分只是要求完成得越快越好。按照RMS(Rate Monotoin Scheduling)理论,这样的系统必须采用抢先式任务调度;而在这样的系统中,就可以采用动态内存分配来满足那一部分可靠性和实时性要求不那么高的任务。采用动态内存分配的好处就是给设计者很大的灵活性,可以方便地将原来运行于非嵌入式操作系统的程序移植到嵌入式系统中,比如,许多嵌入式系统中使用的网络协议栈。如果必须采用静态内存分配,移植这样的协议栈就会困难得多。另外,采用动态内存分配可以使设计者在不改变基本的硬件平台的情况下,比较灵活地调整系统的功能,在系统中各个功能之间作出权衡。例如,可以在支持的VLAN数和支持的路由条目数之间作出调整,或者不同的版本支持不同的协议。说到底,动态内存分配给了嵌入式系统的程序设计者在比较少的限制和较大的自由。因此,大多数实时操作系统提供了动态内存分配接口,例如malloc和free函数。

3 RTOS提供的内存分配接口

不同的RTOS由于其不同的定位,采用不同的内存分配策略。例如VRTX中,采用类似于GNU C中由Doug Lea开发的内存分配方案,即Binning算法,系统内存被分成了一些固定尺寸的内存块的算法,系统内存被分成了一些固定尺寸的内存块的集合。这种方法的优点是查找速度快而且不会产生内存碎片。但是,它的缺点也很明显,就是容易造成浪费,因为内存块的尺寸只有有限个,分配时只能取较大的内存块来满足一个较小的需求,累积起来,浪费就很大了;而且操作系统管理这样一个内存分配表也是一个很大的负担。

下面详细介绍一下我们常用的RTOS——美国风河公司(WindRiver)的VxWorks中采用的内存分配策略。VxWorks的前身就是VRTX,据说VxWorks的名称来自make vrtx work。

VxWorks的内存管

[16] 嵌入式学习计划

嵌入式学习心得总结

4月10号,为期一个阶段的Linux开发基础培训课程圆满结束,回首这些天所留下的点点滴滴,感触深深,学习上知识点的积累,灵活运用的过程中感受到了Linux操作的快速高效性能,这也是我所追求的效率!

当初初涉培训课程的第一门课程时,都说Linux操作很繁琐复杂,心里总有些顾忌,带着种种不安与些许拼博的决心,开始了自我提升阶段的“充电”,由徐海兵老师教授我们基础课程的培训,我们则像着小学生般认真的记着笔记,仔细听着并学会如何去在实践中运用所学的Linux下的各种强大的命令集。

在Unit 1中,徐老师详细生动的为我们讲述了有关Linux的诞生、初成长以及辉煌的发展至今,今后应用范围则愈来愈广泛,讲解了为Linux这个伟大的OS做出巨大贡献的一位位出色的、伟大的人物,他们那种学习钻研的精神、锲而不舍的信念、勇于把握住难得的机会,从小处着手,踏踏实实的创造出了对人类科技发展做出卓越贡献的Linux(Unix)系统,他们的种种,都值得我们去深刻反省、刻苦学习、传承并永远发展下去。

查看ip地址和重启网络服务是我学的第一个命令: ifconfig eth0、ifconfig eth0 IP地址、service network restart。了解到远程登录软件可用xmanager。

secureCRT是我们常用的,安装好后利用其登录到了Red hat Linux,需要知道Linux主机的ip 地址。徐老师为我们介绍了重要内容:SHELL,即运行程序的程序,如echo $SHELL可查看SHELL的环境变量是csh还是bash。(学习心得 )指令pwd可查看当前所在路径,passwd:更改Linux下的密码,仅限root用户有此权限,当然我们是利用虚拟机VMware程序来运行Linux OS的,懂得了如何设置虚拟机的网卡设置、暂停、恢复、全屏等。

简单的学习后进入Unit 2,命令行的句法让我懂得了用法规则,一系列的命令功能强大:

date 显示当前年月时间星期之类的;

more指令与less重要但不常用;

cat用于查看短小的文件内容,常用!

mkdir命令用于在当前目录下创建新的目录;

ls 显示当前目录下所有文件;cd 更改文件路径,如cd  、cd . 当前目录;

rmdir 删除空文件夹;

rm指令很强大,用于删除空目录及非空目录下的指定或全部文件;

man 真男人,帮助手册;

history指令用于显示编写过的命令集,以history 序号 可显示序号所指命令;

echo回写命令,很重要,我需要继续学习;

exit 指从多重SHELL退出来;

Linux账号下,可以增加用户、删除用户、设置密码:useradd、userdel、passwd;注:所有的用户的家目录都在/home下面,唯独root的家是在/root. 点文件都是些SHELL的脚本程序,也称隐藏文件;环境变量常见的`有:HOME PATH PWD,懂得了绝对路径与相对路径的对比概念。

Unit 3、文件与文件处理的学习中,知道了Linux下支持的六种文件类型:普通文件、目录、设备文件、命名管道、符号链接、socket;Linux下文件系统的组织:倒立的树形结构:/  /bin  /boot  /dev  /home  /lib  /proc等文件目录,ls Cl指令很好很强大,显示文件类型与权限、所有者、字节大小、时间及文件名;touch可创建空文件,复制文件用指令 cp,可选-i、-r等;重命名文件使用 mv [-i];du 显示当前目录所占空间大小;wc 命令 显示列表中文件的行数、字数、字符数;追加:cat [文件列表] 》 目标文件;find指令与grep重要,暂未学习,自己在实践中学习,文件访问权限有:r w x;chmod指令可修改访问权限,如 chmod 777  -R 文件名。

输入输出重定向  每个命令默认打开三个文件:标准输入stdin,标准输出stdout,标准错误stderr,键盘为标准输入,而控制台则是标准输出,文件描述符分别是0,1,2;最重要最常用的为输出重定向 > 与错误重定向 2> ;

echo  添加的内容 >/ 》 文件;

Linux过滤器和管道:管道操作符:| ;即将某个命令的输出与某个命令的标准输入相连接,从而实现管道功能,例如 ls Cl |wc;管道和重定向操作符可同时用于一个命令行。

Unit 5:Linux/Unix进程  进程为程序运行的一个实例,可用ctrl-z挂起进程,或在命令后加上&符号即可;运行在后台的系统进程是守护进程,它为用户提供各种服务。

bg、fg 分别将进程放后台、前台运行,jobs则是查询所运行的进程的状态;

& 放于命令间表示可同时运行多个命令;

了解常用环境变量:HOME,PATH,TERM,PWD以及PS1 、2,其中PATH最为重要,保存用冒号分割的目录路径名,vim Cr /etc/profile可打开路径并修改PATH。

export 显示当前所有的环境变量;

unset 用于清除环境变量;

执行cp 文件名 /bin 后可直接写并运行文件;

Shell的元字符下有许多字符,如* 匹配0个或多个字符;?匹配单个字符;[]中可加入数字或字母,ls [abc]将查询a、b、c字符的文件。

当看到“Linux网络服务器的搭建”时,内心激动万分,一直听说,但未实践过,很好奇,随后徐老师为我们细心讲解了如何设置与操作,首先我知道了Linux下的文件系统类型多种多样,它支持中虚拟文件系统VFS,因此文件系统扩展性很好。

文件归档这一小节,真的很惭愧,太多的不理解,而且必须尽快解决的。

RPM包的安装与使用:rpm Civh 所要安装的Linux下的程序名;rpm的查询用:rpm Cqa;删除用:rpm Ce 程序名

SAMBA服务器搭建:(重点)首先在Linux下创建samba服务器,进行设置,分享指定目录,查出Linux下的IP地址,将windows与Linux下的防火墙关闭,ping指令能否ping通,然后更改共享的文件访问权限:chmod 777 CR 目录名;在Linux命令行下进行挂载点设置:mount /目录名 /挂载目录名。

NFS服务器的搭建:(重要)首先在用户名下创建文件夹,用此命令进行挂载:mount Ct nfs localhost:/目录名 /挂载点目录名;与不同机器的系统通信操作时用:mount Ct nfs 对方IP地址:/共享目录 /自身目录;前提:文件访问权限的更该,需要在同一网段,并ping通对方IP地址,在根目录下可用umount /目录名  来卸载已经挂载的文件系统。

在程序开发的过程这一单元,主要讲述了编程语言的发展、分类、功能以及程序的编译、解释过程,最主要的为程序编辑器:vim:有两种模式 命令模式与编辑模式,分别用 i和esc键来操作,gcc 文件名。后缀 Co 文件名来编译,进入编辑模式后,可用如下:/搜索、:N、dnd、yny、p、wq来进行不同功能的操作。

源代码编排:通常使用indent Ckr 文件名即可。重头戏到来:gcc是Linux下标准编译器,调试工具:gdb;源程序。c首先进行预编译(-E)得到。i文件,经(-S)编译成汇编文件。s,(-c)参数进行。s编译成。o目标代码,链接成ELF文件即可,如:gcc 文件名。后缀 Co 文件名。

gdb调试器:在gcc hello.c Co hello Cg 中勿忘 Cg,使用gdb 文件名即可进入调试模式,指令r、s、n、b等可以逐步调试出程序的出错点。

Unit 10多模块程序的编译与Makefile:Make是非常强大的实用程序,管理多模块程序的编译与链接,直到生成可执行代码,vim makefile进入,设定Makefile的入口目标,注意的是在编写代码过程中tab键会很重要,回车+Tab切记。简单替换如:CC:=gcc、CC+=-g、在下面的代码需加$。Make中的内建变量有:$@代表当前目标名称、$

虽然现在已结束Linux基础课程的培训,但自己不会放下这本书,我会不断的去复习巩固徐老师所讲解的内容与书本上未讲解的课程,一句话:努力,男人就要对自己狠点!

[17] 嵌入式学习计划

嵌入式简历模板

个人简历

姓 名

xxx

性 别

没有照片

民 族

汉族

身 高

168cm

出生年月

1979年6月

政治面貌

党员

毕业学校

河北师范大学

所学专业

应用电子技术

级    别

工程师

现所在地

石家庄玉成小区

证件类型

身份证

证件号码

xxx

工作年限

5年

求职意向

工作类型

全职

期望工资

面议

工作地点

北京,天津

工作行业

电子,通讯/仪器仪表等相关行业

期望职位

嵌入式开发工程师

单位性质

不限

外语水平

外语语种

英语

外语水平

良好

工作经验

时间

5月-5月

行业

电子

单位性质

私营企业

单位名称

河北某教学仪器制造公司

部门

开发部

职位

开发工程师

职责描述

开发电子,电力,电工,电机教学试验台及各种试验挂箱,有恒流源,恒压源,逻辑芯片测试仪,

交直流电压表,电流表,各种模拟电路,数字电路试验箱等

技术积累:

1.电路焊接调试

2.模拟电路设计及运放应用

3.数字电路设计

4.C51单片机系统设计及编程

5.义隆单片机编程及直流电机控制

时间

206月-6月

行业

仪器仪表

单位性质

私营企业

单位名称

石家庄某仪器仪表有限公司

部门

开发部

职位

研发工程师,项目负责人

工作描述:

开发系列水质在线监控仪表及控制器:

1.系列在线智能电导率监控仪

2.系列在线智能电阻率监控仪

3.系列在线智能pH监控仪

4.系列在线智能ORP监控仪

5.RO反渗透制水控制器

以上产品从项目规划,元器件选型,硬件电路设计,结构设计,软件编写及显示窗口面膜设计等均为独立完成。

知识积累

1.熟练掌握51系列单片机系统硬件电路设计,汇编和KILL C51 c++编程.

2.精通PIC全系列单片机硬件电路设计,汇编和picc及mc18编程.

3.熟练掌握前向通道模拟电路,小信号处理采集,后向通道

控制输出,LCD,LED,OLED,键盘,语音等人机界面电路设计及编程.

4.掌握了仪表开发流程及测量,显示,控制设计方法.

5.接触了ARM32位单片机编程.

6.熟悉了uCOS2嵌入式实时操作系统

培训经历

/ 11 -- 2003/ 11:以PIC单片机为核心的各种应用设计,PIC高级工程师

培训机构:美国MICROCHIP公司   地点:上海

培训内容:

1.高档PIC单片机设计方法及编程技巧.

2.传感器用仪表放大器设计方法.

3.纳瓦技术,微功耗设计.

4.嵌入式系统软硬件降噪技术.

5.EMC兼容性设计.

6.电机控制.

7.CAN总线设计.

8.门禁控制系统设计.

9.低功耗智能水表设计.

10.PID控制

时间

206月-至今

行业

环保仪器

单位性质

股份制企业

单位名称

河北某环保仪器制造公司

部门

开发部

职位

开发工程师,项目负责人

工作描述

独立完成降雨自动采样系统,空气系统-气象采集卡,PM10的设计和开发,多功能分配器,在线COD分析仪.

一体化空气系统ARM,LINUX系统设计

知识积累

1.   MSP430单片机系统设计。

2.   熟悉USB接口软硬件设计。

3.   熟悉ARM LINUX 系统设计。

4.   使用单片机实现小型PLC过程控制。

培训经历

/ 11 -- 2005/ 11:以PIC单片机为核心的.各种应用设计,PIC高级工程师

培训机构:美国MICROCHIP公司   地点:北京

培训内容:

1.16位PIC单片机设计方法及编程技巧.

2.DSPIC30系列DSP处理器应用

3.ZIGBEE无线网络设计

等等。

另外还参加了MSP430和ARM 一些培训。

      

自我评价

1.      掌握了智能仪表等电子产品嵌入式软硬件设计的方法与技巧.

2.      熟练掌握51系列,PIC系列,MSP430系列单片机系统硬件电路设计,汇编和C语言编程.

3.      熟悉飞利浦,ATMEL和三星ARM系列32位单片机硬件设计,uCOSII操作系统和uClinux系统设计。

4.      自学能力强,能够快速适应新工作岗位的技术要求,进行独立项目开发.

5.      表达能力强,善于沟通,有一定的组织协调能力.

6.      有上进心,不怕吃苦,紧跟技术前沿.

联系方式

手 机

联系电话

电子邮件

[18] 嵌入式学习计划

简单定义:嵌入到对象体系中的专用计算机系统。

三要素:嵌入式系统的三个基本要素是嵌入性、专用性与计算机系统。

(1)嵌入性是把软件嵌入到Flash存储器中,

(2)专用性是指针对某个具体应用领域和场合,量体裁衣式的定制适用该场合的专用系统,

(3)计算机系统是指必须具有计算机系统的组成,核心是计算机系统。

三个要素决定了嵌入式系统是嵌入到对象体系中的一种专用的计算机系统。

嵌入式系统設計与开发原则与步驟

1.设计与开发原则

既然嵌入式系统是嵌入到对象体系中的专用的计算机系统,因此嵌入式系统设计的基本原则:物尽其用。这一原则表明,嵌入式系统的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,以最小成本实现更高的.性能,同时尽可能采用高效率的设计算法,以提高系统的整体性能,换句话说同,“物尽其用”就是“够用就好”,以最高性价比来设计嵌入式应用系统。

2、设计与开发步骤

嵌入式系统的设计步骤包括需求分析、体系结构设计、硬件设计,软件设计,执行机构设计、系统集成和系统测试。各个阶段之间往往要求不断的修改,直至完成最终设计目标。

[19] 嵌入式学习计划

一、实习时间和地点安排

1、实习时间:20XX年12月03 日 —— 20XX年12月14日,共两周的时间。

2、每天的实习时间安排:

上午:8:30——11:30

下午:13:30——15:30

3、实习地点:校内。

二、实习目的

1、掌握电子元器件的焊接原理和方法。

2、掌握ARM7 LPC2132控制程序的编写方法。

3、掌握调试软件和硬件的方法。

三、实习内容与要求

1、根据设计要求焊接好电路板并测试焊接无误。

2、绘制流程图并编写程序。

3、编译通过后,将程序下载到LPC2132进行调试。

4、调试成功后编写实习报告。

四、LPC2132芯片介绍

LPC2132最小系统图及其介绍

概述

LPC2132是基于一个支持实时仿真和嵌入式跟踪的32/16 位 ARM7TDMI-STM CPU 的微控制器,并带有 32kB、64kB、512 kB 的嵌入的高速Flash 存储器。128 位宽度的存储器接口和独特的加速结构使 32 位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用 16 位 Thumb?

模式将代码规模降低超过 30%,而性能的损失却很小。

较小的封装和极低的功耗使 LPC2131/2132/2138 可理想地用于小型系统中,如访问控制和 POS 机。宽范围的串行通信接口和片内 8/16/32kB 的 SRAM 使 LPC2131/2132/2138 非常适用于通信网关、协议转换器、软 modem 、声音辨别和低端成像,为它们提供巨大的缓冲区空间和强大的处理功能。多个 32 位定时器、1 个或 2 个 10 位 8 路 ADC 、10 位 DAC 、PWM 通道和 47 个 GPIO 以及多达9 个边沿或电平触发的外部中断使它们特别适用于工业控制和医疗系统。

特性

1、小型 LQFP64 封装的 16/32 位 ARM7TDMI-S 微控制器。

2、8/16/32kB 片内静态 RAM 。

3、片内 Boot 装载软件实现在系统/在应用中编程(ISP/IAP )。扇区擦除或整片擦除的时间为400ms ,1ms 可编程 256 字节。

4、EmbeddedICE?RT 和嵌入式跟踪接口可实时调试(利用片内 RealMonitor软件)和高速跟踪执行代码。

5、1 个(LPC2132/2132 )或2 个(LPC2138 )8 路 10 位 A/D 转换器共包含 16 个模拟输入,每个通道的转换时间低至 2.44us 。

6、1 个 10 位 D/A 转换器,可提供不同的模拟输出(LPC2132/2138 )。

7、 2 个 32 位定时器/计数器(带 4 路捕获和 4 路比较通道)、PWM 单元(6 路输出)和看门狗。

8、实时时钟具有独立的电源和时钟源,在节电模式下极大地降低了功耗。

9、多个串行接口,包括 2 个 16C550 工业标准 UART 、2 个高速 I2C 接口(400 kbit/s )、SPITM 和 SSP(具有缓冲功能,数据长度可变)。

10、向量中断控制器。可配置优先级和向量地址。

11、多达 47 个 5V 的通用I/O 口(LQFP64 封装)。

12、 9 个边沿或电平触发的外部中断引脚。

13、 通过片内 PLL 可实现最大为 60MHz 的 CPU 操作频率,PLL 的稳定时间为 100us。

14、片内晶振频率范围:1~30 MHz。

15、2 个低功耗模式:空闲和掉电。

16、可通过个别使能/禁止外部功能和降低外部时钟来优化功耗。

17、通过外部中断将处理器从掉电模式中唤醒。

18、单个电源供电,含有上电复位(POR )和掉电检测(BOD )电路:-CPU

操作电压范围:3.0~3.6 V (3.3 V+/ - 10%) ,I/O 口可承受5V 的最大电压。

结构概述

LPC2132包含一个支持仿真的 ARM7TDMI-S CPU 、与片内存储器控制器接口的 ARM7 局部总线、与中断控制器接口的 AMBA 高性能总线 (AHB )和连接片内外设功能的 VLSI 外设总线 (VPB ,ARM AMBA 总线的兼容超集)。

LPC2131/2132/2138 将 ARM7TDMI-S 配置为小端(little-endian )字节顺序。 AHB 外设分配了 2M 字节的地址范围,它位于 4G 字节 ARM 存储器空间的最顶端。每个 AHB 外设都 分配了 16k 字节的地址空间。LPC2131/2132/2138 的外设功能 (中断控制器除外)都连接到 VPB 总线。AHB 到 VPB 的桥将 VPB 总线与 AHB 总线相连。VPB 外设也分配了 2M 字节的地址范围,从 3.5GB 地址点开始。每个 VPB 外设在 VPB 地址空间内都分配了 16k 字节地址空间。

片内外设与器件管脚的连接由管脚连接模块控制。该模块必须由软件进行控制以符合外设功能与管脚在特定应用中的需求。

ARM7TDMI-S 处理器

ARM7TDMI-S 是通用的 32 位微处理器,它具有高性能和低功耗的特性。ARM 结构是基于精简指令集 计算机(RISC)原理而设计的。指令集和相关的译码机制比复杂指令集计算机要简单得多。这样使用一个小的、廉价的处理器核就可实现很高的指令吞吐量和实时的中断响应。

由于使用了流水线技术,处理和存储系统的所有部分都可连续工作。通常在执行一条指令的同时对下 ,一条指令进行译码,并将第三条指令从存储器中取出。

ARM7TDMI-S 处理器使用了一个被称为 THUMB 的独特结构化策略,它非常适用于那些对存储器有限制或者需要较高代码密度的大批量产品的应用。

在 THUMB 后面一个关键的概念是“超精简指令集”。基本上,ARM7TDMI-S 处理器具有两个指令集:标准 32 位 ARM 指令集 、16 位 THUMB 指令集。

THUMB 指令集的 16 位指令长度使其可以达到标准 ARM 代码两倍的密度,却仍然保持 ARM 的大多 数性能上的优势,这些优势是使用 16 位寄存器的 16 位处理器所不具备的。因为 THUMB 代码和 ARM 代码一样,在相同的 32 位寄存器上进行操作。THUMB 代码仅为 ARM 代码规模的 65%,但其性能却相当于连接到 16 位存储器系统的相同 ARM 处理器性能的 160%。

片内 FLASH 程序存储器

LPC2131/2132/2138 分别含有 32kB、64kB 和 512kB 的FLASH 存储器系统。该存储器可用作代码和数据的存储。对 FLASH 存储器的编程可通过几种方法来实现:通过内置的串行 JTAG 接口,通过在系统编程(ISP )和 UART0 ,或通过在应用编程(IAP )。使用在应用编程的应用程序也可以在应用程序运行时对FLAH 进行擦除和/ 或编程,这样就为数据存储和现场固件的升级都带来了极大的灵活性。如果LPC2131/2132/2138 使用了片内引导装载程序(bootloader ),32/64/512kB 的 Flash 存储器就可用来存放用户代码。 LPC2131/2132/2138 的Flash 存储器至少可擦除/编程 10,000 次,保存数据的时间长达 10 年。

片内静态 RAM

片内静态 RAM (SRAM )可用作代码和/ 或数据的存储,支持 8位、16 位和32 位的访问。LPC2131/2132/2138 含有 8/16/32kB 的静态RAM 。 LPC2131/2132/2138 SRAM 是一个字节寻址的存储器。对存储器进行字和半字访问时将忽略地址对准,访问被寻址的自然对准值(因此,对存储器进行字访问时将忽略地址位 0 和 1,半字访问时将忽略地址位 0 )。因此,有效的读写操作要求半字数据访问的地址线0 为 0(地址以0、2 、4 、6、8、A 、C 和 E 结尾),字 数据访问的地址线 0 和 1 都为 0 (地址以0、4 、8 和 C 结尾)。该原则同样用于片外和片内存储器。SRAM 控制器包含一个回写缓冲区,它用于防止 CPU 在连续的写操作时停止运行。回写缓冲区总是保存着软件发送到 SRAM的最后一个字节。该数据只有在软件请求下一次写操作时才写入 SRAM (数据只有 在软件执行另外一次写操作时被写入 SRAM)。如果发生芯片复位,实际的SRAM 内容将不会反映最近一 次的写请求(即:在一次“热”芯片复位后,SRAM 不会反映最后一次写入的内容)。任何在复位后检查 SRAM 内容的程序都必须注意这一点。通过对一个单元执行两次相同的写操作可保证复位后数据的写入。或者,也可通过在进入空闲或掉电模式前执行虚写(dummy write )操作来保证最后的数据在复位后被真正写入到 SRAM。

五、硬件原理图

其中K1-K6为六个按键,分别对应清零键、减号键、第二个数字键、等号键、加号键和第一个数字键,接到I/O口的P0.08-P0.13脚。P0.00-P0.07号脚接段码,分别是G、F、E、D、C、B、A、DP。三个数码管的位选通端接到P0.28-P0.30三个管脚上,用于选通数码管。

ULN2803应用电路介绍

ULN2000、ULN2800是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003A电路是美国Texas Instruments公司和Sprague公司开发的高压大电流达林顿晶体管阵列电路,文中介绍了它的电路构成、特征参数及典型应用。

功率电子电路大多要求具有大电流输出能力,以便于驱动各种类型的负载。功率驱动电路是功率电子设备输出电路的一个重要组成部分。在大型仪器仪表系统中,经常要用到伺服电机、步进电机、各种电磁阀、泵等驱动电压高且功率较大的器件。ULN2000、ULN2800高压大电流达林顿晶体管阵列系列产品就属于这类可控大功率器件,由于这类器件功能强、应用范围语广。因此,许多公司都生产高压大电流达林顿晶体管阵列产品,从而形成了各种系列产品,ULN2000、ULN2800系列就是美国Texas Instruments公司、美国Sprague公司开发的高压大电流达林顿晶体管阵列产品。它们的系列型号分类如表1所列,生产2000、2800高压大电流达林顿晶体管阵列系列产品的公司与型号对照表如表2所列。在上述系列产品中,ULN2000系列能够同时驱动7组高压大电流负载,ULN2800系列则能够同时驱动8组高压大电流负载。美国Texas Instruments公司、美国Sprague公司生产的ULN2003A由7组达林顿晶体管阵列和相应的电阻网络以及钳位二极管网络构成,具有同时驱动7组负载的能力,为单片双极型大功率高速集成电路。以下介绍该电路的构成、性能特征、电参数以及典型应用。2000、2800高压大电流达林顿晶体管阵列系列中的其它产品的性能特性与应用可参考ULN2003A。

文章来源:https://www.hc179.com/hetongfanben/126884.html