CN112988144B - 通用嵌入式事件驱动软件开发框架及使用方法 - Google Patents
通用嵌入式事件驱动软件开发框架及使用方法 Download PDFInfo
- Publication number
- CN112988144B CN112988144B CN201911212374.9A CN201911212374A CN112988144B CN 112988144 B CN112988144 B CN 112988144B CN 201911212374 A CN201911212374 A CN 201911212374A CN 112988144 B CN112988144 B CN 112988144B
- Authority
- CN
- China
- Prior art keywords
- class
- event
- interface
- driving
- writing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种通用嵌入式事件驱动软件开发框架及使用方法,对不同嵌入式平台的外设信息和开发流程进行抽象,实现了基于事件驱动的软件框架。本发明提供统一的高层接口,用户可按照固定的模式进行嵌入式开发和软件编码,极大降低了嵌入式开发的难度,并有效提高了代码的通用性和可维护性。
Description
技术领域
本发明属于嵌入式研发技术领域,具体涉及嵌入式事件驱动软件开发框架。
背景技术
嵌入式系统是为特定应用而设计的、软硬件可裁剪的专用计算机系统,系统适用于对功能、成本、体积和功耗等有严格要求的场景。主流产品包括TMS320、ARM Cortex等系列。
每个用户根据自己的应用需求选择不同的平台,并编写出风格迥异的代码。在团队研发模式下,这导致代码具有较差的一致性、移植性和扩展性,以及较高的维护成本。
考虑到嵌入式系统的工作流程具有普遍的相似性:外设(外围输入输出设备)输入触发对应标志位,表示输入数据就绪。主流程轮询标志位,获取对应的外设输入进行处理,并向外设输出信息。
因此,可以对工作流程逻辑等开展通用软件开发框架设计,进而形成规则约束,来避免上述问题。
发明内容
本发明需解决技术问题是提供一种通用嵌入式事件驱动软件开发框架及使用方法,提供不同平台之上的统一抽象架构层,用户在此基础上实现不同的业务逻辑。
为了解决上述问题,本发明提出了一种通用嵌入式事件驱动软件开发框架,具体包括以下步骤:
S1.事件类编写
编写事件基类,获取嵌入式平台普遍具备的外设项,构建事件类别宏,并提供获取和注册宏的接口。对基类宏的每一项进行派生,得到具体驱动事件类。
S2.高层外设驱动类编写
编写外设驱动基类,包括驱动初始化接口、数据读取接口、数据写入接口和自定义数据处理函数回调接口。对S1中的每一个具体驱动事件类,从驱动基类派生出对应的具体外设驱动类,并对每个驱动编写独有的参数配置接口。
S3.底层外设驱动类编写
对于S2中的每一个具体外设驱动类,在不同的嵌入式平台下,进行派生得到具体平台的底层外设驱动类,对底层外设驱动类中的接口使用平台独有的配置方式进行实现。
基于所述的通用嵌入式事件驱动软件开发框架使用方法,具体为:使用嵌入式平台的编译器对所述平台代码进行库编译,用户编码时加载对应平台的库,注册事件类到外设中断接口中,主循环根据中断触发的事件处理对应的外设。
本发明有益效果:
本发明对不同嵌入式平台的外设信息和开发流程进行抽象,实现了基于事件驱动的软件框架,并提供软件框架了使用方法。本发明基于外设事件,提供统一的高层接口,用户可按照固定的模式进行嵌入式开发和软件编码,极大降低了嵌入式开发的难度,并有效提高了代码的通用性和可维护性。
附图说明
图1是本发明实施例的软件框架编写示意图。
图2是本发明实施例的软件框架使用示意图。
具体实施方式
下面结合附图和实施例对本发明的技术方案进行进一步的解释和说明。
图1是本发明实施例的软件框架编写图,采用面向对象的C++编程技术,将程序和数据封装在对象中。设计基于事件驱动的软件框架,提供不同平台之上的统一抽象架构层,与具体应用解耦和,用户在此基础上实现不同的业务逻辑。具体的,包括以下步骤:
S1.事件类编写
编写事件基类IEvent,获取嵌入式平台普遍具备的Flash等外设项,构建事件类别宏
enumType{Flash,SerialPort,User=1000,MaxUser=65535};
并提供获取宏接口和注册宏接口
Type type();
static int registerType(int hint);
对宏Type的每一项进行派生,得到IFlashPort和ISerialPortEvent外设驱动事件类。
用户可使用registerType对宏Type中不存在的外设项进行全局注册,并通过type()函数进行获取和判断,来实现自定义扩展。
S2.高层外设驱动类编写
编写外设驱动基类IDrive,包括驱动初始化接口、数据读取接口、数据写入接口和自定义数据处理函数回调接口
virtual void init()=0;
virtual void read()=0;
virtual void write()=0;
void setRxFptr(const std::function<void(char*buf,int len)>&ptr);
对S1中的每一个具体驱动事件类,从IDrive派生出对应的IFlashDrive和ISerialPortDirve具体外设驱动类,并对每个驱动编写独有的参数配置接口。
对于Flash存在void setAddress(void*addr);和voiderase();等。
对于SerialPort存在bool setBaudRate(int rate);和boolsetParity(intparity)等。
相应的,S1中的自定义外设事件,需从IDrive中派生自定义驱动类实现。
S3.底层外设驱动类编写
对于S2中的每一个具体外设驱动类,进行派生得到底层外设驱动类FlashDrive和SerialPortDrive。在TigerShark201、TMS320C6678和ARM等嵌入式平台下,对S2中定义的高层接口如init()等,在类中进行各自平台下的底层实现。
图2是本发明实施例的软件框架使用示意图,使用每个嵌入式平台的编译器对该平台代码进行库编译。用户编码时加载对应平台的库,注册事件类到外设中断接口中,主循环根据中断触发的事件处理对应的外设,实现统一高层接口下的通用软件开发框架。
具体如下:
使用每个嵌入式平台的编译器对各自平台代码进行编译,得到ts201.lib、tc6678.lib和arm.lib等库。
用户进行研发时,新建工程,并加载库文件,即可开始统一编码工作。在main()主函数中新建驱动类
完善统一的高层接口和清晰固定的逻辑流程,实现了业务的解耦和,降低了开发者的编程门槛。软件框架的风格一致性和无修改移植性,真正的做到了通用化。
上述具体实施方式仅用于解释和说明本发明的技术方案,但并不能构成对权力要求的保护范围的限定。本领域技术人员应当清楚,在本发明的技术方案的基础上做任何简单的变形或替换而得到的新的技术方案,均将落入本发明的保护范围之内。
Claims (2)
1.一种通用嵌入式事件驱动软件开发方法,具体包括以下步骤:
S1.事件类编写
编写事件基类,获取嵌入式平台普遍具备的外设项,构建事件类别宏,并提供获取和注册宏的接口,对基类宏的每一项进行派生,得到具体驱动事件类;
S2.高层外设驱动类编写
编写外设驱动基类,包括驱动初始化接口、数据读取接口、数据写入接口和自定义数据处理函数回调接口;对S1中的每一个具体驱动事件类,从驱动基类派生出对应的具体外设驱动类,并对每个具体外设驱动类编写独有的参数配置接口;
S3.底层外设驱动类编写
对于S2中的每一个具体外设驱动类,在不同的嵌入式平台下,进行派生得到具体平台的底层外设驱动类,对底层外设驱动类中的接口使用平台独有的配置方式进行实现。
2.根据权利要求1所述的通用嵌入式事件驱动软件开发方法,其特征在于:使用嵌入式平台的编译器对所述平台代码进行库编译,用户编码时加载对应平台的库,注册事件类到外设中断接口中,主循环根据中断触发的事件处理对应的外设。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911212374.9A CN112988144B (zh) | 2019-12-02 | 2019-12-02 | 通用嵌入式事件驱动软件开发框架及使用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911212374.9A CN112988144B (zh) | 2019-12-02 | 2019-12-02 | 通用嵌入式事件驱动软件开发框架及使用方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112988144A CN112988144A (zh) | 2021-06-18 |
CN112988144B true CN112988144B (zh) | 2023-09-12 |
Family
ID=76331054
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911212374.9A Active CN112988144B (zh) | 2019-12-02 | 2019-12-02 | 通用嵌入式事件驱动软件开发框架及使用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112988144B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201039204Y (zh) * | 2007-03-30 | 2008-03-19 | 上海未来宽带技术及应用工程研究中心有限公司 | 基于事件驱动原理开发ipmc的系统 |
CN101551747A (zh) * | 2009-04-09 | 2009-10-07 | 怯肇乾 | Arm系列微处理器的软件体系架构工具 |
CN101620535A (zh) * | 2009-07-29 | 2010-01-06 | 北京航空航天大学 | 一种机载计算机软件通用框架设计方法 |
CN102081545A (zh) * | 2011-01-07 | 2011-06-01 | 中国电子科技集团公司第十研究所 | 在嵌入式平台上实现软件通信架构的方法 |
CN102253834A (zh) * | 2011-07-05 | 2011-11-23 | 广东星海数字家庭产业技术研究院有限公司 | 一种基于数字电视的Linux硬件设备驱动系统 |
CN102331935A (zh) * | 2011-11-07 | 2012-01-25 | 广东天波信息技术股份有限公司 | 一种嵌入式跨系统软件开发平台 |
CN102662665A (zh) * | 2012-03-29 | 2012-09-12 | 福州瑞芯微电子有限公司 | 在安卓系统上实现支持各种传感器的输入子系统 |
WO2016004587A1 (zh) * | 2014-07-08 | 2016-01-14 | 北京航空航天大学 | 一种基于多核处理器架构的机器人混合系统应用框架 |
CN109508202A (zh) * | 2018-09-27 | 2019-03-22 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 嵌入式操作系统的驱动开发系统、方法及介质 |
CN109885341A (zh) * | 2019-02-20 | 2019-06-14 | 无锡宝威电子有限公司 | 一种通用设备驱动模型、系统及应用 |
CN110162391A (zh) * | 2019-05-27 | 2019-08-23 | 浪潮云信息技术有限公司 | 一种异步框架及其实现方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7739693B2 (en) * | 2002-11-25 | 2010-06-15 | Sap Ag | Generic application program interface for native drivers |
CN1278258C (zh) * | 2003-08-21 | 2006-10-04 | 杭州天丽科技有限公司 | 一种开放的gis开发中间件系统 |
CN1909705A (zh) * | 2005-08-05 | 2007-02-07 | 杭州波导软件有限公司 | 一种基于移动终端平台的通用开发平台 |
US10742524B2 (en) * | 2018-01-11 | 2020-08-11 | Monza Cloud, LLC | Framework for standardizing development and deployment of services |
-
2019
- 2019-12-02 CN CN201911212374.9A patent/CN112988144B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN201039204Y (zh) * | 2007-03-30 | 2008-03-19 | 上海未来宽带技术及应用工程研究中心有限公司 | 基于事件驱动原理开发ipmc的系统 |
CN101551747A (zh) * | 2009-04-09 | 2009-10-07 | 怯肇乾 | Arm系列微处理器的软件体系架构工具 |
CN101620535A (zh) * | 2009-07-29 | 2010-01-06 | 北京航空航天大学 | 一种机载计算机软件通用框架设计方法 |
CN102081545A (zh) * | 2011-01-07 | 2011-06-01 | 中国电子科技集团公司第十研究所 | 在嵌入式平台上实现软件通信架构的方法 |
CN102253834A (zh) * | 2011-07-05 | 2011-11-23 | 广东星海数字家庭产业技术研究院有限公司 | 一种基于数字电视的Linux硬件设备驱动系统 |
CN102331935A (zh) * | 2011-11-07 | 2012-01-25 | 广东天波信息技术股份有限公司 | 一种嵌入式跨系统软件开发平台 |
CN102662665A (zh) * | 2012-03-29 | 2012-09-12 | 福州瑞芯微电子有限公司 | 在安卓系统上实现支持各种传感器的输入子系统 |
WO2016004587A1 (zh) * | 2014-07-08 | 2016-01-14 | 北京航空航天大学 | 一种基于多核处理器架构的机器人混合系统应用框架 |
CN109508202A (zh) * | 2018-09-27 | 2019-03-22 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 嵌入式操作系统的驱动开发系统、方法及介质 |
CN109885341A (zh) * | 2019-02-20 | 2019-06-14 | 无锡宝威电子有限公司 | 一种通用设备驱动模型、系统及应用 |
CN110162391A (zh) * | 2019-05-27 | 2019-08-23 | 浪潮云信息技术有限公司 | 一种异步框架及其实现方法 |
Non-Patent Citations (1)
Title |
---|
嵌入式网卡类设备驱动程序模块化开发框架;季义钦;《中国电子商情·通信市场》(第3期);77-83 * |
Also Published As
Publication number | Publication date |
---|---|
CN112988144A (zh) | 2021-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Charles et al. | X10: an object-oriented approach to non-uniform cluster computing | |
US20030229482A1 (en) | Apparatus and method for managing integrated circuit designs | |
JP5244194B2 (ja) | ビジネス・プロセスを再使用可能サービスに変換するためのシステム、方法、およびコンピュータ・プログラム | |
CN103718155A (zh) | 运行时系统 | |
CN102298535A (zh) | 绑定数据并行设备源代码 | |
US20150324194A1 (en) | Method for modeling source code having code segments that lack source location | |
Rassokhin | The C++ programming language in cheminformatics and computational chemistry | |
Eder et al. | Energy-aware software engineering | |
CN112988144B (zh) | 通用嵌入式事件驱动软件开发框架及使用方法 | |
Schultz et al. | Compiling java for low-end embedded systems | |
Chen et al. | Modelling with relational calculus of object and component systems-rCOS | |
Jiao et al. | Roccom: an object-oriented, data-centric software integration framework for multiphysics simulations | |
Pirkelbauer et al. | Source code rejuvenation is not refactoring | |
US20200278876A1 (en) | Serialization of objects to java bytecode | |
Sharp et al. | Static analysis of object references in RMI-based Java software | |
US8135943B1 (en) | Method, apparatus, and computer-readable medium for generating a dispatching function | |
Wolf | Object programming for CAD | |
CN103425461B (zh) | 一种编程接口技术实现方法及计算机系统 | |
Broy | Object-oriented programming and software development—a critical assessment | |
Schricker | Cobol for the next millennium | |
Eder et al. | Chapter Energy-Aware Software Engineering | |
Adams | An Introduction to the C++ Programming Language (Version: 2015-02-03) | |
Wrenn et al. | Dependently Typing R Vectors, Arrays, and Matrices | |
Mitchell et al. | Checking software contracts | |
Lemon et al. | on object oriented device driver model |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |