a&s专业的自动化&安全生态服务平台
公众号
安全自动化

安全自动化

安防知识网

安防知识网

手机站
手机站

手机站

大安防供需平台
大安防供需平台

大安防供需平台

资讯频道横幅A1
首页 > 资讯 > 正文

嵌入式DVR软件中用结构化语言实现面向对象的设计思想

目前在安防领域使用的的嵌入式DVR产品越来越多,厂家在不断增强产品稳定性和压缩能力的同时,也开始重视应用软件的开发,软件的操作界面越来越美观,功能越来越丰富。如何才能为自己的产品开发出更具人性化,操作更方便的应用软件?本文将与广大研发设计人员一起探讨。\r\n
资讯频道文章B

    嵌入式DVR是一种高度集成、复杂的嵌入式设备,其软件需要保证良好的可靠性、复用性、扩展性及高效性。

    传统的结构化设计方法,在其软件设计中就有些“力不从心”,因为结构化的软件要求软件设计一开始就假定软件需求是很明确的,系统处理数据的模式和方法也是明确的。然而DVR的用户是面向不同领域的,而每个客户的要求都有所不同,如有的客户可能需要用RS485总线来控制温度采集器,有的则可能需要来控制云台,这在结构化设计方面就需要用不同的数据结构和方法来描述。因此,每当针对不同客户就需要专门定制不同的软件版本,这无疑增加了软件的维护和测试成本,这是DVR生产厂商所不愿意看到的。并且,面向对象的设计思想需要采用面向对象的设计语言,无疑是对嵌入式设备一个巨大的考验。当然,现在不少嵌入式开发工具,已经支持C++、JAVA等面向对象的设计语言。但是这些面向对象的语言需要很大的C++设计库,这会增加DVR对存储设备容量的要求。而且面向对象的设计语言在执行的时候会添加一些额外的代码,如“析构”、“构造”函数,会导致执行效率比结构化的设计语言要低。因此一些编译器对面向对象的设计语言的支持远没有对结构化的设计语言高。如LINUX下的GCC编译器附带的调试工具,在调试C++程序中有时就无法打印堆栈和函数的调用关系。

新型软件设计方法
    综合以上几个方面:必须找到一个结构化设计语言和面向对象设计语言结合的平衡点,才能够更好地解决DVR软件开发中的设计问题。由此,软件设计人员采用了一种“用结构化的语言实现面向对象的设计思想”的软件设计方法。

    这种设计方法的实质是:用面向对象的设计思想去分析嵌入式DVR的需求;用面向对象的设计模式去设计DVR软件构架;用结构化的语言去实现DVR系统功能。这样一来,就可以发挥面向对象设计思想在需求分析和建模方面的方便快捷直观的优点,同时又能保证嵌入式软件在执行效率和存储方面的要求。

    当然,我们必须摒弃一些面向对象设计思想中需要依赖面向对象设计语言的一些特性,如运行中的多态,类型识别等。这些行为也能够在结构化语言中实现,只是有些特性对系统设计来说就有点无关轻重了。如果把所有面向对象的特性都拿来用,这就会导致设计走向另一个极端:在嵌入式开发上使用面向对象的语言来设计系统。特别值得指出的是,面向对象语言中的内存分配,如果在嵌入式软件上设计使用,会导致频繁的动态分配不定大小的内存,会引起系统堆栈破碎的风险。

面向对象软件
    DVR软件,可采用面向对象软件中“敏捷软件”的设计思想来进行分析设计。在进行需求分析的时候,在最初开发周期中,首先确认系统中最重要的10%的需求来确定系统架构设计,这点和结构化的软件设计是完全不一样的。结构化的语言假定系统的需求都明确了,根据这些需求进行系统架构设计。

    设计人员采用比较实用快捷面向对象的MVC结构,即模型-视图-控制器结构,把整个系统分成三个部分:一部分是底层的软件部分,我们在DVR软件称为“微内核”;一部分是人机交互部分,即界面部分;另一部分则是两者之间的接口,我们称之为适配器。在软件架构上也分为三个大的部分(或者说三个软件包):界面、“微内核”、界面和“微内核”之间的接口。

    这三个部分在迭代中最先完成的是“微内核”部分。而“微内核”设计中最关键的就是录像部分,这需要考虑到各种不同的录像种类和各种录像条件,而做好录像部分的用例分析就可以设计出微内核的基本架构,也就是整个软件的“灵魂”。[nextpage]

    完成第一次迭代设计后,DVR软件的其它需求的开发就是一个“添枝加叶”的过程。根据面向对象设计“高内聚、低耦合”的思想原则,每次迭代的过程我们都采用模块化的设计,。在添加每一个模块时,统一各个模块的接口,采用“模块名_domsg”做为对外接口。这样一来,就能很好地屏蔽掉各个模块的内部处理机制,减少软件开发的耦合程度。如“微内核”中的录像部分可能需要读出硬盘模块提供的分配目录信息。,就可以通过“hdisk_domsg”来获取。

