精华内容
参与话题
问答
  • 嵌入式设计课程总结(一)

    千次阅读 2020-03-01 14:58:27
    1、了解嵌入式技术; 2、掌握嵌入式Linux操作的使用;(命令) 3、掌握嵌入式Linux开发工具的使用;(gcc、gbd、make、shell) 4、掌握嵌入式Linux应用开发;(文件、多任务、网络、数据库) 5、了解嵌入式产品开发...

    课程目标:

    1、了解嵌入式技术;
    2、掌握嵌入式Linux操作的使用;(命令)
    3、掌握嵌入式Linux开发工具的使用;(gcc、gbd、make、shell)
    4、掌握嵌入式Linux应用开发;(文件、多任务、网络、数据库)
    5、了解嵌入式产品开发流程;(硬件–软件–系统)
    6、了解嵌入式系统移植;(u-boot、内核、文件系统)
    7、了解嵌入式底层软件开发;(驱动开发)

    嵌入式开发概述

    嵌入式技术是什么?

    嵌入式技术执行专用功能并被内部计算机控制的设备或者系统。嵌入式系统不能使用通用型计算机,而且运行的是固化的软件,用术语表示就是固件(firmware) ,终端用户很难或者不可能改变固件。

    嵌入式软件与非嵌入式软件的区别?

    1、嵌入式系统安装于主板的ROM只读存储器中,系统是定制在ROM中的,能够瞬间启动,启动效果类似于PC的待机恢复(软件留在内存)。
    优点:耗能底,效率高,反应快,系统稳定,
    缺点:ROM内存不能释放,所以不能安装太多的功能。
    2、非嵌入式系统安装于硬盘或固态硬盘(如内存卡),系统可以DIY,启动时从硬盘读取系统数据,在RAM建立一个临时的操作系统环境,关机后消失,每次启动都要重新建立一个临时系统环境。
    优点:通用性高,在强大的系统支持下,RAM内存可以运行各种大型软件,
    缺点:启动慢、硬件庞大、耗能高。

    嵌入式开发与单片机开发的区别?

    在这里插入图片描述
    有无操作系统:
    多任务机制;
    提供了丰富的网络协议;
    提供了开源软件和库;

    嵌入式开发的优缺点

    传统开发的缺点:
    ①软件移植性差(适配平台能力差)
    ②开发人员能力要求:软硬通吃
    嵌入式
    ①在已有的软件上移植操作系统;
    ②在操作系统上做上层应用开发;
    ③在操作系统上做底层开发;
    操作系统的作用:管理资源(软件资源、硬件资源)=管家
    嵌入式系统的组成:软件子系统(应用程序+操作系统)+硬件子系统(外围设备+CPU)

    嵌入式开发的方向?

    嵌入式上层应用软件开发:

    ①精通一门语言;
    ②熟悉一款操作系统;(会看说明书)
    ③熟悉结构/算法;

    嵌入式底层系统软件开发:

    ①精通C语言;(所有的操作系统内核都是由C+汇编开发的)
    ②理解操作系统的实现;(会使用,也会添加/修改功能)
    ③熟悉硬件的工作原理;(CPU:stm32+64位;SPI,IIC,蓝牙,wifi,物联网,摄像头)
    ④熟悉汇编

    为什么会选C语言(C语言的特点)?

    ①能够直接访问硬件;
    ②移植性好;
    ③运行效率;

    为什么C语言能够直接访问硬件?

    C语言有指针数据类型*0x1234567=0xff(指针可以对地址进行操作)

    什么时候选择汇编?什么时候选择用C语言?

    汇编特点低语言,没有高级语法的支撑;访问硬件的效率大于C语言
    对硬件初始化时一班采用汇编;
    对硬件进行复杂操作时采用C语言;(对内存的操作)
    嵌入式系统课程学习储备知识
    C语言+单片机(硬件的工作原理)
    嵌入式系统工程师
    BSP(固件工程师)内核开发

    CPU

    嵌入式=!ARM
    单片机是否可以作为嵌入式CPU?YES
    嵌入式核心(移植操作系统);单片机可以做小型的操作系统
    哪些操作系统可以作为嵌入式操作系统?
    可移植的(代码开源、提供可移植借口)操作系统称之为嵌入式操作系统
    按收费模式划分
    商业型:Vxworks,Nucleux,PlamOS,Symbian,WinCE,QNX,pSOS,VRTX,LynxOS,Hopen,DeltaOS
    免费型:Linux,uCLinux,uC/OS-Ⅱ,eCos,uITRON
    按实时性划分
    硬实时:Vxworks
    软实时:WinCE,RTLinux
    无实时:Linux
    实时性(软件、应急那):规定的时间内完成规定的动作
    vxworks:实时性强
    Linux:无实时的 运行效率 稳定
    安卓实时:RT-Linux openwrt

    嵌入式系统的应用行业

    工业控制:工控设备、智能仪表、汽车电子
    军事国防:军事电子
    消费电子:信息家电、智能玩具、通信设备、移动存贮
    网络:网络设备、电子商务

    CPU体系结构的种类、特点及应用场景?

    CPU基本结构
    从功能上看,一般CPU的内部结构可分为:控制单元、逻辑运算单元、存储单元(包括内部总线和缓冲器)三大部分。其中控制单元完成数据处理整个过程中的调配工作,逻辑单元则完成各个指令以便得到程序最终想要的结果,存储单元就负责存储原始数据以及运算结果。

    CPU的体系结构

    1、冯·诺伊曼结构
    (Von Neumann architecture),也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。
    特点:而程式自我修改这项特色也被现代程式设计所弃扬,因为它会造成理解与除错的难度,且现代中央处理器的管线与快取机制会让此功能效率降低。
    应用场景:本结构隐约指导了将储存装置与中央处理器分开的概念,因此依本结构设计出的计算机又称储存程式型电脑。 最早的计算机器仅内涵固定用途的程式。现代的某些计算机依然维持这样的设计方式,通常是为了简化或教育目的。
    2、哈佛结构
    (Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构。
    特点:哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和储存的,执行时可以预先读取下一条指令。
    应用场景:程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。
    3、并行处理结构
    特点:单指令流多数据流(SIMD) 结构。
    应用场景:SIMD机器最适于处理规则的稠密数组带问题。如图象处理、矩阵运算和物理模拟等问题。它们不象单处理机那样通用,一般地是作为冯诺依曼主机的附加处理机。

    展开全文
  • 嵌入式系统开发设计---嵌入式系统开发设计

    万次阅读 多人点赞 2018-09-20 07:42:01
    嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现架构上。这里,系统架构既包括软件系统架构也包括硬件系统架构。一种架构可以映射到各种不同的物理实现,每种实现表示不同的取舍...

         嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构,并将功能映射到系统实现架构上。这里,系统架构既包括软件系统架构也包括硬件系统架构。一种架构可以映射到各种不同的物理实现,每种实现表示不同的取舍,同时还要满足某些设计指标,并使其他的设计指标也同时达到最佳化。

        嵌入式系统的设计方法跟一般的硬件设计、软件开发的方法不同,是采用硬件和软件协同设计的方法,开发过程不仅涉及软件领域的知识,还涉及硬件领域的综合知识,甚至还涉及机械等方面的知识。要求设计者必须熟悉并能自如地运用这些领域的各种技术,才能使所设计的系统达到最优。

        虽然嵌入式系统应用软件的设计方案随应用领域的不同而不同,但是嵌入式系统的分析与设计方法也遵循软件工程的一般原则,许多成 熟的分析和设计方法都可以在嵌入式领域得到应用。嵌入式系统的开发过程同样也包括需求分析、系统设计、实现和测试几个基本阶段,并且每个阶段都有其独有的特征和重点。

        本节主要介绍嵌入式系统开发设计的技术与方法,并从嵌入式系统应用和计算模型的角度分析应用软件设计的方法及设计过程中面临的主要问题。最后,讨论嵌入式领域软件移植的相关问题。

     

    1 嵌入式系统设计概述

        进行嵌入式系统设计前,应明确嵌入式系统设计本身的特点及衡量嵌入式系统设计的一些主要的技术指标。

        1.嵌入式系统设计的特点

        与通常的系统设计相比,嵌入式系统设计具有以下特点:

    • 软、硬件协同并行开发;

    • 微处理器的类型多种多样;

    • 实时嵌入式操作系统具有多样性;

    • 与通用系统开发相比,可利用系统资源很少;

    • 应用支持少;

    • 要求特殊的开发工具;

    • 软、硬件都要很健壮;

    • 调试很困难。 

        2.嵌入式系统的技术指标

        嵌入式系统设计的常用指标有:

        (1)NRE 成本(非重复性工程成本):设计系统所需要支付的一次性货币成本,即一旦设计完毕,不需要支付额外的设计费用,就可以制造任意数目的产品。

        (2)单位成本:生产单个产品所需要支付的货币成本,不包含 NRE 成本。

        (3)大小:指系统所占的空间,对软件而言,一般用字节数来衡量;对硬件而言,则用逻辑门或晶体管的数目来衡量。

        (4)性能:系统完成规定任务所需要的时间,是设计时最常用的设计指标,主要有两种衡量方式,一是响应时间,即开始执行到任务结束之间的时间。二是完成量,即单位时间内所完成的任务量。

        (5)功率:系统所消耗的功率,它决定了电池的寿命或电路的散热需求。

        (6)灵活性:在不增加 NRE 成本的前提下,改变系统功能的能力。

        (7)样机建立时间:建立系统可运行版本所需的时间,系统样机可能比最终产品更大更昂贵,但可以验证系统的用途和正确性,改进系统的功能。

        (8)上市时间:从系统开发到可以上市卖给消费者的时间,最主要的影响因素包括设计时间、制造时间和检测时间。

        (9)可维护性:系统推出或上市后进行修改的难易程度,特别是针对非原始开发人员进行的修改。

        (10)正确性:正确实现了系统的功能,可以在整个设计过程中检查系统的功能,也可以插入测试电路检验是否正确。

        (11)安全性:系统不会造成伤害的概率。各个设计指标之间一般是互相竞争的,改良了某个指标常常会导致其他指标的恶化,

        为了最好地满足设计最佳化,设计者必须了解各种软、硬件的实现技术,并且能够从一种技术转移到另一种技术,以便找到特定约束下的最佳方案。

        3.嵌入式系统的设计挑战

        嵌入式系统设计所面临的挑战有以下几个方面。

        (1)需要多少硬件:设计者对用于解决问题的计算能力有较强的控制能力,不仅可以选择使用何种处理器,而且可以选择存储器的数量、所使用的外设等,因为设计不仅要满足性能的需求,还要受到制造费用的约束,硬件的选择十分重要,硬件太少,将达不到功能和性能的要求,硬件过多又会使产品过于昂贵。

        (2)如何满足时限:使用提高处理器速度的方法使程序运行速度加快来解决时间约束的方法是不可取的,因为这样会使系统的价格上升。同时,提高了处理器的时钟频率,有时并不能提高执行速度,因为程序的速度有可能受存储系统的限制。

        (3)如何减少系统的功耗:对采用电池供电的系统,功耗是一个十分敏感的问题。对于非电池供电的系统,高功率意味着高散热。降低系统功耗的一种方法是降低它的运算速度,但是单纯地降低运算速度显然会导致性能不能满足,因此,必须认真设计在降低功耗的同时满足性能的约束。

        (4)如何保证系统的可升级性:系统的硬件平台可能使用几代,或者使用同一代的不同级别的产品,这些仅需要一些简单的改变,设计者必须通过改变软件来改变系统的特性,设计一种机器使它能够提供现在仍未开发的软件的性能。

        (5)如何保证系统的可靠性:可靠性是产品销售时一项重要的指标,产品能够很好地工作是消费者的合理要求,可靠性在一些系统中尤为重要,如安全控制系统。

        (6)测试的复杂性:测试一个嵌入式系统比仅仅输入一些数据困难得多,所以不得不运行整台机器以产生正确的数据,数据产生的时间是十分重要的,即不能离开嵌入式系统工作的整个环境来测试嵌入式系统。

        (7)可视性和可控制性有限:嵌入式系统通常没有显示设备和键盘,这将导致开发者很难了解系统内部发生了什么,也不能响应系统的动作,有时候不得不通过观察微处理器的信号来了解。在实时系统中,一般无法为了观察而让系统停机。

        (8)开发环境受限:嵌入式系统的开发环境,如开发软件、硬件工具通常比通用计算机或工作站上的可用环境更为有限,故只能采用交叉式开发,给开发进度带来很大影响。

     

    2   开发模型与设计流程

        与通用系统的开发类似,嵌入式系统的开发也可以采用软件工程中常见的开发模型,主要包括瀑布模型、螺旋模型、逐步求精模型及层次模型。

        1.常用开发模型

        设计流程是系统设计期间应遵循的一系列步骤,其中一些步骤可以由自动化工具完成,而另外一些只可用手工完成。在嵌入式系统领域,有如下几种常用开发过程模型。

        (1)瀑布模型。瀑布模型由五个主要阶段构成:需求分析阶段确定目标系统的基本特点;系统结构设计阶段将系统的功能分解为主要的构架;编码阶段主要进行程序的编写和调试;测试阶段检测错误;最后一个是维护阶段,主要负责修改代码以适应环境的变化,并改正错误、升级。各个阶段的工作和信息总是由高级的抽象到较详细的设计步骤单向流动,是一个理想的自顶向下的设计模型。

        (2)螺旋模型。螺旋模型假定要建立系统的多个版本,早期的版本是一个简单的试验模型,用于帮助设计者建立对系统的直觉和积累开发此系统的经验,随着设计的进展,会创建更加复杂的系统。在每一层设计中,设计者都会经过需求分析、结构设计、测试三个阶段。在后期,当构成更复杂的系统版本时,每一个阶段都会有更多的工作,并需要扩大设计的螺旋,这种逐步求精的方法使设计者可以通过一系列的设计循环加深对所开发的系统的理解。螺旋的顶部第一个循环是很小很短的,而螺旋底部的最后的循环加入了对螺旋模型的早期循环的细节补充,螺旋模型比瀑布模型更加符合实际。

        (3)逐步求精模型。逐步求精模型是一个系统被建立多次,第一个系统被作为原型,其后逐个将系统进一步求精。当设计者对正在建造的系统的应用领域不是很熟悉时,这个方法很有意义。通过建造几个越来越复杂的系统,从而精炼系统,使设计者能检验架构和设计技术。此外,各种迭代技术也可仅被局部完成,直到系统最终完成。

        (4)层次模型。许多嵌入式系统本身是由更多的小设计组成的,完整的系统可能需要各种软件构件、硬件构件。这些部件可能由尚需设计的更小部件组成,因此从最初的完整系统设计到为个别部件的设计,设计的流程随着系统的抽象层次的变化而变化,从最高抽象层次的整体设计到中间抽象层次的详细设计,再到每个具体模块的设计,都是逐层展开的,其中每个流程可能由单个设计人员或设计小组来承担,每个小组依靠其他小组的结果,各个小组从上级小组获得要求,同时上级小组依赖于各个分组设计的质量和性能。而且,流程的每个实现阶段都是一个从规格说明到测试的完整流程。

        2.嵌入式系统的设计方法

        一个良好的嵌入式系统设计方法是十分重要的,这是因为:

        (1)良好的设计方法可以使设计者清楚地了解他们所做工作的进度,这样可以确保不遗漏其中的任何一项工作。

        (2)允许使用计算机辅助工具帮助设计者进行工作,将整个过程分成几个可控的步骤进行。

        (3)良好的设计方法方便设计团队的成员之间相互交流,通过定义全面的设计过程,使团队里的每个成员可以很好地理解他们所要做的工作及完成分配给他们的任务时所达到的目标。

        嵌入式系统软件的开发过程可以分为项目计划、可行性分析、需求分析、概要设计、详细设计、程序建立、下载、调试、固化、测试及运行等几个阶段。

        项目计划、可行性分析、需求分析、概要设计及详细设计等几个阶段,与通用软件的开发过程基本一致,都可按照软件工程方法进行,如采用原型化方法、结构化方法等。

        由于嵌入式软件的运行和开发环境不同,开发工作是交叉进行的,所以每一步都要考虑到这一点。

    程序建立阶段的工作是根据详细设计阶段产生的文档进行的。这一阶段的工作主要是源代码编写、编译、链接等几个子过程,这些工作都是在宿主机进行的,不需要用到目标机。

        产生应用程序的可执行文件后,就要用到交叉开发环境进行调试,根据实际情况可以选用可用的几种调试方法之一或它们的有效组合来进行。

        嵌入式系统设计不同于传统的软件设计,如图 12-11 所示。经常包含硬件设计和软件设计,其中前端活动,如规格说明和系统架构,需要同时考虑硬件和软件两个方面。

        类似的,后端设计,如系统集成和测试要考虑整个系统。在中间阶段中,软件和硬件构件的开发彼此相互独立,并且大多数的硬件和软件的工作能够相对独立地进行。最后,要将经调试后正确无误的可执行程序固化到目标机上。根据嵌入式系统硬件上配置的不同,固化有几种方式,可以固化在 EPROM 和 FLASH 等存储器中,也可固化在 DOC 和 DOM 等电子盘中。通常还要借助一些专用编程器进行。

        由于嵌入式系统对安全性和可靠性的要求比通用计算机系统要高,所以在对嵌入式系统进行白盒测试时,要求有更高的代码覆盖率。

        在系统开发流程的各个阶段,分别要进行系统的确认和性能评估、安全性评估及风险性评价,并对系统的实现进行测试验证。

     

    3 嵌入式系统设计的核心技术

        嵌入式系统的开发是软、硬件综合开发,与通用系统的开发存在巨大差异,一方面是因为每个嵌入式系统都是一个软硬件的结合体;另一方面,嵌入式系统一旦研制完成,软件便随着硬件固化到产品中,具有很强的专用性。在这些特点的影响下,必然要有一种不同于通用软件开发过程的工程方法学来支持嵌入式系统的开发过程,同时,这些特点也决定了嵌入式系统开发所采用的独特的核心技术。

        总体来看,在嵌入式开发领域,主要有三种核心技术:处理器技术、IC 技术、设计/ 验证技术。

        1.处理器技术

        处理器技术与实现系统功能的计算引擎结构有关,很多不可编程的数字系统也可以视为处理器,这些处理器的差别在于其面向特定功能的专用化程度,导致其设计指标与其他处理器不同。

        (1)通用处理器。这类处理器可用于不同类型的应用,一个重要的特征就是存储程序,由于设计者不知道处理器将会运行何种运算,所以无法用数字电路建立程序。另一个特征就是通用的数据路径,为了处理各类不同的计算,数据路径是通用的,其数据路径一般有大量的寄存器及一个或多个通用的算术逻辑单元。设计者只需要对处理器的存储器编程来执行所需的功能,即设计相关的软件。

        在嵌入式系统中使用通用处理器具有设计指标上的一些优势。上市时间和 NRE 成本较低,因为设计者只需编写程序,而不需做任何数字设计,灵活性高,功能的改变通过修改程序进行即可。与自行设计处理器相比,数量少时单位成本较低。

        当然,这种方式也有一些设计指标上的缺陷,数量大时单位成本相对较高,因为数量大时,自行设计的 NRE 成本分摊下来,可降低单位成本。同时,对于某些应用,性能可能很差。由于包含了非必要的处理器硬件,系统的体积和功耗可能变大。

        (2)单用途处理器。单用途处理器是设计用于执行特定程序的数字电路,也指协处理器、加速器、外设等。如 JPEG 编码解码器执行单一程序,压缩或解压视频信息。嵌入式系统设计者可通过设计特定的数字电路来建立单用途的处理器。设计者也可以采用预先设计好的商品化的单用途处理器。

        在嵌入式系统中使用单用途处理器,在指标上有一些优缺点。这些优缺点与通用处理器基本相反,性能可能更好,体积与功率可能较小,数量大时单位成本可能较低,而设计时间与 NRE 成本可能较高,灵活性较差,数量小时单位成本较高,对于某些应用,性能不如通用处理器。

        (3)专用处理器。专用指令集处理器是一个可编程处理器,针对某一特定类型的应用进行最优化。这类特定应用具有相同的特征,如嵌入式控制、数字信号处理等。在嵌入式系统中使用专用处理器可以在保证良好的性能、功率和大小的情况下,提供更大的灵活性,但这类处理器仍需要昂贵的成本建立处理器本身和编译器。单片机和数字信号处理器是两类应用广泛的专用处理器,数字信号处理器是一种针对数字信号进行常见运算的微处理器,而单片机是一种针对嵌入式控制应用进行最佳化的微处理器。

        2.IC 技术 

        从系统的集成电路设计描述得到实际芯片的物理映射过程的实现技术便是 IC(Integrated Circuits,集成电路)技术,当前在半导体领域的三类实现技术,即全定制、半定制和可编程技术均可应用于嵌入式系统的硬件设计。

        (1)全定制/VLSI(Very Large Scale Integrated Circuites,超大规模集成电路)。在全定制 IC 技术中,需要根据特定的嵌入式系统的数字实现来优化各层设计人员从晶体管的版图尺寸、位置、连线开始设计以达到芯片面积利用率高、速度快、功耗低的最优化性能。利用掩膜在制造厂生产实际芯片,全定制的 IC 设计也常称为 VLSI,具有很高的 NRE 成本、很长的制造时间,适用于大量或对性能要求严格的应用。

        (2)半定制/ASIC(Application Specific Integrated Circuit,专用集成电路)。半定制ASIC是一种约束型设计方法,包括门阵列设计法和标准单元设计法。它是在芯片制作好一些具有通用性的单元元件和元件组的半成品硬件,设计者仅需要考虑电路的逻辑功能和各功能模块之间的合理连接即可。这种设计方法灵活方便、性价比高,缩短了设计周期,提高了

    成品率。

        (3)可编程/ASIC。可编程器件中所有各层都已经存在,设计完成后,在实验室里即可烧制出设计的芯片,不需要 IC 厂家参与,开发周期显著缩短。可编程 ASIC 具有较低的 NRE 成本,单位成本较高,功耗较大,速度较慢。

        3.设计/验证技术

        嵌入式系统的设计技术主要包括硬件设计技术和软件设计技术两大类。其中,硬件设计领域的技术主要包括芯片级设计技术和电路板级设计技术两个方面。

        芯片级设计技术的核心是编译/综合、库/IP(Intellectual  Property,知识产权)、测试/ 验证。编译/综合技术使设计者用抽象的方式描述所需的功能,并自动分析和插入实现细节。库/IP 技术将预先设计好的低抽象级实现用于高级抽象。测试/验证技术确保每级功能正确,减少各级之间反复设计的成本。

        软件设计技术的核心是软件语言。软件语言经历了从低级语言(机器语言、汇编语言)到高级语言(例如,结构化设计语言、面向对象设计语言)的发展历程,推动其发展的是汇编技术、分析技术、编译/解释技术等诸多相关技术。软件语言的级别也从实现级、设计级、功能级逐渐向需求级语言发展过渡。

        早期,随着通用处理器概念的逐渐形成,软件技术迅速发展,软件的复杂度也开始增加,软件设计和硬件设计的技术和领域完全分开。设计技术和工具在这两个领域同步得到发展,也使得行为描述可以在越来越抽象的级别上进行,以适应设计复杂度不断增长的需要。这种同步发展如今又使得这两个领域都使用同样的时序模型来描述行为,因而这两个领域即将可能再度统一为一个领域。

        鉴于大多数嵌入式系统都是实时的反应式系统,反应式系统具有多任务并发、时间约束严格与可靠性高的特点,针对反应式系统的设计和描述,人们相继提出了多种描述语言和验证方法学。例如,采用时序逻辑用来刻画反应式系统的性质及推理反应式系统的行为,采用模型检验技术验证反应式系统设计的正确性等,这些技术已逐步在嵌入式开发过程中发挥着重要的作用。

     

    4 嵌入式开发设计环境

        嵌入式系统的开发环境种类很多,大体可以把它们分为如下几类:

        (1)与嵌入式操作系统配套的开发环境,属于这一类的开发环境较多,如 PalmOS、THOS、VxWorks、Windows CE 等商业嵌入式操作系统都有与其配套的功能齐全的开发环境。

        (2)与处理器芯片配套的开发环境。这类开发环境一般由处理器厂商提供,如EPSON公司推出的一个专门为基于 S1C33 系列微控制器芯片的嵌入式系统开发的工具包便是这一类型的开发环境。

        (3)与具体应用平台配套的开发环境。这类开发环境针对性较强,如高通公司的 Brew SDK 等。

        (4)其他类的开发环境。这类开发环境主要指一些嵌入式系统供应商在 GNU 开源工具的基础上开发或定制的较为通用的开发环境。这类工具可以免费获得,而且支持的处理器类型繁多,功能齐全,但在技术支持方面比专业化商业工具略逊一些。

     

    5 嵌入式软件设计模型

        随着嵌入式系统的功能日益复杂,要描述这些功能复杂的系统的行为也越来越困难,实践证明通过采用计算模型的方法来对系统进行描述和分析是一种具有工程价值的方法。

        本节介绍几种嵌入式领域常用的计算模型,并从计算模型的角度分析和阐述嵌入式应用设计和开发的相关问题。计算模型提供一组用简单对象来组合复杂行为的方法,可以帮助设计者理解和描述系统行为。嵌入式系统常用的计算模型有如下几种:时序计算模型、通信进程模型、状态机模型、数据流模型、面向对象模型、并发进程模型。

        这些模型分别在不同的应用领域使用,如状态机模型特别适合描述以控制为主的系统,数据流模型可以很好地描述数据处理和转换问题。目前使用最广泛的是并发进程模型。

        1.状态机模型

        有限状态机(Finite-State Machine,FSM)是一个基本的状态模型,可以用一组可能的状态来描述系统的行为,系统在任何时刻只能处于其中一个状态,也可以描述由输入确定的状态转移,最后可以描述在某个状态下或状态转移期间可能发生的操作。

       有限状态机 FSM 是一个六元组 F<S,I,O,F,H,S0>,其中 S 是一个状态集合{s0, s1,…,sl},I 是输入集合{I0,I1,…,Im},O 是输出集合{o0,o1,…,on},F 是次态函数或转移函数,将状态和输入映射到状态(S×I→S),H 是输出函数,将状态映射到输出 (S→O),S0 是初始状态。

       图 12-12 是电梯的控制单元的状态机描述。在初始“空闲”态,将 up 和 down 设置为 0,open 设置为 1。在所请求的楼层不同于当前楼层之前,状态机一直停留在“空闲”状态。如果所请求的楼层大于当前楼层,则状态机转移到“上升”状态,并将 up 设置为 1。如果所请求的楼层小于当前楼层,则状态机转移到“下降”状态,并将 down 设置为 1。在当前楼层等于所请求的楼层之前,状态机一直留在“下降”或“上升”状态,然后状态转移到“开门”状态,并将 open 设置为1。通常,系统有一个计时器 timer,因此,当状态机转移到“开门”状态时,还要将计时器启动,状态机停留在“开门”态,直到计时器超时,最后转移到“空闲”态。

     

        当 FSM 被用于嵌入式系统设计时,其输入和输出的数据类型都是布尔类型,而函数表示含有布尔运算的布尔函数,这种模型对于没有数据输入或输出的很多纯控制系统而言已经足够。如果要处理数据,则将 FSM 扩展为带有数据路径的状态机(FSM with Datapath, FSMD)。另外,对状态机模型可以进一步扩展以支持分级和并发,这种模型称为分级/并发FSM(Hierarchical/Concurrent FSM,HCFSM)模型。

        2.数据流模型

        数据流模型是并发多任务模型派生出的一种模型,该模型将系统的行为描述为一组结点和边,其中结点表示变换,边表示从一个结点到另一个结点的数据流向。每个结点使用来自其输入边的数据,执行变换并在其输出边上产生数据。

        每条边可能有或没有数据,出现在边上的数据称为令牌,当某个结点的所有输入边都至少有一个令牌时,该结点可触发。结点触发后,将使用来自每条输入边的一个令牌,对所有使用的令牌进行数据变换,并在输出边上产生一个令牌,结点的触发仅决定于令牌出现的情况。

        图 12-13 所示是计算 z=(a+b)×(c-d)的数据流模型。

        目前,已有若干商业化的工具支持用图形化语言表达数据流模型,这些工具可以自动将数据流模型转换为并发多任务模型,以便在微处理器上实现。其转换方法为将每个结点转换为一个任务,每条边转换为一个通道,其中并发多任务模型的实现方法是使用实时操作系统对并发任务进行映射。

        图 12-14 是一个同步数据流模型,这个模型中,在结点的每条输入边和输出边上分别标注每次触发所使用和产生的令牌数。该模型的优点是,在实现时不需要将其转换为并发多任务模型,而是用静态方式调度结点,产生时序程序模型。该模型可以使用时序程序语言(如 C 语言)来表达,不需要实时操作系统就可以执行,因此其执行效率更高。

     

        3.并发进程模型

       并发进程模型是由一组进程构成,每个进程是一个顺序执行的过程,各进程间可以并发执行。并发进程模型提供创建、终止、暂停、恢复和连接进程的操作。进程在执行中可以相互通信,交换数据。进程间通信可以采用两种方式:共享变量和消息传递。信号量、临界区、管程和路径表达式等用来对并发进程的操作进行同步。

        通常,实时系统可以看成是由许多并发执行的进程构成的系统,其中每个进程都有时间要求。这样,很多嵌入式系统更容易用一组并发执行的任务来描述,因为这些系统本身就是多任务系统,并发进程模型便自然地可以由实时操作系统的多任务来实现。

        4.面向对象模型

        传统的并发进程模型是围绕进程的概念进行设计的,进程是一个实现级的概念,它是对客观世界活动的一种间接模拟,因此,采用进程模型来解决客观世界中的并发问题就显得极不自然,并且也使得并发程序难以设计和理解。

        面向对象模型以一种更加直接的方式刻画客观世界中的活动,模型中存在着潜在的并发执行能力。一个对象向另一个对象发送消息后,若不需要或不立即需要消息的处理结果,前者不必等待后者处理消息,消息发送者和消息接受者可以并发执行。对象不都是处于被动的提供服务状态,它们中的一些除了能通过接收消息向外提供服务外,还可以有自己的事务处理。一个对象往往可以同时处理多个消息。

       对象是数据和操作的封装体,数据存放在对象的局部变量中,对象的状态由对象所有的局部变量在某一时刻的取值来表示。在并发环境中,还要考虑对象并发状态的描述问题,因为对象的并发控制是根据对象的并发状态来进行的。

       把并发与面向对象相结合,归结起来可分为两条途径:

        (1)在面向对象模型中引进并发机制,充分利用面向对象技术刻画客观世界的良好模型能力和面向对象的各个重要特性,同时把其潜在的并发能力描述出来,使其适合于描述并发计算。

        (2)在传统并发模型中引进面向对象思想。

        面向对象的并发模型可以分为两种类型:隐式并发模型和显式并发模型。

        (1)隐式并发模型。这种模型的特点是推迟并发设计,将对象建模作为建模基础。在进入运行阶段之前,将对象看成自主单元,各种对象的活动看成理想并发方式完成的特定工作。就像每个对象拥有一个自己的处理器,这个处理器可以为对象提供一个执行线程。进入系统的外部事件被看成一个处理请求,以广播方式传给一些对象,这些对象接着向其他对象进一步提出处理请求。理论上,对应一个请求,可以有任意多个对象执行相应的处理。在实现时,由调度程序最终决定其对象的操作顺序,如图 12-15 所示。

       (2)显式并发模型。这种模型的特点是首先考虑并发,应先把并发概念和对象概念分开。在建立对象以后,用实时操作系统支持的进程概念来表示并发,形成对象和进程两个抽象层次,即先将系统分解为准并发进程作为开始,而在每个进程的内部采用面向对象的技术。对象间交互表示成嵌套的函数调用,通过加入锁、监视器、信号量等显式同步机制,来保证对象的完整。该模型将进程置于对象之上,对象中不必考虑并发、对象串行化,如图 12-16 所示。

     

     

        早期,实时系统的设计方法主要是结构化设计方法,采用结构化方法的系统在复用性、可修改性等方面有很大的局限性。面向对象的实时系统设计方法显然在这些问题上具有明显的优势。较实用的面向对象的设计方法是诺基亚公司的 OCTOPUS 方法,该方法以 OMT 和融合方法(Fusion Method)为基础,提出了对实时系统响应时间、时间域及并发的处理方法,并具体提出了对并发、同步、通信、中断处理、ASIC、硬件界面、端对端响应时间等方面的处理。OCTOPUS 方法将软件开发的主要阶段很好地合并起来,从规格说明到运行模型之间的过渡紧密自然,还支持渐进式开发。OCTOPUS 方法是当前面向对象技术和实时系统相结合的一个典型的设计方法。另外,形式化的面向对象的开发技术和建模语言也逐渐在实时系统建模的初始阶段得到应用。

    6 需求分析 

        在设计之前,设计者必须知道要设计什么。通常人们用需求和规格说明来描述设计过程的这两个相关而不同的步骤。需求是用户所想要的非形式化的描述,而规格说明是可以用来创建系统架构的更详尽、更精确、更一致的描述。当然,需求和规格说明都是指导系统的外部表示,而非内部表示。需求有两种类型:功能性需求和非功能性需求,功能性需求说明这个系统必须做什么,而非功能性需求说明系统的其他属性,如物理尺寸、价格、功耗、设计时间、可靠性等。

        对一个大系统进行需求分析是一项复杂而费时的工作,但是,获取少量格式清晰、简单明了的信息是理解系统需求的一个良好开端。表 12-5 是在某项工程开始时填写的需求表 格,在考虑系统的基本特征时可将该表格作为检查表。

        这份需求表格内容是以 GPS(Global Position System,移动地图系统)为例编写的。移动地图系统是一种手持设备,针对在高速公路开车的用户或类似的用户而设计,该设备可从 GPS 上得到位置信息,为用户显示当前所在的位置及周围的地形图,地图的内容随着用户及设备所在位置的改变而改变。

        需求分析阶段最重要的文档输出就是系统的规格说明。

        规格说明是精确反映客户需求并且作为设计时必须遵循的要求的一种技术文档。在软件开发的过程中,规格说明非常重要。系统分析人员接受用户需求产生目标软件系统的规格说明,设计与编码人员根据规格说明,进行模块设计并最终产生程序代码,测试和验收人员验证最终软件是否符合规格说明。规格说明应该是清晰的、无歧义的,否则由该规格说明建造系统可能不符合实际要求。

       目前,业界较为流行的方法是采用 UML 进行规格说明的描述。UML 是一个通用的标准建模语言,可以对任何具有静态结构和动态行为的系统进行建模。UML 适用于系统开发过程中从需求规格描述到系统完成后测试的不同阶段。

        图 12-17 是一个显示操作的状态机规格说明示例,开始和结束是特殊的状态,状态机中的状态代表了不同的概念性操作。

        在需求分析阶段,通过用例来捕获用户需求。通过用例建模,描述对系统感兴趣的外部角色及其对系统(用例)的功能要求。分析阶段主要关心问题域中的主要概念(如抽象、类和对象等)和机制,需要识别这些类及它们相互间的关系,并用 UML 类图来描述。在分析阶段,只对问题域的对象(现实世界的概念)建模,而不考虑定义软件系统中技术细节的类(如处理用户接口、数据库、通信和并行性等问题的类)。

    7 系统设计

        目前,嵌入式系统的设计工具可以分为两类:协同合成工具和协同模拟工具。

        (1)协同合成工具。当前,用于嵌入式开发的主要的协同合成工具有 POLIS、COSYMA和Chinook 等。

    • POLIS:POLIS 是 UC-Berkeley 开发的交互式嵌入式系统的软、硬件协同设计框架,它适用于小型控制系统的设计,系统描述支持基于 FSM(Finite State Machine)的语言。由于软、硬件均可透明地从同一 CFSM 描述中取得,设计空间的灵活性也相应增加,支持使用 PTOLEMY 的协同模拟,在描述及实现层均支持正式的验证,架构的支持受限,即硬件 CFSMs 所包围的只有一个处理器,而且不支持共享内存。

    • COSYMA:COSYMA 是由德国 IDA 公司开发的一种探索硬件与软件协同设计合成进程的平台,它面向软件系统的描述较简单,支持自动分割和协同处理器合成,在合成时期可以对设计空间进行探索,系统合成取决于硬件限制,不支持并发模块,即一次只能有一个线程执行,架构同样受限,不支持正式验证,设计的成功与否取决于分割及开销估计技术。

    • Chinook:Chinook 是为控制系统而设计的,整个系统的描述作为一个输入提供给 Chinook,它的内部模式基于类似等级状态的模式,它不对代码进行分割,它为整个设计提供单一的模拟环境,Chinook 支持多种系统架构,尤其是多处理器结构。同样支持定时限制的描述,它能合成多种接口,包括系统之间的软、硬件接口,能直接从定时图表中合成设备驱动器,可以控制处理器之间的通信。

        (2)协同模拟工具。协同模拟是嵌入式系统设计中至关重要的一个方面,在整个系统设计完成后,在统一框架下模拟不同种类的成分是必要的,协同模拟不仅提供检验,而且为用户提供各系统的性能信息,这有助于在系统的早期提出变更方案,不至于造成重大损失。目前,主要的协同模拟工具有如下两种。

    • PTOLEMY:PTOLEMY 的关键思想是混合使用面向对象内核的计算模型,可用于模拟多种的系统,在各种应用中被广泛地使用,但不适合于系统合成,硬件模拟也是它的一项功能。

    • TSS:TSS(Tool for System Simulation)是模拟复杂硬件的工具,采用 C 语言编写,单个模块的提取可由用户控制,可以方便地进行添加与删除模块。但不支持分级模块,没有用于同步各处理器存取共享数据结构的机制,模块间的通信通过端口和总线进行。并且,TSS 支持多核系统的模拟。

        1.系统架构设计

        描述系统如何实现规格说明中定义的功能是系统架构设计的主要目的。但是在设计嵌入式系统的系统结构时,很难将软件和硬件完全分开。通常的处理是先考虑系统的软件架构,然后再考虑其硬件实现。系统结构的描述必须符合功能上和非功能上的需求。不仅所要求的功能要体现,而且成本、速度、功耗等非功能约束也要满足。从系统原始框图中的功能元素开始逐个考虑和细化,把原始框图转化为软件和硬件系统结构的同时考虑非功能约束,是一个切实可行的方法。下面以 GPS 移动地图系统的架构设计为例进行说明。

        (1)原始框图。如图 12-18 所示,这个原始框图是移动地图系统的主要操作和数据流。

     

     

        (2)软件系统架构。如图 12-19 所示,软件系统主要由用户界面、数据库搜索引擎和数据转换器组成。

        (3)硬件系统架构。如图 12-20 所示,硬件系统采用通用微处理器、存储器和 I/O 设备组成。本系统选用两种存储器:通用数据、程序存储器和针对像素显示的帧缓冲存储器。

        2.硬件子系统设计

        嵌入式系统的开发环境由 4 部分组成:目标硬件平台、嵌入式操作系统、编程语言和开发工具,其中处理器和操作系统的选择应当考虑更多的因素,避免错误的决策影响项目的进度。

        (1)选择处理器技术。嵌入式系统设计的主要挑战是如何使互相竞争的设计指标同时达到最佳化。设计者必须对各种处理器技术和 IC 技术的优缺点加以取舍。一般而言,处理器技术与 IC 技术无关,也就是说,任何处理器技术都可以使用任何 IC 技术来实现,但是最终器件的性能、NRE 成本、功耗、大小等指标会有很大的差异,如图 12-21 所示。

        更通用的可编程技术提供了较大的灵活性,降低了 NRE 成本,建立产品样机与上市的时间较快。定制的技术能够提供较低的功耗、较好的性能、更小的体积和大批量生产时的低成本。

        通常,一个公司要推出一种产品,如机顶盒、家庭路由器或通用处理器等,可以先推出半定制产品,以尽快占领市场,然后再推出全定制的产品。也可先用较可靠的老技术实现处理器,再用新制程的技术实现下一代。同样,嵌入式系统的设计者可以使用可编程的器件来建立样机,以加速上市时间,批量时再采用定制器件。

        根据这些原则,设计者便可以对采用的处理器技术和处理器做出合理选择。一般,全定制商品化的“通用处理器软件”是大多数情况下都适用的一个选择。

        (2)通用嵌入式处理器的选择。根据用户的需求和项目的需要选择合适的通用嵌入式处理器,选择时需要考虑如下指标。

    • 处理器的速度。一个处理器的性能取决于多个方面的因素:时钟频率,内部寄存器的大小,指令是否对等处理所有的寄存器等。对于许多需用处理器的嵌入式系统设计来说,目标不是在于挑选速度最快的处理器,而是在于选取能够完成作业的处理器和 I/O 子系统。处理器的性能满足系统的需求,并有一定的余量,但也不必选得太高。

    • 技术指标。当前,许多嵌入式处理器都集成了外围设备的功能,从而减少了芯片的数量,进而降低了整个系统的开发费用。开发人员首先考虑的是,系统所要求的一些硬件能否无须过多的组合逻辑就可以连接到处理器上。其次是考虑该处理器的一些支持芯片,如 DMA 控制器、内存管理器、中断控制器、串行设备、时钟等的配套。

    • 开发人员对处理器的熟悉程度,即项目的开发人员需要在处理器本身的成本和开发成本之间做一个权衡。

    • 处理器的 I/O 功能是否满足系统的需求,即许多处理器提供内置的外部设备,以减少芯片数量、降低成本,应尽量考虑这种方案。

    • 处理器的相关软件支持工具,即该款处理器是否具有完善的嵌入式操作系统、编程语言和开发工具的支持等。

    • 处理器的调试,即处理器是否集成了调试功能,如是否支持 JTAG、BDM 等调试方式。

    • 处理器制造商的支持可信度。在产品的生命周期里选择某种处理器时,设计者必须确认它有足够的供货量、技术支持等处理器的低功耗。

        嵌入式微处理器最大并且增长最快的市场是手持设备、电子记事本、PDA、手机、GPS 导航器、智能家电等消费类电子产品,这些产品中选购的微处理器的典型特点是要求高性能、低功耗。许多 CPU 生产厂家已经进入了这个领域。

        (3)硬件设计的注意事项。首先,将硬件划分为部件或模块,并绘制部件或模块连接框图。其次,对每个模块进行细化,把系统分成更多个可管理的小块,可以被单独实现。通常,系统的某些功能既可用软件实现也可用硬件实现,没有一个统一的方法指导设计者决定功能的软硬件分配,但是可以根据约束清单,在性能和成本之间进行权衡。

        设计软、硬件之间的接口时,需要硬件设计者和软件设计者协同工作才能完成,良好的接口设计可以保证硬件简洁、易于编程。

       设计时需要注意以下几点。

    • I/O 端口:列出硬件的所有端口、端口地址、端口属性、使用的命令和序列的意义、端口的状态及意义。

    • 硬件寄存器:对每个寄存器设计寄存器的地址、寄存器的位地址和每个位表示的意义,以及对寄存器读写的说明、使用该寄存器的要求和时序说明。

    • 内存映射:共享内存和内存映射 I/O 的地址,对每个内存映射,说明每个 I/O 操作的读/写序列、地址分配。

    • 硬件中断:如何使用硬件中断,列出所使用的硬件中断号和分配的硬件事件。

    • 存储器空间分配:列出系统中程序和数据占用的空间大小、位置,以及存储器类型和访问方式等。

        总之,硬件设计者应该给软件设计者更多、更详细的信息,以便于进行软件设计和开发。

        3.软件子系统设计

        根据需求分析阶段的规格说明文档,确定系统计算模型,对软件部分进行合理的设计即可。

        (1)操作系统的选择。在选择嵌入式操作系统时,需要做多方面的考虑:

    • 操作系统的功能。根据项目需要的操作系统功能来选择操作系统产品,要考虑系统是否支持操作系统的全部功能或部分功能,是否支持文件系统、人机界面,是实时系统还是分时系统及系统是否可裁减等因素。

    • 配套开发工具的选择。有些实时操作系统(rtos)只支持该系统供应商的开发工具。也就是说,还必须向操作系统供应商获取编译器、调试器等。有些操作系统使用广泛且有第三方工具可用,因此,选择的余地比较大。

    • 操作系统的移植难易程度。操作系统到硬件的移植是一个重要的问题。它是关系到整个系统能否按期完工的一个关键因素,因此要选择那些可移植性程度高的操作系统,从而避免操作系统难以向硬件移植而带来的种种困难,加速系统的开发进度。

    • 操作系统的内存需求如何。均衡考虑是否需要额外 ram 或 eeprom 来迎合操作系统对内存的较大要求。有些操作系统对内存的要求是与目标相关的。如 tornado/vxworks,开发人员能按照应用需求分配所需的资源,而不是为操作系统分配资源。从需要几 k 字节存储区的嵌入设计到需求更多的操作系统功能的复杂的高端实时应用,开发人员可任意选择多达 80 种不同的配置。

    • 操作系统附加软件包。是否包含所需的软件部件,如网络协议栈、文件系统、各种常用外设的驱动等。

    • 操作系统的实时性如何。实时性分为软实时和硬实时。有些嵌入式操作系统只能提供软实时性能,如 microsoft windows ce 2.0 是 32 位,windows 兼容,微内核,可伸缩实时操作系统,可以满足大部分嵌入式和非嵌入式应用的需要。但实时性不够强,属于软实时嵌入式操作系统。

    • 操作系统的灵活性如何。操作系统是否具有可剪裁性,即能否根据实际需要进行系统功能的剪裁。有些操作系统具有较强的可剪裁性,如嵌入式 linux 、 tornado/vxworks 等。

        (2)编程语言的选择。在选择编程语言时,也需要做多方面的考虑:

    • 通用性。随着微处理器技术的不断发展,其功能越来越专用,种类越来越多,但不同种类的微处理器都有自己专用的汇编语言。这就为系统开发者设置了一个巨大的障碍,使得系统编程更加困难,软件重用无法实现,而高级语言一般和具体机器的硬件结构联系较少,比较流行的高级语言对多数微处理器都有良好的支持,通用性较好。

    • 可移植性。由于汇编语言和具体的微处理器密切相关,为某个微处理器设计的程序不能直接移植到另一个不同种类的微处理器上使用,因此,移植性差。高级语言对所有微处理器都是通用的,因此,程序可以在不同的微处理器上运行,可移植性较好。这是实现软件重用的基础。

    • 执行效率。一般来说,越是高级的语言,其编译器和开销就越大,应用程序也就越大、越慢。但单纯依靠低级语言,如汇编语言来进行应用程序的开发,带来的问题是编程复杂、开发周期长。因此,存在一个开发时间和运行性能之间的权衡。

    • 可维护性。低级语言如汇编语言,可维护性不高。高级语言程序往往是模块化设计,各个模块之间的接口是固定的。因此,当系统出现问题时,可以很快地将问题定位到某个模块内,并尽快得到解决。另外,模块化设计也便于系统功能的扩充和升级。

    • 基本性能。在嵌入式系统开发过程中使用的语言种类很多,比较广泛应用的高级语言有 Ada、C/C++、Modula-2 和 Java 等。Ada 语言定义严格,易读易懂,有较丰富的库程序支持,目前,在国防、航空、航天等相关领域应用比较广泛,未来仍将在这些领域占有重要地位。C 语言具有广泛的库程序支持,是嵌入式系统中应用最广泛的编程语言,在将来很长一段时间内仍将在嵌入式系统应用领域中占重要地位。 C++是一种面向对象的编程语言,在嵌入式系统设计中也得到了广泛的应用,如 GNU C++。Visual C++是一种集成开发环境,支持可视化编程,广泛应用于 GUI 程序开发。但 C 与 C++相比,C++的目标代码往往比较庞大和复杂,在嵌入式系统应用中应充分考虑这一因素。

        (3)软件开发过程。嵌入式软件的开发过程不同于一般通用软件的开发过程,主要有如下步骤:

    • 选择开发语言,建立交叉开发环境;

    • 根据详细设计说明编写源代码,进行交叉编译、链接;

    • 目标代码的重定位和下载;

    • 在宿主机或目标机调试、验证软件功能;

    • 进行代码的优化。

        (4)软件开发文档。在嵌入式产品的开发设计过程中,开发阶段完成系统产品的实现,这一阶段同时需要完成一系列的文档,这些文档对完成产品设计、维护相当重要,这些文档分别为技术文件目录、技术任务书、技术方案报告、产品规格、技术条件、设计说明书、试验报告、总结报告等。

     

    8 系统集成与测试

        通常嵌入式系统测试主要包括软件测试、硬件测试、单元测试三个部分。

        一般系统的硬件测试包括可靠性测试和电磁兼容性测试,关于电磁兼容性目前已经有了强制性国内和国际标准。

        嵌入式系统软件测试方法和原理跟通用软件的测试基本一致,软件测试时,一般需要测试实例或测试序列,序列有两种来源:一种是需要用户进行设计,另一种是标准的测试序列。无论哪种测试实例,都要求实例能够高概率发现更多的错误,但在测试的内容上有些差别:

        (1)嵌入式软件必须长时间稳定运行。

        (2)嵌入式软件一般不会频繁地版本升级。

        (3)嵌入式软件通常使用在关键性的应用中。

        (4)嵌入式软件必须和嵌入式硬件一起对产品的故障和可靠性负责。

        (5)现实世界的条件是异步和不可预测的,使得模拟测试非常困难。

        由于这些差别,使得嵌入式系统软件测试主要集中在以下 4 个不同的方面:

        (1)因为实时性和同时性很难同时满足,所以大多数测试集中于实时测试。

        (2)大多数实时系统都有资源约束,因此需要更多的性能和可用性测试。

        (3)可以使用专用实时跟踪工具对代码覆盖率进行测试。

        (4)对可靠性的测试级别比通用软件要高得多。

        另外,性能测试也是设计嵌入式系统中需要完成的最主要的测试活动之一,对嵌入式系统有决定性的影响。

        由于嵌入式系统的专用性特点,系统的硬件平台和软件平台多种多样,每种都针对不同的应用而专门设计,因此,应用软件在各个平台之间很少具有通用性,并且嵌入式系统的更新换代速度相对较快。为了保护已有的投资、充分利用现有的软件资源和加快产品研制速度,软件的移植在嵌入式领域变得非常频繁。

    展开全文
  • 嵌入式系统(期末重点)

    千次阅读 2019-04-18 21:45:20
    1.嵌入式系统的定义 以应用系统为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 2.嵌入式系统与桌面通用系统的区别 任务是专用而确定的;支持...

    第一章 绪论

    1.嵌入式系统的定义1

    以应用系统为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。

    2.嵌入式系统与桌面通用系统的区别1

    1. 任务是专用而确定的;支持大量、需求多样的应用程序。
    2. 对实时性要求高
    3. 操作系统一般是实时操作系统
    4. 高可靠性,长时间无人值守,环境恶劣。
    5. 有功耗约束
    6. 可用资源少,开发需要专用工具和特殊方法。
    7. 嵌入式系统开发是一项综合的计算机应用技术。

    3.嵌入式系统的发展

    嵌入式系统的出现和兴起
    嵌入式系统走向繁荣,软件、硬件日臻完善。
    嵌入式系统应用走向深化发展

    4.嵌入式系统的应用

    工业控制:工控设备、智能仪表、汽车电子
    军事国际:军事电子
    消费电子:信息家电、智能玩具、通信设备、移动存储
    网络:网络设备、电子商务

    5.嵌入式系统的构成1

    见珂珂

    6.最小硬件系统

    见珂珂

    7.嵌入式处理器1

    MPU:嵌入式微处理器
    MCU:嵌入式微控制器
    DSP:嵌入式DSP处理器
    SOC:嵌入式片上系统

    第二章

    1.嵌入式系统设计基本流程1

    需求分析:整个系统需要做什么
    详细说明:系统的设计要求具体化
    结构设计:系统进行整体架构上的设计
    组件设计:系统各模块进行设计并调试
    系统集成:整个系统进行测试,检测是否达到需求分析的要求

    2.需求分析

    嵌入式系统设计的根本,任务是确定用户对应用系统的设计要求和设计指标。
    功能需求、性能需求、环境需求、可靠性需求、安全性需求、用户界面需求、资源使用需求、开发成本需求、人机交互需求、开发进度需求。

    3.结构设计1

    对系统进行整体架构上的设计,包括软硬件设计两方面。
    硬件方面:确定整体的结构和电路中主要的芯片选型。
    软件方面:确定所要使用的软件开发平台、涉及的相关驱动、协议等。

    4.组件设计

    对系统各个模块进行具体的设计
    功能模块与原理图设计
    PCB设计
    软硬件调试

    5.系统集成

    主要目的是在系统的各个组件设计完成之后,得到一个可以运转的原始系统,并利用这个系统进行集成测试。

    6.嵌入式设计流程模型1

    • 瀑布模型:设计过程自上而下。具有时间上的顺序性和依赖性。
      优:开发流程简单明确,便于制定开发计划
      缺:缺乏灵活性,各流程之间有很强的依赖性

    • 逐步求精模型:开发人员根据用户提出的基本需求快速开发一个产品原型开发者再根据用户反馈的意见修改原型设计,如此反复,不断完善和丰富系统功能,直到系统最终完成。
      优:开发风险低、开发流程适合实际开发过程,需求经过多次沟通可以得到明确、为用户需求的改变提供了充分的余地。
      缺:开发周期长、成本高、资源规划管理不便。

    • 螺旋模型:开发流程顺时针方向,依次经历需求、设计、测试三阶段
      优:支持用户需求的动态变化、保持系统性、阶段性,利用原型评估降低开发风险。
      缺:如果每次迭代效率不高,次数增多,增加成本并延长开发时间。

    第三章

    1.CISC复杂指令集1

    具有大量的指令和寻址方式,指令长度可变。
    8/2原则:80%的程序只使用20%的指令。
    大多数程序只使用少量的指令就能够运行。

    2.RISC精简指令集1

    只包含最有用的指令,指令长度固定。
    确保数据通道快速执行每一条指令。
    使CPU硬件结构设计变得更简单。

    3.CISC和RISC的对比1

    类别 CISC RISC
    指令系统 指令数量很多 较少,通常少于100
    执行时间 有些指令执行时间很长,如整块的存储器内容拷贝;或将多个寄存器内容拷贝到存储器 没有较长执行时间到指令
    编码长度 编码长度可变,1-15字节 编码长度固定,通常为4个字节
    寻址方式 寻址方式多样 简单寻址
    操作 可以对存储器和寄存器进行算术和逻辑操作 只能对寄存器进行算术和逻辑操作,Load/Store体系结构
    编译 难以用优化编译器生成高效的目标代码程序 采用优化编译技术,生成高效的目标代码程序

    4.冯诺伊曼体系结构

    由一个中央处理单元(CPU)和一个存储器组成。数据和指令都存在一个存储器中的计算机。

    5.哈佛体系结构计算机

    为数据和程序提供了各自独立的存储器,程序计数器只指向程序存储器而不指向数据存储器。

    6.流水线技术1

    基本步骤:取指——译码——执行
    几个指令可以并行执行
    提高了CPU运行的效率
    内部信息流要求通畅流动

    7.指令流水线——ARM为例

    为增加处理器指令流的速度,ARM7系列使用3级流水线,允许多个操作同时处理,比逐条指令执行要快。

    ARM Thumb 操作 举例
    PC PC Fetch 从存储器中读取指令
    PC-4 PC-2 Decode 解码指令
    PC-8 PC-4 Execute 寄存器读(从寄存器Bank);移位及ALU操作;寄存器写(到寄存器Bank)

    PC指向正被取的指令,而非正在执行的指令。

    8.ARM存储数据类型

    1. 8位有符号和无符号字节
    2. 16位有符号和无符号字节
    3. 32位有符号和无符号字节
      ARM指令上32位的字,必须以字(4字节)为单位边界对齐。
      Thumb指令是16位半字必须以2字节为单位边界对齐。

    9.ARM存储格式1

    大端存储和小端存储看书P44例题

    10.开发环境1

    见珂珂

    11.嵌入式系统的调试1

    • 模拟调试:调试工具和待调试的嵌入式软件都在主机上运行,由主机提供一个模拟的目标运行环境,可以运行语法和逻辑上的调试。
      优:简单方便,不需要目标板,成本低。
      缺:功能非常有限,无法实时调试。

    • 软件调试:主机和目标板通过某种接口(通常是串口)连接,主机上提供调试界面,待调试软件下载到目标板上运行。
      优:纯软件,价格较低,简单,软件调试功能较强。
      缺:需要事先烧制Monitor并且目标板工作正常,功能有限,特别是硬件调试能力较差。

    • BDM/JTAG调试:有一个硬件调试器,与目标板通过BDM,JTAG等调试接口相连,与主机通过串口、并口、网口或USB相连。待调试软件通过BDM/JTAG调试器下载到目标板上运行。
      优:方便、简单,无须制作Monitor,软硬件均可调试。
      缺:需要目标板,且目标板工作基本正常(至少MCU工作正常),仅适用于有调试接口到芯片。

    • 全仿真调试:完全取代目标板上的MCU,因而目标系统对开发者来说完全是透明的、可控的。
      优:功能非常强大,软硬件均可做到完全实时在线调试。
      缺:价格昂贵。

    第四章

    ARM

    微处理器是整个系统的核心,通常由三大部分组成:控制单元,算术逻辑单元和寄存器。

    图见珂珂

    ARM7 TDMI 1

    基于ARM体系结构V4版本,是目前低端的ARM核。具有广泛的应用,其最显著的应用是数字移动电话。
    支持32位寻址范围,并弥补了ARM6不能在低于5V电源电压下工作的不足。

    图见珂珂

    处理器状态

    • ARM状态:32位,这种状态下执行的是字方式的ARM指令。
    • Thumb状态:16位,这种状态下执行的是半字方式的ARM指令。

    两个状态切换并不影响处理器模式或寄存器内容。

    处理器7种模式1

    处理器模式 说明 备注
    用户 正常程序执行模式 不能直接切换到其它模式
    系统 运行操作系统的特权任务 与上类似,但有切换等特权
    快中断 支持高速数据传输及通道处理 FIQ异常响应进入此模式
    中断 用于通用中断处理 IRQ异常响应时
    管理 操作系统保护模式 系统复位和软件中断响应时
    中止 支持虚拟内存和存储器保护 在ARM7TDMI没有大用处
    未定义 支持硬件和处理器的软件仿真 未定义指令异常响应时进入

    特权模式1

    除用户模式外,其他模式均为特权模式。
    ARM内部寄存器和一些片内外设在硬件上只允许特权模式下访问。可以自由切换处理器模式。

    异常模式1

    除用户、系统模式除外,这五种模式称为异常模式。
    它们可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。

    R14 1

    • R14寄存器(LR)与子程序调用
    1. 程序A执行过程中调用程序B。
    2. 程序跳转至标号Label,执行程序B。同时硬件将将“BL Label”指令的下一条指令所在地址存入R14(LR)
    3. 程序B执行最后,将R14寄存器的内容放入PC,返回程序A。
    • R14与异常发生
      异常发生时,程序要跳转至异常服务程序,与返回地址的处理子程序调用类似,都是由硬件完成的。

    • R14寄存器注意要点
      当异常嵌套时,这些异常之间可能会发生冲突。

    R15 1

    寄存器R15为程序计数器(PC),它指向正在取指的地址。

    CPSR、SPSR 1

    寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器SPSR“程序状态保存寄存器”可以被访问。每种异常都有自己的SPSR,在进入异常的它保存CPSR的当前值,异常退出时可通过它恢复CPSR。

    R13 1

    寄存器R13为SP。

    异常入口/出口汇总

    见kk

    异常指令

    快速中断 SUBS PC,R14_fiq,#4
    中断请求 SUBS PC,R14_irq,#4
    中止—预取指中止 SUBS PC,R14_abt,#4
    中止—数据中止 SUBS PC,R14_abt,#8
    软件中断指令 MOVS PC,R14_svc
    未定义的指令 MOVS PC,R14_svc

    异常优先级1

    复位——数据中止——FIQ——IRQ——预取中止——未定义指令——SWI

    复位1

    当nRESET信号被拉低时(一般外部复位引脚电平的信号变化和芯片的其它复位源会改变这个内核信号),ARM7 TDMI处理器放弃正在执行的指令。
    复位后,除PC和CPSR之外的所有寄存器的值都不确定。

    第五章

    寻址方式分类

    见书

    ARM指令集——基本格式

    展开全文
  • 嵌入式软件设计设计模式

    千次阅读 2019-04-21 17:24:31
    嵌入式软件设计过程中,也会用到一些设计模式,所以说设计模式并不是面向对象语言的专利,下面我通过查资料以及自己的思考总结的几种适合嵌入式软件开发的设计模式,仅供参考。具体问题还要具体的分析。 1.设计...

    前言

    在嵌入式软件设计过程中,也会用到一些设计模式,所以说设计模式并不是面向对象语言的专利,下面我通过查资料以及自己的思考总结的几种适合嵌入式软件开发的设计模式,仅供参考。具体问题还要具体的分析。

    1.设计模式之适配器模式

    适配器模式是一种比较常用的软件设计模式(有时候叫做包装模式)。它将对象的接口转换成对于客户端(或者高层模块)来说比较容易使用的接口。通常来说,适配器用于应用程序编程接口(API)之上,以隐藏丑陋的接口或者可能发生变化的库。

    很多硬件接口像笨拙的软件接口一样。可以把每个驱动程序设计为一个适配器。如果把驱动程序(即使不是open、close、read、write、ioctl)设计成通用的接口,那么当硬件接口改变的时候就不需要改变软件了。在理想的情况下可以切换整个平台而只需要修改底层实现。如下图:在这里插入图片描述
    注意,驱动程序是可以堆叠的。例如:显示组件调用闪存,接着闪存调用SPI进行通信。当调用显示组件的open方法的时候,该方法调用其子系统的初始化代码,在这个初始化代码中调用闪存的open方法,然后这个方法调用SPI驱动程序的open方法。这里有三个层次的适配器是为了提高软件的可移植性和可维护性。如果对于每个层次的接口都是一致的,那么上层的代码就不可能变化了。

    2.设计模式之单例模式

    要确保系统中每个部分都可以访问相同的一个对象,我们可以使用单例模式
    当需要一个类有且仅有一个实例的时候,单例模式是很常用的。在一个面向对象的语言中,单例模式很常用。其负责解析创建对象的请求并保持其独立的状态。对于资源的访问是全局的,但所有的访问必须经过这个唯一的实例。单例类中没有公共构造函数。在C++中类似于这样:

    class Singleton
    {
    	public:
    	static Singleton *Instance()
    	{
    		if(mInstance == 0)
    		{
    			mInstance = new Singleton;
    		}
    		return mInstance;
    	}
    	protected:
    	Singleton();//除了这个类本身没有其他类可以创建这个实例
    	private:
    	static Singleton *mInstance = 0;
    }
    

    比如对于日志系统来说,单例模式可以让整个系统通过唯一的实例来访问日志对象。通常当有一个单一的资源在系统的多个部分之间共享的时候,单例可以比较容易的避免冲突。在面向对象的语言中,单例也允许延迟资源分配和初始化,这样那些从来没有使用的模块就不会消耗资源。

    3.设计模式之命令模式

    这个模式的总体目标是将命令处理过程与实际要执行的动作解耦合。命令模式展示了一个执行操作的接口。任何时候,当你遇到这样一种情形,系统中的一部分需要对另一部分发起请求,但中介对象不需要知道这些请求的内容时,请考虑命令模式。
    这个模式后续我会更新一个例子来说明。

    4.设计模式之门面模式

    可以想象,随着产品特性的扩展,IO接口变得越来越复杂。从长远来看,我们要隐藏每个子系统的细节。有一个标准的软件设计模式叫做门面模式(facade pattern),可以为一段代码提供一个简单的接口。门面模式旨在让软件库简单易用。
    适配器模式是在两层之间充当转换的角色,门面模式则是通过简化底层的接口来做到这一点。隐藏子系统的实现细节是良好设计中很重要的一部分。它可以使代码更容易阅读,更便于测试。并且调用代码不依赖于子系统的内部实现,因此底层代码可以修改而门面则保持不变。
    增加一个门面模式通常会使代码大小变大,但是从可调试性和可维护性角度来说,这样是值得的。

    展开全文
  • 嵌入式硬件系统设计与开发实例详解.pdf
  • 嵌入式毕业设计题目

    热门讨论 2012-12-16 23:55:01
    包含了很多的嵌入式方向的毕业设计,Linux ,arm 等实用毕业设计课题
  • 嵌入式设计是什么,让你深入了解

    千次阅读 2018-05-27 16:24:04
    如今物联网技术可以说是发展很快的了,随着物联网与人工智能的发展,嵌入式也在发展着,对于一个刚刚入门的初学者来说,嵌入式设计是什么意思哪?在知道嵌入式设计师什么的时候,就得先知道嵌入式设计里面的嵌入式是...
  • 1、嵌入式系统的定义(1)定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。(2)嵌入式系统发展的4个阶段:无操作系统阶段、简单...
  • 嵌入式系统设计 (考试题+答案)

    千次阅读 2020-03-13 13:40:33
    第1章 嵌入式系统概述 嵌入式系统的概念是什么?(教材P11-1) 用于控制、监视或者辅助操作机器和设备的装置 嵌入式系统的特点是什么?(教材P11-2) 1. 系统内核小 2. 专用性强 3. 运行环境差异大 4. 可靠性...
  • 单片机和嵌入式设计的区别

    万次阅读 2017-01-11 18:43:18
    单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈本人对这两个概念的理解和感悟。 首先明确概念,什么是单片机,单片机是一种...
  • 全国大学生嵌入式设计大赛

    千次阅读 2010-02-26 20:02:00
    2010年1月,第六届“博创杯”全国大学生嵌入式设计大赛再次拉开序幕。大赛在中国科学院、中国工程院王越院士,中国工程院倪光南院士等著名科学家的关怀和呵护下,规模日益壮大,影响不断加强,已经发展成为嵌入式...
  •   工作三年有余,一直在搞嵌入式。准确的说从大学开始就一直在搞,已经到了病入膏肓的地步。此间总是不时出现一些奇怪的想法:人家搞Java、搞C#的动不动就是什么架构/框架的,搞了这么久的的嵌入式,我到底搞了...
  • 面向对象设计讲究分开和有区别,函数和过程是程序的基本单元,数据结构是结构化编程的重要概念。面向对象编程时结构化和函数的正交过程,类将数据和数据上的执行过程组合在一起。类的两个特性:数据(属性)和行为...
  •  设计内容可涵盖:物联网应用(城市交通,医疗,港口物流,环境监测,多网融合等)、消费类电子、数字电视、GPS导航、智能手机、数字家电、多媒体、视频编码解码、图像处理、安防监控、无线通讯、信息识别、...
  • 嵌入式系统设计师教程高清pdf版

    热门讨论 2011-03-02 15:49:10
    全书共6章,分别对嵌入式系统基础知识、嵌入式微处理器与接口设计嵌入式软件与操作系统、嵌入式软件程序设计嵌入式系统设计与维护等知识进行了详细的讲解,最后介绍了一个典型的嵌入式系统设计案例。. 本书内容...
  • C嵌入式编程设计模式

    千次阅读 2017-02-05 18:00:06
    《C嵌入式编程设计模式》 Bruce Powel Douglass著 刘旭东译C嵌入式编程设计模式标签: 读书笔记C嵌入式编程设计模式
  • 嵌入式系统设计步骤

    2017-06-07 18:14:35
    a. 功能分析 b. 设计方案 c. 硬件设计 d. 软件设计
  • 英文名《Design Patterns for Embedded Systems in C》中文名《C嵌入式编程设计模式》这本书的源代码,在百度上一直没找到,跟大家分享了
  • 嵌入式系统设计师历年上午下午真题以及详细完整的解析。
  • 嵌入式软件架构设计

    万次阅读 2018-08-31 11:49:26
    摘要 在开发中一直觉得好的软件架构可以做到事半功倍,而且可以做到代码复用和移植。 但是如果没有架构或者说架构很差,那么移植将是很痛苦的事,特别是对不熟悉改功能的人来讲还不如自己写呢,移植不对那将是很...

空空如也

1 2 3 4 5 ... 20
收藏数 176,251
精华内容 70,500
关键字:

嵌入式设计