一种嵌入式软件驱动管理方法

文档序号:6564630阅读:166来源:国知局

专利名称::一种嵌入式软件驱动管理方法
技术领域
:本发明涉及嵌入式软件,具体涉及一种嵌入式软件驱动管理方法。
背景技术
:以前操作驱动是显示调用一个一个全局驱动函数,使得应用随处可见调用驱动接口方法。如果驱动实现方式改变而导致不得不改变接口的话,应用也得跟着改变。实际上,要在成千上行应用代码中找到这个驱动接口,并遵照驱动接口来修改应用的相应处理是一件十分麻烦的事情。后来的系统设计为了规避这个问题,采用统一的驱动入口函数。调用驱动的接口对应用来说只有一个入口。把驱动的变化性缩小到只在驱动模块内部。其实现的方式如下1.定义一个驱动管理层,对应用只提供一个入口函数。简化应用对驱动的依赖。2.驱动管理者内部通过命令代码来识别并完成具体操作业务。为了便于驱动识别应用具体操作意图,驱动管理层对命令代码的编码规则做了明确的规定。比如,操作A芯片的B业务其命令码为xx-xx-xxxxH,其具体处理如图1所示,包括驱动管理者入口函数、Switch(命令代码)和具体驱动操作接c。以上这种实现存在以下几个问题1)通过命令码的编码方式来区别不同的业务操作,使得入口函数switch分支条件很多,且还要维护命令码编码规则文档。对于上千种驱动业务操作,这种维护和函数的臃肿可想而知。2)如果驱动新增业务处理,也就是新增一条命令代码,要把这个命令代码加入switch分支中,用户就不得不修改入口函数。否则就得重写入口函数4的实现。3)如果驱动想删除一条陈旧的命令,将这个命令代码赋予给一个新的业务处理,用户也不得不修改入口函数。否则就得重写入口函数的实现。4)对于具体的一项业务处理,可能这个板在A芯片上实现,另一个板在B芯片上实现。不管在那个芯片上,这里区别仅仅是对象实例不同,它们的处理方式都一样。那么怎么规避这种变化从而使得不管具体业务在那种芯片上处理驱动管理层都一样呢?上述还没有提出一个有效的解决办法。上述四个问题都导致系统可扩展性和维护性较差。
发明内容本发明需要解决的技术问题是提供一种嵌入式软件驱动管理方法,能够降低应用和驱动耦合,并使得驱动管理易扩展,易维护。本发明的上述技术问题这样解决,提供一种嵌入式软件驱动管理方法,采用面向对象和函数映射表,包括以下步骤1.1)应用通过统一入口函数调用驱动管理对象;1.2)驱动管理对象接收所述调用并依据其中的关键字参数在所述函数映射表中查找对应处理函数;1.3)封装在驱动管理对象内的所述处理函数完成通用处理后通过IC芯片对象接口委托选定的IC芯片对象进一步处理。按照本发明提供的驱动管理方法,所述统一入口函数不限制具体形式,可以包括关键字参数、输入驱动报文参数和输出驱动报文参数。按照本发明提供的驱动管理方法,所述函数映射表的任一记录包括所述关键字数据项和对应处理函数的指针数据项。按照本发明提供的驱动管理方法,所述函数映射表可以增加、删除或修改。按照本发明提供的驱动管理方法,所述驱动管理对象还向对应处理函数传递所述驱动报文参数;所述处理函数还进行驱动报文参数处理。按照本发明提供的驱动管理方法,所述驱动管理对象包括共同基类,所述基类的处理函数调用IC芯片对象接口并进行驱动报文参数通用处理。按照本发明提供的驱动管理方法,所述通用处理包括但不限于针对驱动报文参数进行通用校验。按照本发明提供的驱动管理方法,所述驱动管理对象是所述基类的实改原有驱动报文参数的处理。针对具体的单板可以自由个性化适合自己的驱动管理对象,而一些通用的共性操作都可以从基类中继承过来,降低用户的开发工作量。按照本发明提供的驱动管理方法,用户可以通过扩展获得新增驱动报文参数的处理。本发明提供的嵌入式软件驱动管理方法,对上层应用采用窄口径,屏蔽应用对具体芯片驱动的依赖,对驱动本身的共性进行抽取然后集中在驱动管理对象共同基类中完成,将驱动变化留给用户来提供,其提供方式包括但不限制于注册方式和抽象接口,与现有技术相比,降低了应用和驱动耦合,针对具体的单板可以自由个性化适合自己的驱动管理对象,且一些通用的共性操作都可以从基类中继承过来,降低用户的开发工作量,真正达到了易扩展,易维护,从而提高了软件模块可重用特性,避免了各个项目各自开发一套的局面,提高了系统适用性和实用性。下面结合附图和具体实施例进一步对本发明进行详细说明。图l是传统驱动处理过程示意图。图2是传统驱动接口模式示意图。图3是本发明驱动统一接口模式示意图。图4是本发明驱动处理过程示意图。图5是本发明驱动管理对象框架示意图。图6是本发明驱动事件处理流程示意图。具体实施例方式首先,说明本发明驱动管理方法的核心思想对上层应用采用窄口径屏蔽应用对具体芯片驱动的依赖,对驱动本身的共性进行抽取然后集中在驱动管理者中完成,将驱动变化留给用户来提供,提供方式可能有多种,比如注册方式,抽象接口等。第二步,说明本发明三大组成部分(1)提供一个统一的驱动入口函数,使得应用对驱动仅一个入口;(2)设计一张驱动业务操作函数对应表,或称函数映射表,使得用户可以自由注册自己的函数指针;(3)对具体的业务操作,驱动管理对象通过一个标准接口获取对应的芯片对象,使得驱动管理对象对具体业务在哪个芯片上处理由用户决定,而处理流程封装在驱动管理对象中。第三步,说明本发明核心方法,包括以下关键步骤(-)定义应用与驱动之间的统一入口函数。其动机就是将以前应用直接调用驱动部分如图2,改为一个更高层的接口,使得应用间接访问驱动方法。形式可以采用多种方式,比如采用FACADE模式,如图3。㈡生成一张可增加,删除,修改的函数映射表l.设计一张函数映射表,形式如下表,其中,关键字为任意表达式,值为对应的处理函数指针<table><row><column>关鍵字</column><column>值</column></row><row><column>与其它关鍵字不重复的任意表达式</column><column>函数指针</column></row><row><column>......</column><column>......</column></row><table>2.当驱动管理对象收到应用调用请求后,驱动管理对象通过请求中的关键字在该函数映射表中查找对应的处理函数。如果找到处理函数,则将请求派发到该处理函数去处理。3.提供对这张表增,删,改方法。曰定义一个获得芯片对象的接口,该接口为纯虛函数。其动机是由于一项具体的业务可能是在芯片A,也可能是在芯片B上处理。该接口的用意就是要用户提供到底是A还是B。第四步,结合本发明具体实施分三大块进行描述,具体说明如下一、设计框架为了缩小应用21对驱动的依赖,降低耦合,采用FAQADE模式来设计驱动管理对象22,如图5。当驱动管理对象22接受到具体驱动报文后,先在驱动管理对象22内部查找对应处理函数,对应的处理函数如果找到,再BRIDGE到具体处理这个业务的IC芯片对象71。其处理流程见图6。二、设计实现设计实现关键分为以下几个小步1)定义驱动管理对象统一接口驱动管理对象对外提供统一接口,形式如下OnCommand(constCKeyTypekeyType,T—DrvMessage*ptInMsg=CSS—NULL,T—DrvMessage*ptOutMsg=CSS—NULL);参数说明keyType:关键字ptlnMsg:输入报文ptOutMsg:输出才艮文类说明CKeyType:关键字数据类型封装类T—DrvMessage:才艮文结构体2)函数映射表及其处理作为一个示例,这里使用STL提供的map表作为本文的函数存储映射表。关鍵字为CKeyType类型,值为关键字对应的处理函数指针。为了使子类能新增,删除业务处理,驱动管理者提供保护访问属性的新增,删除map表的方法。当驱动收到应用请求报文后,就可以在m叩中查找对应的处理函数。其中,转发到该处理函数的技巧很关鍵,使用方法为MAP—ITERiter=mmap.find(keyType);if(iter!=m—map.end())(this->*(iter->second))(ptInMsg,ptOutMsg);说明m一map为驱动管理者基类定义存储函数映射的表;MAP—ITER为m—map表对应的枚举类型同时驱动管理对象共同基类的子类实现新增驱动报文使用技巧也很关键,其方法为AddCmd(关键字实例,(FN)(&子类::新的业务处理函数));说明AddCmd为驱动管理对象共同基类定义实现的向map新增驱动报文的方法。FN为驱动管理对象共同基类定义的函数指针,形式如typedef数据类型(驱动管理对象共同基类:,FN)(T—DrvMessage*,T_DrvMessage*);3)BRIDGE到IC芯片当驱动管理对象将消息转发给映射表中对应的报文处理函数后,该函数除了要做一些针对该报文的通用参数校验之类的公共处理外,其次最重要的就是要委托给具体的IC芯片对象。这里提供一个纯虚函数GetICInstance(位置信息,业务类型,业务细项),该函数由子类继承者来实现。这样,针对一个具体驱动业务,驱动管理对象共同基类就可以将到底在哪个芯片上实现该功能的决定权扔给了子类实现者。在实际的单板开发中,子类实现者用户实际是很清楚具体一项业务功能在哪个芯片上实现。三、继承扩展由于驱动管理对象共同基类采取上述设计实现,给子类带来了很大的灵活性。对于基类已经实现的驱动报文,用户既可以继承下来,也可以利用面向对象的特点覆盖该方法。如果有新增驱动报文,用户也只需要提供自己的驱动处理报文函数,并利用AddCmd方法注册一下即可。从而整个报文的事件流都从基类继承过来了。从维护特点来看,由于新增不用再修改基类,用户可以自由扩展自己的东西,从而使得用户代码易维护性加强。最后,总结描述本发明具体操作的对应处理流程,具体如图4所示,包括以下步骤410)应用通过统一入口函数调用驱动管理对象;420)驱动管理对象在函数映射表/MAP表中找对应的处理函数指针;430)对应函数内部处理,具体是531)通过共同基类实现该业务通用处理;532)通过纯虚函数GetICInstance()获得具体芯片对象;533)将个性化细节委托给该芯片对象处理;440)结束。权利要求1.一种嵌入式软件驱动管理方法,其特征在于,采用面向对象和函数映射表,包括以下步骤1.1)应用(21)通过统一入口函数调用驱动管理对象(22);1.2)驱动管理对象(22)接收所述调用并依据其中的关键字参数在所述函数映射表中查找对应处理函数;1.3)封装在驱动管理对象(22)内的所述处理函数完成通用处理后通过IC芯片对象接口委托选定的IC芯片对象(71)进一步处理。2、根据权利要求1所述驱动管理方法,其特征在于,所述统一入口函数可以包括关键字参数、输入驱动报文参数和输出驱动报文参数。3、根据权利要求1所述驱动管理方法,其特征在于,所述函数映射表的任一记录包括所述关键字数据项和对应处理函数的指针数据项。4、根据权利要求1所述驱动管理方法,其特征在于,所述函数映射表可以增加、删除或》爹改。5、根据权利要求1或2所述驱动管理方法,其特征在于,所述驱动管理对象(22)还向对应处理函数传递所述驱动^^文参数;所述处理函数还进行驱动报文参数处理。6、根据权利要求1或2所述驱动管理方法,其特征在于,所述驱动管理(22)包括共同基类,所述基类的处理函数调用IC芯片对象接口并进行驱动报文参数的所述通用处理。7、根据权利要求6所述驱动管理方法,其特征在于,所述通用处理包括针对驱动报文参数进行通用校验。8、根据权利要求6所述驱动管理方法,其特征在于,所述驱动管理对象(22)是所述基类的实例,用户可以通过继承获得所述通用处理或通过覆盖修改原有驱动报文参数的处理。9、根据权利要求6所述驱动管理方法,其特征在于,所述驱动管理对象(22)可以是所述基类的子类,通过扩展获得新增驱动报文参数的处理。10、根据权利要求6所述驱动管理方法,其特征在于,所述IC芯片对象(71)获得是由驱动管理对象管理。全文摘要本发明涉及一种嵌入式软件驱动管理方法,包括应用(21)通过统一入口函数调用驱动管理对象(22);驱动管理对象根据调用关键字参数在函数映射表中查找对应处理函数;封装在驱动管理对象内的处理函数完成通用处理后通过IC芯片对象(71)接口委托选定的IC芯片对象进一步处理。这种方法屏蔽应用对具体芯片驱动的依赖,对驱动本身的共性进行抽取然后集中在驱动管理对象共同基类中完成,将驱动变化留给用户来提供,与现有技术相比,降低了应用和驱动耦合,针对具体的单板可以自由个性化适合自己的驱动管理对象,且一些通用的共性操作都可以从基类中继承过来,降低用户的开发工作量,真正达到了易扩展和易维护。文档编号G06F9/44GK101206566SQ20061017024公开日2008年6月25日申请日期2006年12月21日优先权日2006年12月21日发明者赵玉海申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1