各个模块开发
    在各个模块开发中,可以采用面向对象语言的概念来设计。语言只是实现思想的一种方式,用结构化的语言可以很好地实现一些面向对象的设计思想。如在考虑各个模块设计的时候,采用“类”(C++语言中的关键字为:class)来组织软件模块。当然,在结构化设计中没有“类”这种概念,于是我们用结构体(C语言中的关键字为:struct)来替代。如,在每个模块设计的时候,就继承了系统中已经设计好的“父类”。父类里面包括一些共有的属性,如“模块ID”,“模块名称”,还有一些共有的方法,如“读取配置参数”,“存储配置参数”等。在实际编写每个模块的时候,首先从这个“父类”继承,这样的设计能够很好优化程序结构,提高程序的可读性和扩展性,并且能够很好地提高代码的复用性。

struct Module_Obj
{
int Id;//模块编号,供调试使用
char Name[20];//模块名
......
int(*load_param)(void *param);//启动时候装载模块参数
int(*save_param)(void *param));//保存模块参数
......
};

    在模块开发中,也可以采用面向对象的设计模式。设计人员在采用软件设计的过程就采用了很多“四人帮”(即“GOF”,四个国外开发者,提出面向对象软件开发中的常用设计模式)的设计模式。如在系统启动后就采用创建式的单例模式分配系统内存,保证系统各个模块在系统中唯一。又如报警模块中采用了observer(观察者)模式,其它模块如果要获取报警信息,可先向该模块注册需要的报警信息,当该报警模块发现有改变报警端子有报警的时候,就会把报警信息逐个通知各个已经注册的模块。这些模式的采用能够很好地提高代码的健壮性。

界面
    界面方面设计人员采用了名为NeatechGui的系统,这套GUI系统包括两个部分:一部分是在WINDOWS界面下的自动化工具,这套工具负责设计界面菜单,并自动生成C代码提供给界面部分调度;另一部分则是DVR GUI部分,这部分是基于不同的分割芯片上的图形系统,这部分作为一个模块提供给“微内核”调用,它会在系统启动时初始各种分隔芯片,并提供一个供界面部分调用的菜单接口。

    界面和微内核的接口部分,负责转换“微内核”和“界面”部分的通讯,类似四人帮设计模式中的适配器,主要的设计技巧是采用面向对象语言中常用的CallBack(回调)函数模式。当界面上有按键事件产生的时候就回调,用事先已经注册好的事件回调函数,执行相关的“微内核”接口函数,完成系统的人机操作配置功能。

结语
    市场上已有采用这一方法进行DVR软件开发的系列产品。实践证明,这一软件具有很好的扩展性和稳定性,同时软件开发周期明显快于采用纯结构化的软件开发周期。

    随着嵌入式技术的发展,其软件的规模必定会越来越大,传统的结构化开发方法肯定会被更先进的开发方法所取代,面向对象的软件工程的思想会影响到嵌入式软件的开发设计模式。

参与评论
回复:
0/300
文明上网理性发言,评论区仅供其表达个人看法,并不表明a&s观点。
0
关于我们

a&s是国际知名展览公司——德国法兰克福展览集团旗下专业的自动化&安全生态服务平台,为智慧安防、智慧生活、智能交通、智能建筑、IT通讯&网络等从业者提供市场分析、技术资讯、方案评估、行业预测等,为读者搭建专业的行业交流平台。

免责声明:本站所使用的字体和图片文字等素材部分来源于互联网共享平台。如使用任何字体和图片文字有冒犯其版权所有方的,皆为无意。如您是字体厂商、图片文字厂商等版权方,且不允许本站使用您的字体和图片文字等素材,请联系我们,本站核实后将立即删除!任何版权方从未通知联系本站管理者停止使用,并索要赔偿或上诉法院的,均视为新型网络碰瓷及敲诈勒索,将不予任何的法律和经济赔偿!敬请谅解!
© 2020 Messe Frankfurt (Shenzhen) Co., Ltd, All rights reserved.
法兰克福展览(深圳)有限公司版权所有 粤ICP备12072668号 粤公网安备 44030402000264号
用户
反馈