基于模块化的嵌入式软件设计研究

2018-05-14 21:23周相康
科技风 2018年16期
关键词:软件设计嵌入式模块化

周相康

摘 要:本文对嵌入式软件编程语言及软件模块化设计的概念进行概述,并给出应用C语言进行模块化代码编写的方法及要点,希望给软件开发人员以借鉴,提高代码编写效率,降低程序出错概率,缩短软件开发周期。

关键词:模块化;嵌入式;软件设计

伴随着科学发展,互联网的兴起,人们对软件的应用需求越来越大,软件功能越来越多,实现复杂度也随之增加。嵌入式软件编程成为软件编程人员要进行学习及应用的技能,进行模块化编写,以解决软件编制复杂度的难题。

一、什么是嵌入式软件编程语言

嵌入式软件编程在行业内通常应用汇编、C和C++三种语言编写,这三种编程语言虽然都能够用作嵌入式软件编程,但在部分特性上存在着差异,实时性汇编最快、C++最慢,代码移植性与维护性的便捷性比较,C++最简单,汇编最难,最为繁琐。业内常用C语言进行嵌入式软件的编程,这由C语言的特性决定的,C语言在编程时更加侧重过程,所编程的代码在移植、共享方面较为容易;其次,大部分的软件编程环境都支持C和汇编语言,少部分支持C++语言编译器;最后C语言掌握及应用最为简单。由于嵌入式软件大多都应用C语言进行编写,因此文章重点讲解用C语言进行模块化编程的方法、要点[1]。

二、什么是软件模块化设计

软件开发工程在近年来难度不断加大,当编写出现漏洞时就会受到步骤、功能增加的制约,再修改起来难度、工作量极大,为此计算机领域专业人员提供各种软件设计模型为编程人员服务。根据用户需求,将功能较多、规模较大的软件划分为多个小模块进行编写,分工合作提升编写效率,减少失误。模块化下的软件编写,每个模块的编写工作量小且工作独立、互不影响,结构独立及功能独立,将软件的开发分工化。

三、应用C语言进行模块化代码编写

应用模块化代码编写的软件是由被加工对象及其在此软件上实现的相关功能构成。在软件的实际开发阶段,通常应用两种代码编写方法,基于功能的程序设计,要在其功能的实现中考虑到编写过程以及人工操作的疏漏,这个疏漏是不确定且不可控的。程序的整体结构依赖于前期规划好的程序功能,在后期的功能扩展、删除和修改环节的难度都会不同程度的提升。在此模式下的软件,其功能较为集中且耦合度也大,整个软件结构可以定义为脆弱,经常会在编程上出现漏洞,且这个漏洞处理上也会非常的繁琐,在未来使用中,难以满足用户的功能扩展需求,软件可复用性差。

基于对象的程序设计中,要考虑的对象及数据结构、软件结构都是相对稳定的,易于控制和管理,尽管会对软件的功能有一定的要求,要在使用中进行不断的完善、演进,但在同一问题空间中的对象,都能够保持对象本身的稳定性、可控性,在此情况下围绕对象进行的软件编译,编译成型的软件系统也同样具备优良的稳定性和可控性。在实际代码编制时,将属性及服务封装在对象中,当需要对软件功能、编程细节进行修改时,这种封装操作能够有效的对对象结构的稳定性、可控性进行维持,将进行的改动、漏洞修改锁定在同一对象的内部,降低因为改动而导致的系统崩溃或是结构混乱。因此面向对象方法开发的软件,必须具备一定的继承性、封装性,并且能够支撑软件代码的重复使用,在日后的软件完善、扩展等操作中,能够良好的适应复杂系统变化的要求。

C++语言拥有面向对象的特性,因此应用C++语言能够方便、快捷的完成软件模块化设计。C语言是面向过程的语言,因此缺少C++语言在面向对象上的优势,因此模块化编程相对C语言而言实现较为困难。应用C语言以实现C++语言面向对象的特征,举例对比描述转换过程。

