嵌入式系统开发毕业论文.docx
- 文档编号:12407489
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:58
- 大小:337.32KB
嵌入式系统开发毕业论文.docx
《嵌入式系统开发毕业论文.docx》由会员分享,可在线阅读,更多相关《嵌入式系统开发毕业论文.docx(58页珍藏版)》请在冰豆网上搜索。
嵌入式系统开发毕业论文
第1章 绪论
1.1 嵌入式系统
1.1.1 嵌入式系统简介
随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛。
当今,嵌入式系统已成为一个时髦的名词,就像当初的计算机热潮,似乎比当初的计算机热潮涉及的领域更广泛,应用技术人员更多,相关国民经济产值也更庞大。
报纸、杂志、网络都把嵌入式系统当作讨论的热门话题。
嵌入式系统一般指非PC系统,有计算机功能但又不称之为计算机的设备或器材。
它是以应用为中心,软硬件可裁减的,适应应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。
嵌入式系统主要由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等4个部分组成,它是集软硬件于一体的可独立工作的"器件"。
嵌入式系统的软件部分包括操作系统软件(要求实时和多任务操作)和应用程序编程。
操作系统控制着应用程序编程与硬件的交互作用,而应用程序控制着系统的运作和行为。
嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统(包括硬、软件系统)极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等Browser。
嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理越来越复杂的系统资源;能够把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来;能够提供库函数、驱动程序、工具集以及应用程序。
与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。
1.1.2 实时多任务操作系统
RTOS(RealTimemulti-taskingOperationSystem),即实时多任务操作系统是嵌入式应用软件的基础和开发平台。
目前在中国大多数嵌入式软件开发还是基于处理器直接编写,没有采用商品化的RTOS,不能将系统软件和应用软件分开处理。
RTOS是一段嵌入在目标代码中的软件,用户的其它应用程序都建立在RTOS之上。
不但如此,RTOS还是一个可靠性和可信性很高的实时内核,将CPU时间、中断、I/O、定时器等资源都包装起来,留给用户一个标准的API,并根据各个任务的优先级,合理地在不同任务之间分配CPU时间。
TOS是针对不同处理器优化设计的高效率实时多任务内核,优秀商品化的RTOS可以面对几十个系列的嵌入式处理器MPU、MCU、DSP、SOC等提供类同的API接口,这是RTOS基于设备独立的应用程序开发基础。
因此基于RTOS上的C语言程序具有极大的可移植性。
据专家测算,优秀RTOS上跨处理器平台的程序移植只需要修改1~5%的内容。
在RTOS基础上可以编写出各种硬件驱动程序、专家库函数、行业库函数、产品库函数,和通用性的应用程序一起,可以作为产品销售,促进行业内的知识产权交流,因此RTOS又是一个软件开发平台。
RTOS是嵌入式系统的软件开发平台。
RTOS最关键的部分是实时多任务内核,它的基本功能包括任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理、旗语管理等,
这些管理功能是通过内核服务函数形式交给用户调用的,也就是RTOS的API。
RTOS的引入,解决了嵌入式软件开发标准化的难题。
随着嵌入式系统中软件比重不断上升、应用程序越来越大,对开发人员、应用程序接口、程序档案的组织管理成为一个大的课题。
引入RTOS相当于引入了一种新的管理模式,对于开发单位和开发人员都是一个提高。
基于RTOS开发出的程序,具有较高的可移植性,实现90%以上设备独立,一些成熟的通用程序可以作为专家库函数产品推向社会。
嵌入式软件的函数化、产品化能够促进行业交流以及社会分工专业化,减少重复劳动,提高知识创新的效率。
嵌入式工业的基础是以应用为中心的芯片设计和面向应用的软件开发。
实时多任务操作系统(RTOS)进入嵌入式工业的意义不亚于历史上机械工业采用三视图的贡献,对嵌入式软件的标准化和加速知识创新是一个里程碑。
目前,商品化的RTOS可支持从8BIT的8051到32BIT的PowerPC及DSP等几十个系列的嵌入式处理器。
提供高质量源代码RTOS的著名公司主要集中在美国。
1.1.3 嵌入式操作系统的发展状况
国外嵌入式操作系统已经从简单走向成熟,主要有Vxwork、QNX、PalmOS、WindowsCE、嵌入式Linux等。
国内的嵌入式操作系统研究开发有2种类型,一类是基于国外操作系统2次开发完成的,如海信的基于WindowsCE的机顶盒系统;另一类是中国自主开发的嵌入式操作系统,如凯思集团公司自主研制开发的嵌入式操作系统HopenOS(“女娲计划”)等。
WindowsCE内核较小,能作为一种嵌入式操作系统应用到工业控制等领域。
其优点在于便携性、提供对微处理器的选择以及非强行的电源管理功能。
内置的标准通信能力使WindowsCE能够访问Internet并收发E_mail或浏览Web。
除此之外,WindowsCE特有的与Windows类似的用户界面使最终用户易于使用。
WindowsCE的缺点是速度慢、效率低、价格偏高、开发应用程序相对较难。
3Com公司的PalmOS在掌上电脑和PDA市场上独占其霸主地位,它有开放的操作系统应用程序接口(API),开发商可根据需要自行开发所需的应用程序。
Microwave的OS-9是为微处理器的关键实时任务而设计的操作系统,广泛应用于高科技产品中,包括消费电子产品、工业自动化、无线通讯产品、医疗仪器、数字电视/多媒体设备。
它提供了很好的安全性和容错性。
与其他的嵌入式系统相比,它的灵活性和可升级性非常突出。
LynxReal-timeSystems的LynxOS是一个分布式、嵌入式、可规模扩展的实时操作系统,它遵循POSIX.1a、POSIX.1b和POSIX.1c标准。
LynxOS支持线程概念,提供256个全局用户线程优先级;提供一些传统的、非实时系统的服务特征;包括基于调用需求的虚拟内存,一个基于Motif的用户图形界面,与工业标准兼容的网络系统以及应用开发工具。
pSOS。
ISI公司已经被WinRiver公司兼并,现在pSOS属于WindRiver公司的产品。
这个系统是一个模块化、高性能的实时操作系统,专为嵌入式微处理器设计,提供一个完全多任务环境,在定制的或是商业化的硬件上提供高性能和高可靠性。
可以让开发者根据操作系统的功能和内存需求定制成每一个应用所需的系统。
开发者可以利用它来实现从简单的单个独立设备到复杂的、网络化的多处理器系统。
QNX是由加拿大QSSL公司开发的分布式、实时的、可扩充的操作系统,它部分遵循POSIX相关标准,如:
POSIX.1b实时扩展。
它提供了一个很小的微内核以及一些可选的配合进程,具有高度的伸缩性,可灵活地剪裁。
其内核仅提供4种服务:
进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。
所有其它OS服务,都实现为协作的用户进程,因此QNX内核非常小巧(QNX4.x大约为12Kb)而且运行速度极快。
这个灵活的结构可以使用户根据实际的需求,将系统配置成微小的嵌入式操作系统或是包括几百个处理器的超级虚拟机操作系统。
因此,可以广泛地嵌入到智能机器、智能仪器仪表、机顶盒、通讯设备、PDA等应用中去。
HopenOS是凯思集团自主研制开发的嵌入式操作系统,由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。
其核心HopenKernel一般为10KB左右大小,占用空间小,并具有实时、多任务、多线程的系统特征。
在众多的实时操作系统和嵌入式操作系统产品中,WindRiver公司的VxWorks是较为有特色的一种实时操作系统。
VxWorks是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统。
VxWorks支持各种工业标准,包括POSIX、ANSIC和TCP/IP网络协议。
同时支持多种处理器,如x86、i960、SunSparc、MotorolaMC68xxx、MIPSRX000、POWERPC等等。
大多数的VxWorksAPI是专有的。
采用GNU的编译和调试器。
VxWorks运行系统的核心是一个高效率的微内核,该微内核支持各种实时功能,包括快速多任务处理、中断支持、抢占式和轮转式调度。
目前在全世界装有VxWorks系统的智能设备数以百万计,其应用范围遍及互联网、电信和数据通信等众多领域。
开放源代码的嵌入式Linux操作系统无疑有着很大的优势。
嵌入式Linux自身具备一整套工具链,容易自行建立嵌入式系统的开发环境和交叉运行环境,并且可以跨越在嵌入式系统开发中仿真工具(ICE)的障碍。
内核的完全开放,使得可以自己设计和开发出真正的硬实时系统;对于软实时系统,在Linux中也容易得到实现。
强大的网络支持,使得可以利用Linux的网络协议栈将其开发成为嵌入式的TCP/IP网络协议栈。
1.1.4 嵌入式系统软件的特点
嵌入式处理器的应用软件是实现嵌入式系统功能的关键,对嵌入式处理器系统软件和应用软件的要求也和通用计算机有所不同。
1.软件要求固态化存储。
为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。
2.软件代码高质量、高可靠性。
尽管半导体技术的发展使处理器速度不断提高、片上存储器容量不断增加,但在大多数应用中,存储空间仍然是宝贵的,还存在实时性的要求。
为此要求程序编写和编译工具的质量要高,以减少程序二进制代码长度、提高执行速度。
3.系统软件(OS)的高实时性是基本要求。
在多任务嵌入式系统中,对重要性各不相同的任务进行统筹兼顾的合理调度是保证每个任务及时执行的关键,单纯通过提高处理器速度是无法完成和没有效率的,这种任务调度只能由优化编写的系统软件来完成,因此系统软件的高实时性是基本要求。
4.多任务操作系统是知识集成的平台和走向工业标准化道路的基础。
1.2 嵌入式开发概述
1.2.1嵌入式系统开发需要开发工具和环境
通用计算机具有完善的人机接口界面,在上面增加一些开发应用程序和环境即可进行对自身的开发。
而嵌入式系统本身不具备自举开发能力,即使设计完成以后用户通常也是不能对其中的程序功能进行修改的,必须有一套开发工具和环境才能进行开发,这些工具和环境一般是基于通用计算机上的软硬件设备以及各种逻辑分析仪、混合信号示波器等。
1.2.2嵌入式系统软件需要RTOS开发平台
通用计算机具有完善的操作系统和应用程序接口(API),是计算机基本组成不可分离的一部分,应用程序的开发以及完成后的软件都在OS平台上面运行,但一般不是实时的。
嵌入式系统则不同,应用程序可以没有操作系统直接在芯片上运行;但是为了合理地调度多任务、利用系统资源、系统函数以及和专家库函数接口,用户必须自行选配RTOS开发平台,这样才能保证程序执行的实时性、可靠性,并减少开发时间,保障软件质量。
1.2.3嵌入式系统开发人员以应用专家为主
通用计算机的开发人员一般是计算机科学或计算机工程方面的专业人士,而嵌入式系统则是要和各个不同行业的应用相结合的,要求更多的计算机以外的专业知识,其开发人员往往是各个应用领域的专家。
因此开发工具的易学、易用、可靠、高效是基本要求。
1.2.4 嵌入式系统高级编程语言
Ada语言是20世纪70年代美国国防部开发并投入使用的功能强大的通用系统开发语言,最初为Ada83。
它支持模块化、独立编译、协处理等功能。
其可靠性、可维护性、可读性都是相当好的。
后来,为了更好地支持OOP(Object-OrientedProgramming),对其进行了改进,形成了目前广泛使用的Ada95。
使用Ada语言可以大大改善系统的清晰性、可靠性、可维护性等性能指标[2,3]。
它是美国国防部指定的唯一一种可用于军用系统开发的语言。
C语言是由DennisRichie于1972年在AT&Bell实验室研究成功并投入使用的系统编程语言。
其设计目标是使C既具有汇编语言的效率,又具有高级语言的易编程性。
其最具代表性的应用是UNIX操作系统。
从20世纪80年代中期C语言涉足实时系统后,受到了普遍欢迎。
目前是使用最广泛的嵌入式系统编程语言。
C++是由BjarneStroustrup于1995年在Bell实验室研制成功并投入使用的。
C++在支持现代软件工程、OOP、结构化等方面对C进行了卓有成效的改进,但在程序代码容量、执行速度、程序复杂程度等方面比C语言程序性能差一些。
Modula-2是由NicklansWirth在70年代后期根据Pascal和Modula开发的系统设计语言。
其主要目标是在模块化、系统编程、协同处理等方面对Pascal进行改进。
Modula-2具有很强的类型检查能力和丰富的低级功能支持。
因此,可用它设计一个完整的实时程序而不用汇编语言的支持。
Modula-3是1988年由DEC(DigitalEquipmentCompany)和ORC(OlivettiResearchCenter)根据Modula-2开发研制并投入使用的系统开发语言。
目标是设计一个功能强大但结构简单的通用编程语言。
它在协同处理、OOP、自动垃圾收集以及对C语言和UNIX的支持等方面对Modula-2进行了改进
Java是网络语言,而嵌入式系统则在功能、价格、体积、功耗、上市时间等方面有特殊要求。
因此Java语言受速度和代码容量的限制,本身并不适合于嵌入式系统的应用。
但Sun公司并不愿意放弃这个发展潜力巨大的应用市场,对Java进行改进后发表了J2ME(Java2MicroEdition)。
它是JavaAPI的一个子集,只包含了Java的关键特性,是专门针对对内存具有苛刻要求的嵌入式系统而设计的。
J2ME粗略地将应用对象划分为两大类:
内存在128KB~512KB之间的设备和内存大于512KB的设备,根据不同的类别提供不同的用户接口和软件包。
第2章 ARM处理器结构和ARM指令集
2.1 ARM处理器结构
ARM(AdvancedRISCMachines)是微处理器行业的一家知名企业,该企业设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。
技术具有性能高、成本低和能耗省,适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。
ARM处理器的框架如图2-1所示
图2-1 ARM处理器架构
2.1.1 寄存器和处理器模式
1.ARM有7个基本工作模式:
User:
非特权模式,大部分任务执行在这种模式。
限制你的内存访问并且你不能直接读取硬件设备
正常程序执行的模式
FIQ:
当一个高优先级(fast)中断产生时将会进入这种模式
高速数据传输和通道处理
IRQ:
当一个低优先级(normal)中断产生时将会进入这种模式
通常的中断处理
Supervisor:
当复位或软中断指令执行时将会进入这种模式
供操作系统使用的一种保护模式
Abort:
当存取异常时将会进入这种模式
虚拟存储及存储保护
Undef:
当执行未定义指令时会进入这种模式
软件仿真硬件协处理器
System:
使用和User模式相同寄存器集的特权模式
特权级的操作系统任务
(2)寄存器组
在26位体系下,ARM处理器有二十七个寄存器,其中一些是在一定条件下使用的,所以一次只能使用十六个。
∙寄存器0到寄存器7是通用寄存器并可以用做任何目的。
不象80x86处理器那样要求特定寄存器被用做栈访问,或者象6502那样把数学计算的结果放置到一个累加器中,ARM处理器在寄存器使用上是高度灵活的。
∙寄存器8到12是通用寄存器,但是在切换到FIQ模式的时候,使用它们的影子(shadow)寄存器。
∙寄存器13典型的用做OS栈指针,但可被用做一个通用寄存器。
这是一个操作系统问题,不是一个处理器问题,所以如果你不使用栈,只要你以后恢复它,你可以在你的代码中自由的占用(corrupt)它。
每个处理器模式都有这个寄存器的影子寄存器。
∙寄存器14专职持有返回点的地址以便于写子例程。
当你执行带连接的分支的时候,把返回地址存储到R14中。
同样在程序第一次运行的时候,把退出地址保存在R14中。
R14的所有实例必须被保存到其他寄存器中(不是实际上有效)或一个栈中。
这个寄存器在各个处理器模式下都有影子寄存器。
一旦已经保存了连接地址,这个寄存器就可以用做通用寄存器了。
∙寄存器15是程序计数器。
它除了持有指示程序当前使用的地址的二十六位数之外,还持有处理器的状态。
为更清晰一些,提供下列图表:
User模式SVC模式IRQ模式FIQ模式APCS
R0-------R0-------R0-------R0a1
R1-------R1-------R1-------R1a2
R2-------R2-------R2-------R2a3
R3-------R3-------R3-------R3a4
R4-------R4-------R4-------R4v1
R5-------R5-------R5-------R5v2
R6-------R6-------R6-------R6v3
R7-------R7-------R7-------R7v4
R8-------R8-------R8R8_fiqv5
R9-------R9-------R9R9_fiqv6
R10------R10------R10R10_fiqsl
R11------R11------R11R11_fiqfp
R12------R12------R12R12_fiqip
R13R13_svcR13_irqR13_fiqsp
R14R14_svcR14_irqR14_fiqlr
-------------R15/PC-------------pc
最右侧的列是APCS代码使用的名字。
APCS,ARM过程调用标准(ARMProcedureCallStandard),提供了紧凑的编写例程的一种机制,定义的例程可以与其他例程交织在一起。
最显著的一点是对这些例程来自哪里没有明确的限制。
它们可以编译自C、Pascal、也可以是用汇编语言写成的。
APCS定义了:
∙对寄存器使用的限制。
∙使用栈的惯例。
∙在函数调用之间传递/返回参数。
∙可以被‘回溯’的基于栈的结构的格式,用来提供从失败点到程序入口的函数(和给予的参数)的列表。
程序计数器构造如下图2-2:
图2-2程序计数器构造
⏹条件位:
⏹N=1-结果为负,0-结果为正或0
⏹Z=1-结果为0,0-结果不为0
⏹C=1-进位,0-借位
⏹V=1-结果溢出,0结果没溢出
⏹Q位:
⏹仅ARM5TE/J架构支持
⏹指示增强型DSP指令是否溢出
⏹J位
⏹仅ARM5TE/J架构支持
⏹J=1:
处理器处于Jazelle状态
⏹中断禁止位:
⏹I=1:
禁止IRQ.
⏹F=1:
禁止FIQ.
⏹TBit
⏹仅ARMxT架构支持
⏹T=0:
处理器处于ARM状态
⏹T=1:
处理器处于Thumb状态
⏹Mode位(处理器模式位):
⏹0b10000User
⏹0b10001FIQ
⏹0b10010IRQ
⏹0b10011Supervisor
⏹0b10111Abort
⏹0b11011Undefined
⏹0b11111System
⏹当处理器执行在ARM状态:
⏹所有指令32bits宽
⏹所有指令必须word对齐
⏹所以pc值由bits[31:
2]决定,bits[1:
0]未定义(所以指令不能halfword/byte对齐).
⏹当处理器执行在Thumb状态:
⏹所有指令16bits宽
⏹所有指令必须halfword对齐
⏹所以pc值由bits[31:
1]决定,bits[0]未定义(所以指令不能byte对齐).
⏹当处理器执行在Jazelle状态:
⏹所有指令8bits宽
⏹处理器执行word存取一次取4条指令
2.2 ARM指令集
2.2.1 ARM存贮访问指令
ARM存贮访问指令如下表2-1:
表2-1ARM存贮访问指令
助记符
说明
操作
条件码位置
MULRd,Rm,Rs
32位乘法指令
Rd←Rm*Rs(Rd≠Rm)
MUL{cond}{S}
MLARd,Rm,Rs,Rn
32位乘法指令
Rd←Rm*Rs+Rn(Rd≠Rm)
MLA{cond}{S}
UMULLRdLo,RdHi,Rm,Rs
64位无符号乘法指令
(RdLo,RdHi)←Rm*Rs
UMULL{cond}{S}
UMLALRdLo,RdHi,Rm,Rs
64位无符号乘法指令
(RdLo,RdHi)←Rm*Rs+(RdLo,RdHi)
UMLAL{cond}{S}
SMULLRdLo,RdHi,Rm,Rs
64位无符号乘法指令
(RdLo,RdHi)←Rm*Rs
SMULL{cond}{S}
SMLALRdLo,RdHi,Rm,Rs
64位无符号乘法指令
(RdLo,RdHi)←Rm*Rs+(RdLo,RdHi)
SMLAL{cond}{S}
2.2.2 数据处理指令
数据处理指令如下表2-2
表2-2数据处理指令
助记符号
说明
操作
条件码位置
MOVRd,operand2
数据转送
Rd<-operand2
MOV{cond}{S}
MVNRd,operand2
数据非转送
Rd<-(NOT)operand2
MVN{cond}{S}
ADDRd,Rn,operand2
加法运算指令
Rd<-Rn+operand2
ADD{cond}{S}
SUBRd,Rn,operand2
减法运算指令
Rd<-Rn-operand2
SUB{cond}{S}
RSBRd,Rn,operand2
逆向减法指令
Rd<-operand2-Rn
RSB{cond}{S}
ADCRd,Rn,operand2
带进位加法
Rd<-Rn+operand2+carry
ADC{cond}{S}
RSCRd,Rn,operand2
带进位减法
Rd<-Rn-perand2-(NOT)Carry
RSC{cond}{S}
ANDRd,Rn,operand2
带进位逆向减法
Rd<-Rn&operand2
AND{cond}{S}
ORRRd,Rn,operand2
逻辑或操作指令
Rd<-Rn|operand2
ORR{cond}{S}
EORRd,Rn,operand2
逻辑异或操作指令
Rd<-Rn^operand2
EOR{cond}{S}
BICRd,Rn,operand2
位清除指令
Rd<-Rn(~operand2)
BIC{cond}
CMPRd,Rn,operand2
比较指令
标志N、Z、C、V<-Rn-operand2
CMP{cond}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 开发 毕业论文