模块化的嵌入式软件设计分析.docx
文本预览下载声明
【Word版本下载可任意编辑】
PAGE
1 - / NUMPAGES 1
模块化的嵌入式软件设计分析
一、嵌入式软件编程语言 嵌入式软件通常采用汇编、C语言、C++语言开展编写。从三种语言执行效率上开展比较则汇编、C语言次之、C++语言慢,从三种语言模块化编程的难易程度上开展比较则C++语言、C语言次之、汇编差,在大多数情况下,嵌入式软件多采用C语言开展编写,原因如下: 1.C语言是面向过程的语言,代码移植性和可读性远高于汇编;2.大多数嵌入式软件开发环境都提供汇编和C语言编译器,而C++语言编译器有可能不提供;3.三种语言相比C语言学习起来较容易。 由于嵌入式软件多采用C语言编写,因此本文着重讲述如何用C语言开展模块化编程。 二、软件模块化设计概述 面对越来越复杂的软件开发任务,人们提出了各种软件设计的模型。从用户需求和系统要实现的任务功能出发,把大型的软件划分为相对较小的模块。模块化设计的是模块的独立性(即高内聚,低偶合),主要包括功能独立性和构造独立性,这使得软件开发的分工易于实现。 模块化设计有如下优点: 1.提高代码重复利用率; 2.方便修改和维护; 3.便于调试排错; 4.易于扩展。 软件设计的模块化降低了设计开发的复杂度并使设计步骤清晰,也有利于提高软件健壮性、灵活性、可复用性等。开展模块化软件设计时应综合考虑模块的可分解性、可结合性、可理解性、连续性及模块保护几方面的要求。 模块的可分解性要求把一个大的、复杂的问题分解为一些小的、简单的问题,通过解决各个小问题来解决大问题;模块的可结合性要求不同时期、不同项目、不同环境下设计的模块应能自由地结合在一起构成新的系统;模块的可理解性要求通过某种方法设计的每个模块不需要参考相邻的模块就能被人看懂;模块的连续性要求通过某种方法设计出的模块,在需求发生变化时只影响一个或少数几个模块;模块保护则要求通过某种方法设计出的模块,在运行期间发生的错误被限制在这个模块内部或仅仅传播到少数几个摸块。 模块化设计时应将上述要求有机地结合起来。在保证正确性和健壮性的根底上,应尽可能提高软件的可扩大性和可复用性。 三、使用C语言开展模块化代码编写 通过模块化所实现的软件是由被加工的对象及其在该对象上所实现的有关功能构成。在开发软件的过程中,一般采用两种方法:其一是把重点放在功能的实现上,其二是把重点放在对象上。基于功能的软件开发方法中,其功能实现中考虑的“过程”和“操作”是多变和不稳定的,程序构造围绕事先确定好的功能,使得功能的扩大、删除及修改变得相当困难。这样的软件构造脆弱、功能集中、耦合度大,很难满足可扩大性、可维护性的要求,软件的重用性也差。 面向对象的程序设计中考虑的“对象”和“数据构造”是相对稳定的。尽管功能是千变万化的,但一个问题空间中的对象一般总能保持其相对稳定不变性,这样围绕对象构造的软件系统也自然会有好的稳定性。面向对象方法把属性和服务封装在对象中,当外部功能发生变化时,这种封装可以保持对象构造的相对稳定,使得改动仅局限在一个对象内部,减小了因改动引起的系统波动效应,因此,面向对象方法开发的软件具有易于扩大、修改和维护的特性。另外,面向对象方法具有的继承性和封装性也支持软件重用,并且易于扩大,能较好地适应复杂大系统不断发展和变化的要求。 C++拥有面向对象的特性,因此使用C++语言可以方便、轻松的完成软件模块化设计。 C语言是面向过程的语言,不具备C++语言面向对象的优势,模块化编程不像C++实现起来那么容易,但是通过C语言的应用还是可以实现的。使用C语言来实现C++语言面向对象特征,通过举例比照的方式描述具体实现过程,详细如下: C++定义一个对象是通过“类”,类封装了一个对象所用到的数据和方法,C语言中没有类但是有“构造体”,C语言中可以使用一个“构造体”来定义一个对象。例如实现一个一阶数字低通滤波器模块: 传递函数一阶低通数字滤波器,下面分别使用C++语言和C语言分别编写该软件模块,通过比照,可以看到C++语言和C语言实现模块的一些共性,从而更容易理解C语言实现模块化编程的原理。 使用C++语言可以如下编写代码(C++语言实现该模块有很多中写法,如下的代码虽然不是C++语言的实现方式,但是更类C,更容易理解): CLpf这个类定义了一个低通滤波器对象,CLpf类中包含了模块数据:模块输入m_Input、模块输出m_Output、模块参数m_Tc、模块参数m_Fc、模块变量m_K、模块变量m_OldOutput,CLpf类
显示全部