嵌入式通信系统
上QQ阅读APP看书,第一时间看更新

2.2.1 嵌入式通信系统的开发过程

嵌入式通信系统是专用的计算机系统,运行在特定的目录环境中,需要同时满足功能和性能等方面的要求。在嵌入式通信系统的开发过程中,要考虑实时性、可靠性、稳定性、可维护性、可升级、可配置、易于操作、接口规范、抗干扰、物理尺寸、重量、功耗、成本、开发周期等多种因素。在建立一个完整的嵌入式系统或者产品时必须要考虑一些设计的重点。

良好的设计方法在嵌入式通信系统的开发过程中是必不可少的。首先,好的方法有助于规划一个清晰的工作进度,避免遗漏重要的工作,例如性能的优化和可靠性测试对于一个合格的嵌入式产品而言是不可或缺的。其次,采用有效的方法可以将整个复杂的开发过程分解成若干可以控制的步骤,通过现代一些先进计算机辅助设计工具的辅助,可以按部就班、有条不紊地完成整个项目。最后,通过定义全面的设计过程以使整个开发团队的各个成员更好地理解自身的工作,方便成员之间相互交流和协作。在嵌入式通信系统的开发过程中,团队的概念至关重要。图2-1所示嵌入式通信系统开发的一般过程。嵌入式通信系统设计过程一般由5个阶段构成:需求分析、体系总体设计、硬件/软件设计、系统集成和系统测试。

图2-1 嵌入式通信系统开发的一般过程

1.需求分析与规格说明阶段

需求分析阶段需要确定设计任务和设计目标,并提炼出设计规格说明书,作为正确设计指导和验收的标准。区分需求和规格说明是必要的,因为在客户关于所需系统的描述和体系结构系统设计师所需的信息之间存在极大的距离。

嵌入式通信系统的客户通常不是嵌入式通信系统的设计人员,甚至也不是最终产品的设计人员,他们对嵌入式通信系统的理解是建立在他们想象的与系统之间的交互的基础上的,对系统可能有一些不切实际的期望,或者是使用他们自己的话而不是专业术语来表达其需求。将客户的描述转化为系统设计者的描述的结构化方法就是从客户的需求中获取一组一致性的需求,然后从中整理成正式的规格说明。

设计系统之前,必须先了解需要设计哪些部分,所以设计过程的首要步骤就是捕捉有关系统与组件建立的消息。通常处理的过程分为两个阶段:第一阶段是收集客户所描述的消息,整理成需求列表;第二阶段就是把这些需求进一步萃取之后,定成规格,这些规格就是系统架构设计的数据。需求分析是指从用户那里搜集系统的非形式描述。以此为基础经过进一步提炼得到系统的规格说明,并以此来设计系统的体系结构和系统构件。

通常,和关心用户仅了解实际使用问题和需要具备的功能,但是往往不能完整、准确地表达这种需求,更不清楚怎样利用计算机去实现所需的功能。为了对系统进行准确无误地定义,要求开发人员和用户之间充分进行交流,开发人员需要详细考察,最终得出经用户确认的、明确的系统实现逻辑模型。

需求可分为功能部分和非功能部分。功能性需求是指系统必须要有哪些功能;非功能性需求则是指其他因素,比如大小、价格、设计时间等。常见的非功能性需求包括:

①性能:系统的速度是系统可用性与最后价格的主要考虑对象,所表现出来的性能也往往包含软件程序使用状况,与某些操作必须在期限时间内完成的综合表现。

②成本:系统最后的价格是很重要的因素,成本主要来自两方面:制造成本,包括零件价格与组装成本;客户委托制造成本,包括人力与设计系统的其他成本。

③实体大小与重量:外观的大小和应用有很大的关系,以工业控制系统中组装在线的机器来说,大小必须和机架相同,否则会装不进去。至于手持式的设备,也必须考虑重量,否则会有超重的情况。

④电力消耗:对于使用电池的系统来说,必须注意电力消耗的问题,否则产品使用的时间会很短,在使用上就不够方便。

确认需求最好的方法是建立模型。模型可以使用原始数据来模拟功能,并可以在计算机上运行。模型还应让用户了解系统是如何工作的,以及用户如何与系统交互。通常系统的非功能模型可以让用户了解系统的特性。