C++通过类定义一个对象,类用于封装对象所能够应用到的数据及方法,C语言中没有类的定义,但有结构体,在C语言中应用结构体,用于定义一个对象。

如在数据结构中常用的栈类型,应用C++语言以及C语言分别对栈软件模块进行编写及对比,能够明显看出C++语言与C语言在实现模块功能编写时存在一定的共同点,从而能够解释C语言完成模块化编程的原理。C++语言进行模块化编程时有多种书写方法,此代码虽然不是C++语言应用的最佳实现方法,但是与C语言更加接近,更为容易理解,应用C++语言能够进行,其代码编写为:

#define MaxStackSize 50 //常数

typedef int DataType;//定义数据类型

class Stack

{

private:

DataType list[MaxStackSize]; //栈数组及栈顶指针

int top;

public:

void Init(void); //初始化

void Push(DataType item);//入栈

DataType Pop(void);//出栈

}

Stack::Init(void)

{}//这里仅例述一个方法实现

在上述叙述的代码编写样本中,Stack定义了栈对象,它包含对象数据如list和top,同时也包括对象方法,初始化栈Init()、入栈Push()和出栈Pop()操作。

在嵌入式软件中,其各个模块的设计,必然会涉及到编写语言、编写对象、编写方法,所以,明确以上几点,借助相应的对象编写方法参考模板,完成相关代碼的编写,可以说是目前一项较为合理、有效的方法。C++语言对象实例化方法就能够实现Stack的方便应用,因为可以定义Stack s,并方便对象的调用,如s.Init()、s.Push()、s.Pop()等。

应用C语言如下编写:

typedef struct

{

DataType list[MaxStackSize]; //栈数组及栈顶指针

int top;

void (*Init)(void *pStack); //初始化

void (*Push)(void *pStack ,DataType item);//入栈

DataType (*Pop)(void *pStack);//出栈

} Stack;

void StackInit(void *pStack)

{}//这里仅例述一个方法实现

#define StackDefault {\\

{0,},\\

{1},\\

{StackInit},\\

{StackPush},\\

{StackPop},\\

} //初始化宏

C语言通过结构体定义一个新类型Stack,这种既带有数据又有方法的抽象数据类型已具有面向对象的特征。C语言实现对象方式的编写,也必须要遵循一定的要求,具体如下:

C语言定义Stack,虽然可以定义为Stack s,但不能像C++一样调用,即使编译器不会报错,但也无法执行,错误体现为C语言方法需要传递对象指针,而Stack的函数指针没有被初始化,所以不能执行,因此要在声明对象时,将Stack函数指针初始化,设定为默认值。

C语言代码编制期间,在对默认值的设定进行具体划分时,也应当遵循相应的原则,在利用Stack函数指针的基础上,确保相关数值能够处于初始化的状态,以此来保证默认值设定的科学性和合理性。C语言应用Stack数据类型,就要声明对象实例,并进行初始化操作,不同于C++,如Stack s=StackDefault,声明对象实例,并且指针恢复初始。

四、总结

本文所述的模块化代码编写的方法及要点,能够满足C语言的模块化设计需求,极大的降低了模块化程序编写的难度,建议在软件编程领域进行推广。

参考文献:

[1]文武,任鹏,王灵军,等.模块化嵌入式软件开发平台研究[J].家电科技,2016(6):8385.

猜你喜欢
软件设计嵌入式模块化
用模块化思维打造组织
JGJ/T 435—2018施工现场模块化设施技术标准
大众MEB电动车模块化平台
模块化微流控系统与应用
基于STM8S903K3的序列打螺丝夹具的软件设计
一种VHDL语言代码重用的方法
嵌入式LINUX操作系统的研究
嵌入式组件技术的研究及应用
“嵌入式系统概论”课程设计
AItera推出Nios II系列软核处理器