嵌入式系统学习总结
嵌入式系统的理解
嵌入式系统的历史
嵌入式系统起源于20世纪70年代,它是硬件和软件交替发展的双螺旋式发展;早期的嵌入式系统以功能简单的单片机为核心,这种系统大部分应用于各类工业控制,这一阶段嵌入式系统的主要特点是系统结构和功能比较单一,处理效率比较低;随着微处理器的诞生,嵌入式系统得到了广泛的发展,这一时期出现了一些商用的嵌入式系统并得到了迅速发展,并且具备了高度的模块化和扩展性,具有大量的应用程序接口,嵌入式应用软件也变得丰富起来;随着微电子技术、IC设计和EDA工具的发展,基于SoC的嵌入式系统有了较大的发展,SOC使得嵌入式系统越来越小,功能越来越强,嵌入式技术与Internet的结合推动了嵌入式技术的快速发展。
嵌入式系统的定义
嵌入式系统一般是指非PC系统,它是以应用为中心、以计算机技术为基础、并且软硬件可裁剪的,适用于应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统和用户应用程序等组成,用于实现对其他设备的控制、监视和管理功能。
嵌入式系统包括硬件和软件两部分。硬件包括处理器、微处理器、存储器、外围器件、I/O端口和图形控制器等。软件部分包括操作系统软件和和应用程序编程。应用程序控制着系统的运作和行为,操作系统控制着应用程序编程与硬件的交互作用。
嵌入式系统的特点
-
专用性强:嵌入式系统通常是基于面向特定应用的嵌入式CPU,通常具有体积小、功耗低和集成度高等特点,通常是面向用户、面向产品、面向应用的,它必须与具体的应用相结合才具有生命力。
-
集成度高:嵌入式系统是将计算机技术、半导体技术以及各个行业的具体应用相结合的产物,所以它是一个技术密集、资金密集、高度分散、不断创新的集成系统。
-
系统精简:嵌入式系统必须根据应用需求对软硬件进行裁剪,满足应用系统的功能、可靠性、成本、体积、功耗等要求。
-
高可靠性和实时性:为了提高执行速度和系统可靠性,嵌入式系统中的软件一般都是固化在存储器芯片中,而不是存储在磁盘中。
-
需要专门的开发工具和环境:嵌入式系统本身不具备自主开发能力,设计完成以后用户通常不能直接对其中的程序功能进行修改,所以必须有一套开发工具和环境才能进行开发。
主要知识点汇总
嵌入式系统基本组成
嵌入式系统硬件层
硬件层包含嵌入式微处理器,存储器,如FALSH、ROM、RAM等,I/O接口,在微处理器上的电源电路,时钟电路和存储器电路等,这些构成了嵌入式系统的核心控制模块。
嵌入式系统软件层
系统软件层由实时多任务操作系统、文件系统、网络系统、图形用户接口和通用组件模块组成;应用软件层由针对特定任务而开发的应用程序组成,主要面向被控制对象和用户。
CISC于RISC系统结构
CISC系统结构:指令数量多,为可变长格式,使用频率差别较大,支持多种寻址方式,指令功能复杂,研制周期长。
RISC系统结构:指令数量少,指令长度固定,寻址方式较少,大部分为单周期指令,适合采用流水线,优化编译,能够有效的支持高级语言。
冯诺依曼体系结构
微处理器:只含CPU,不含存储器、I/O接口和其他功能模块。
指令的执行周期:取指令,指令译码,执行指令,存储
哈弗体系结构
程序存储器于数据存储器分开,提供了较大的数据存储带宽,适合于数字信号处理,大多数DSP都是哈弗结构,ARM9也是哈弗结构
嵌入式处理器分类
嵌入式微控制器MCU:由CPU、内存、I/O接口电路和面向特定应用的功能模块组成,典型代表是单片机;微控制器具有成本优势,能够缩短产品的设计、开发、调试周期,系统故障率降低,芯片数减少,灵活性和通用性也会降低。
嵌入式DSP处理器:DSP处理器是规模很小、结构相对简单、速度较快的微处理器,专门用于信号处理方面的处理器,其在系统结构和指令算法方面进行了特殊设计,在数字滤波、FFT、谱分析等各种仪器上DSP获得了大规模的应用。
嵌入式微处理器MPU:由通用计算机中的CPU演变而来,只保留和嵌入式应用紧密相关的功能硬件,去除其他的冗余功能部分,这样就以最低的功耗和资源实现嵌入式应用的特殊要求。
嵌入式片上系统SOC
嵌入式系统微处理器就是一种电路系统。它结合了许多功能模块,将功能做在一个芯片上,如ARM RISC、MIPS RISC、DSP或是其他的微处理器核心,加上通信的接口单元。
SOC通过改变内部工作电压,降低芯片功耗;减少芯片对外管脚数,简化制造过程;减少外围驱动接口单元及电路板之间的信号传递,可以加快微处理器数据处理的速度。
ARM结构微处理器简介
ARM处理器特点:小体积、低功耗、成本低、高性能,16位/32位双指令集,使用广泛,合作伙伴众多。
ARM处理器提供的解决方案包括:在无线、消费电子和图像应用方面的开放平台,存储、自动化、工业和网络应用的嵌入式实时系统,智能卡和SIM卡的安全应用。
ARM处理器系列:ARM7、ARM9、ARM9E、ARM10和ARM11
JTAG调试
在ARM处理器中,可以通过JTAG直接控制ARM的内部总线,IO口等信息,从而达到调试的目的
JTAG标准链:
-
Scan Chain 0:包括ARM核的所有的IO和总线的输入输出控制信号.
-
Scan Chain 1:包括ARM核的数据总线和一个断点控制信号。通过控制这个条链,可以控制ARM核执行指定的指令。
-
Scan Chain 2:通过控制EmbeddedICE宏单元,实现对ARM执行指令的断点、观察点的控制。
断点类型:
-
硬件断点:在ARM中直接设定watchpoint中的地址,当ARM运行到制定的地址时,就进入Debug状态.
-
软件断点:改变存储器中的ARM指令为一个特殊的数据X(ARM的未定义指令),同时,设置watchpoint中的断点数据也为X,当ARM把X数据作为指令读入的时候,ARM就进入Debug状态.
-
优缺点:•硬件断点:数目受EmbeddedICE中的Watchpoint数目的限制;但是,可以在任何地方设置断点;•软件断点:数目不受限制,但是,软件断点是通过替换系统的断点地址的指令实现的,所以,软件断点只能在可写的存储器的地址中设置(比如:RAM),而不能在ROM(比如:Flash)中设置.
嵌入式系统发展
嵌入式操作系统的功能越来越丰富,不仅能提供一些基本的功能,如:内核、网络、GUI、文件系统等,而且还会具有很多新的功能,如支持J2ME(JAVA2Micro Edition)、嵌入式CORBA,XML等。
嵌入式操作系统
用于嵌入式计算机的操作系统都称为嵌入式操作系统,它实际上代表着一个集合,最低端是简单的监控程序,最高端则为通用操作系统,它具备一般操作系统的功能,同时具有嵌入式软件的特点。
嵌入式操作系统大致经历了以下几个阶段:无操作系统阶段,简单操作系统阶段,实时操作系统阶段,面向Internet操作系统阶段。
-
无操作系统阶段:具有与一些监测、伺服、指示设备相配合的功能,一般没有明显的操作系统支持。
-
简单操作系统阶段:以嵌入式处理器为基础,以简单监控式操作系统为核心。
-
实时操作系统阶段:n以通用型嵌入式操作系统为标志的嵌入式系统,典型代表有:VxWorks、pSos、Windows CE等,运行在不同的微处理器,具有强大的能用型操作系统的功能。
-
面向Internet阶段:随着Internet的进一步发展,以及Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式设备与Internet的结合才是嵌入式技术的真正未来。
嵌入式操作系统体系结构
包括用户模式和内核模式,其中内核模式包括文件系统、进程间管理、进程间通信、I/O和设备管理和虚存管理。
嵌入式Linux
嵌入式Linux(Embeded Linux)是指对Linux经过小型化裁剪后,能够固化在容量较小的存储器芯片或单片机中,应用于特定嵌入式场合的专用Linux操作系统。
实时系统
指系统能够在限定的响应时间内提供所需水平的服务。
硬实时系统:如果计算机没有能够及时的交付计算结果,那么由这个计算机控制的系统就会发生灾难性的后果,具有强定时约束。
软实时系统:对计算任务有时限要求,但该时限要求的延迟不会引起严重的后果,一般不需要证明系统确实满足实时性能要求,具有弱定时约束。
作业调度算法:
-
速率单调算法(Rate Monotonic),RM算法,静态优先级。
-
时限单调算法(Deadline Monotonic),DM算法 静态优先级,按照任务的相对时限来分配优先级。
-
最早时限优先算法(Earliest Deadline First),EDF,动态优先级,按照作业的绝对时限为其分配优先级。
-
最迟释放时间算法(Latest Release Time), LRT反向EDF算法,动态优先级。
-
抢占式调度:正在运行的任务可能被其他任务所打断。
-
非抢占式调度:一旦任务开始运行,该任务只有在运行完成而主动放弃CPU资源,或是因为等待其他资源被阻塞的情况下才会停止运行。
-
基于优先级的可抢占调度方式:如果出现具有更高优先级的任务处于就绪状态时,当前任务将停止运行,实时内核需要确保CPU总是被具有最高优先级的就绪任务所控制。
-
优先级反转:高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务的现象。
-
解决优先级反转的常用协议为:优先级继承协议,优先级天花板协议。
嵌入式系统开发
嵌入式系统开发工具
嵌入式系统开发工具:需求分析工具,软件设计工具,编码、调试工具,测试工具,配置管理工具、维护工具等。
嵌入式软件测试工具:内存分析工具、性能分析工具、覆盖分析工具、缺陷跟踪工具。
内存分析工具:可以用来处理在进行动态内存分配时产生的缺陷。
性能分析工具:引导开发人员发现在系统调用中存在的错误以及程序结构上的缺陷。
覆盖分析工具:使用代码覆盖分析工具追踪哪些代码被执行过,开发人员通过对分析结果进行总结,可以确定哪些代码被执行过,哪些代码被遗漏了。
嵌入式Linux开发
最小的嵌入式 Linux 系统需要三个基本元素:
-
系统引导实用程序
-
Linux 内核,由内存管理、进程管理和定时服务构成
-
系统程序:libc、busybox、GUI
开发步骤:
-
建立交叉编译环境
-
系统引导
-
精简内核
-
驱动程序开发
-
嵌入式文件系统
-
应用界面开发:将X-Window换成MicroWindows等适合的图形系统。
嵌入式Boot Loader
Boot Loader阶段1
-
硬件设备初始化
-
为加载阶段2准备RAM空间。
-
拷贝阶段2到RAM中。
-
设置堆栈指针SP。
-
跳转到阶段2的C入口点。
Boot Loader阶段2
-
初始化本阶段要用到的硬件设备。
-
检测系统的内存映射。
-
加载内核映像和根文件系统映像。
-
设置内核的启动参数。
调用内核
嵌入式Linux文件系统
Linux支持ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等多种文件系统,为了统一管理,Linux引入了虚拟文件系统VFS (Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口.
Android概述
Android系统介绍
Android 是 Google 开发的基于 Linux 平台的、开源的、智能手机操作系统。
特点:
-
全开放智能手机平台
-
多硬件平台的支持
-
使用众多的标准化技术
-
核心技术完整,统一
-
完善的开发环境和文档
-
完善的辅助开发工具
Android内核
Linux kernel 2.6 或 3.0(Android 4.0)以上,依赖 Linux kernel 提供的核心服务,比如内存管理、进程管理、网络、硬件驱动等。
Android本地库:Android自己的C/C++库被android的上层组件使用。
Dalvik虚拟机:比标准的Java虚拟机效率高,运行快。
Android应用程序
管理程序,系统级别的服务,使用Java编写。
核心应用程序,用户自己的程序,通过Java API访问Android应用层框架,•通过Jni访问C/C++本地库。
Android启动流程
启动init进程,它是第一个由内核启动的用户级进程。
启动Servicemanager和zygote进程。
启动其他的Java服务管理程序。
启动桌面应用程序。
Android开发
Android SDK 开发环境:Android SDK提供了在Android平台上使用Java语言进行Android应用开发必须的工具和API库。
Java应用层框架API库。
模拟器(arm虚拟机)。
辅助工具:ADB(调试工具)、AAPT(生成APK)、DX(编译工具)、DDMS(调试窗口)。
开发文档。