对一个大型的系统进行需求分析是一件烦琐的工作,可以从先获取相对少量的、简单的信息入手。表2-1所示为一个简易需求表格样本,可以利用它思考系统的基本特性,并且整理成列表。

表2-1 需求表格样本

①名称:给项目取一个好的名称,可以使设计目的更加明确,也便于交流、讨论时使用。

②目的:用最精练的语言来描述清楚系统需要满足的需求。

③输入和输出:系统的输入和输出包含了大量的细节,如数据类型,包括模拟信号、数字信号、机械输入等;数据特性,包括周期性或非周期性数据、用户的输入、数据位数等;I/O设备类型,包括按键、ADC、显示器等。

④功能:功能的描述可以从对输入到输出的分析中得出,如当系统接收到输入时,执行哪些动作,用户通过界面输入的数据如何对该功能产生影响,不同功能之间如何相互作用。

⑤性能:系统控制物理设备或者处理外界输入的数据都需要花费一定的时间。在大部分情况下,嵌入式通信系统在计算时间上都有要求,因此从需求分析开始,这种性能的要求就必须明确,并在执行过程中加以认真考虑,以便随时检查系统能否满足其性能要求。系统的处理速度通常又是系统实用性和成本的主要决定因素。在大多数情况下,软件的性能在很大程度上决定了系统的性能。

⑥生产成本:产品的成本会影响其价格。成本包含两个主要部分:生产成本,包括购买构件以及组装费用等;不可再生的工程成本,包括人力成本以及设计费用等。生产成本主要包括的是硬件成本。通过对硬件成本的估计,可以大略估计产品形成后的价格;或者基于产品最终的粗略价格来计算构建系统可以使用的硬件构件,因为价格最终会影响系统的体系结构。

⑦功耗:由电池供电的系统必须对功耗问题认真考虑。而系统的功耗需要在设计开始时就要至少有一个粗略的了解。通常,基于这种了解可以使开发者决定系统是采用电池供电还是采用市电。

⑧物理尺寸和重量:产品的物理尺寸和重量因使用领域的不同而不同。例如,对飞机上的电子设备,其重量应严格限制。又如,手持设备对系统的物理尺寸和重量都有严格限制。对系统的物理尺寸和重量有一定的了解有助于系统体系结构的设计。

最后需要注意的是,这些需求的内容是不是有相互冲突的状况,例如模块之间的接口不兼容或者系统操作的不合理状况。综合来说,一个好的需求文件应该具有以下几项特性:

(1)正确性:一个需求描述不可以误解顾客所需,也不应该过分描述顾客不需要的需求。

(2)精确性:需求文件应该做清楚的描述,而不是笼统的说明。

(3)完整性:所有需求都应该记录。

(4)一致性:一个需求不能和另一个需求相矛盾。

(5)可证明性:所有的需求都应该有方式可以证明这行需求是合理的,像是文件里就不应该出现“亲和的界面”这类文字,因为无法定义什么叫作亲和的界面。

(6)可修改性:需求文档应结构化,以便在不影响一致性、可检验性等情况下可以被修改以适应变化的需求。

(7)可追踪性:每份文件都应该可以追踪,包括为什么会有这样的需求,彼此需求间的相关性,这些需求是否可能实现,以及最后是否满足这些要求。

如何界定需求呢?在大公司里,销售部门会帮忙反映市场的需要,或者去咨询顾客,然后将这些意见汇整进行分析。如果是顾客直接找上门,就需要和顾客进行访谈,以了解他们的期望。如果顾客能够给设计者一个简单的样品,将可以使设计者更清楚应该要设计出什么样的产品。或者设计者先做出一个雏形,请销售部门进行展示或者进行意见调查,然后再将结果进行分析来决定需求的内容。

规格说明是需求分析的进一步细化,实际上可以看作是甲乙双方的合同。系统开发过程中可能碰到各种不同类型的由于不明确的规格说明而导致的问题。如果行为在规格说明中不明确,就可能导致功能的错误。如果规格说明不完整,那么所开发建造的整个系统体系结构可能就不能完全达到客户的要求。

2.体系结构设计阶段

体系结构设计阶段描述系统如何实现所述的功能性和非功能性需求,体系结构描述必须同时满足功能上和非功能上的需求。必须符合成本、速度、功率和其他非功能上的约束,包括对硬件、软件、执行装置功能的划分以及系统的硬件、软件选型等。逐步把系统体系结构细化为硬件和软件体系结构。首先集中考虑系统框图中的功能元素,然后在建造硬件和软件体系结构时考虑非功能约束。

如何知道硬件和软件体系结构实际上符合速度、成本等方面的限制呢?

①必须有某种方式估算框图中的构件,如移动地图系统中的搜索和绘制功能的特性。

②精确估算源于经验,既有一般的设计经验也有类似系统的特定经验。

3.构件设计阶段

可以直接使用一些标准构件,构件通常包括硬件和软件两部分。如果采用标准数据库,就可以用标准例程对该数据库进行访问。这些数据库中的数据不仅使用预定义的格式,而且被高度压缩以节省存储空间。在这些访问函数中使用标准软件不仅节约设计时间,而且有可能较快地实现像数据解压缩这样的专用函数。但很多时候必须自己设计构件,如PCB、做大量定制的函数等。在设计期间,经常会利用一些计算机辅助设计工具和开发平台,并且对每个构件都需要进行功能和性能等方面的测试。嵌入式系统的设计还要求有较高的设计技能,在设计软件时要非常小心地读/写存储器以减小功耗。由于存储器访问是主要的功耗来源,因此存储器事务必须精心安排以避免多次读取同样的数据。

4.系统集成阶段

把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。系统集成一般是指硬件与软件的集成,实际上集成的对象应包括:嵌入式操作系统、板级支持包(BSP)、硬件、软件和实时特性。实时特性对嵌入式系统来说是相当重要的,硬件可以像设计所要求的一样操作,软件也可以像编写及调试所要求的一样运行,而产品却可能会由于实时性问题依然无法运行。

使用商业标准硬件平台,如单板机,厂商会提供板级支持包,没有板级支持包,嵌入式操作系统就不能在目标平台上运行。就算拥有设计良好的板级支持包,当嵌入式操作系统运行时仍有许多问题亟待解决。由于嵌入式操作系统是嵌入式产品中最重要的部分,任何关于工具需求的讨论都必须在嵌入式操作系统的背景中进行。

假设在通用计算机上调试C语言程序时,使用的是GNU编译器和调试器:GCC和GDB。当停止应用程序检查变量值时,计算机并没有停下来,只是被调试的应用软件停止了运行,而计算机的其余部分仍像刚才一样正常运行。如果程序破坏了某个UNIX平台,计算机就会转储此平台的核心映像,但计算机本身仍在正常运行。

如果没有采用嵌入式操作系统,当程序崩溃后,嵌入式系统也就停止了运行,直到重新开机或按下复位键。如果系统采用了嵌入式操作系统,并且开发工具可以在嵌入式操作系统环境下使用,就极有可能具有中断正在运行的进程,并且按照在调试主机上的调试过程进行调试的能力。尽管是正在调试的某个处于调试器控制之下的进程,嵌入式操作系统也能保持其剩余部分最大限度地正常工作。由于要完成以上工作非常困难,所以嵌入式操作系统开发商要精心制作在嵌入式操作系统环境中支持调试功能的工具,并以独一无二的定位把产品提供给用户。因此,一旦决定采用哪种嵌入式操作系统,就会在整个嵌入式系统的设计开发过程中产生连锁反应。当将嵌入式操作系统、应用软件与硬件集成到一起时,这种影响会最大限度地表现出来。

如果开发工具设计得很好,就能最大限度地降低使用嵌入式操作系统的复杂度;如果没有合适的开发工具,调试采用嵌入式操作系统的嵌入式系统是十分困难的。

5.系统软件测试阶段

软件测试是软件生存期中的一个重要阶段,是保证软件质量的关键步骤,1983年IEEE提出的软件工程术语中给软件测试做出如下定义:“使用人工或自动手段运行或测定某个软件系统的过程,其目的在于检验软件系统是否满足规定的需求或弄清预期结果与实际结果之间的差别”。这个定义明确指出软件测试的目的是为了检验软件系统是否满足需求。也就是说,软件测试是在软件投入运行前,对软件需求分析、设计规格说明和编码进行最终复审的活动。