CN117667064A - 一种嵌入式软件模块及软件模块设计方法 - Google Patents
一种嵌入式软件模块及软件模块设计方法 Download PDFInfo
- Publication number
- CN117667064A CN117667064A CN202311641168.6A CN202311641168A CN117667064A CN 117667064 A CN117667064 A CN 117667064A CN 202311641168 A CN202311641168 A CN 202311641168A CN 117667064 A CN117667064 A CN 117667064A
- Authority
- CN
- China
- Prior art keywords
- layer
- data
- module
- state
- software
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 11
- 238000013461 design Methods 0.000 title abstract description 17
- 230000004807 localization Effects 0.000 claims abstract description 17
- 239000010410 layer Substances 0.000 claims description 181
- 239000002346 layers by function Substances 0.000 claims description 10
- 238000004891 communication Methods 0.000 claims description 7
- 238000010168 coupling process Methods 0.000 claims description 6
- 238000005859 coupling reaction Methods 0.000 claims description 6
- 230000008878 coupling Effects 0.000 claims description 5
- 230000003068 static effect Effects 0.000 claims description 5
- 230000003247 decreasing effect Effects 0.000 claims description 3
- 230000006399 behavior Effects 0.000 claims description 2
- 230000000875 corresponding effect Effects 0.000 description 9
- 230000002618 waking effect Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 2
- 238000005538 encapsulation Methods 0.000 description 2
- 230000006978 adaptation Effects 0.000 description 1
- 230000003044 adaptive effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 230000008713 feedback mechanism Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Stored Programmes (AREA)
Abstract
本发明公开了一种嵌入式软件模块及软件模块设计方法,包括本地化外部接口层、数据层、配置层、状态层、功能层、基础软件层和输出接口层,所述本地化外部接口层只能被状态层和配置层调用,所述数据层可被其他所有层级调用,所述基础软件层可调用状态层和配置数据。通过层级的划分,并且对每个层级的软件层的功能进行了清晰明了的定义每个层级的软件层之间仅仅有纵向依赖关系而没有横向依赖关系,而同层级的模块之间不能相互引用,这样的层级划分方式较为明确,并且每个层级的软件层的功能定义清晰明了,极大地提升了软件的后期可维护性和可扩展性,实现了各个层级模块之间的高内聚低耦合的目标,是一个高可复用的优秀的软件模块设计。
Description
技术领域
本发明涉及嵌入式软件技术领域,具体为一种嵌入式软件模块及软件模块设计方法。
背景技术
常规软件模块设计中,软件模块通常会被划分为很多层级,每个层级都会处理一些相关的事情,每个层级之间都会处理一些相关的功能,但是每个层级之间处理事情的时候可能会需要用到其他层级的一些函数接口或者数据,这样每个层级就会和多个其他层级之间具有高度耦合。随着软件业务的复杂程度的提升,软件模块的耦合度会越来越高,后期如果由于需求的变更我们需要替换某个模块功能的时候,由于该模块与外部的依赖关系错综复杂导致该模块根本无法进行替换或者替换会造成巨大的人力物力的浪费。
发明内容
鉴于现有技术中所存在的问题,本发明的目的是提供一种嵌入式软件模块及软件模块设计方法,提高了软件的后期可维护性和扩展性,具有高可复用的优点。
为了实现上述发明目的,本发明采用如下所述的技术方案:
一种嵌入式软件模块,包括:本地化外部接口层、数据层、配置层、状态层、功能层、基础软件层和输出接口层:
所述本地化外部接口层集成或重新封装调用外部模块的数据访问接口;本地化外部接口层集成有所述软件模块中配置层和状态层所需的其他模块的函数和数据的封装,即调用其他模块的数据只能通过本地化外部接口层进行调用,有且只有此一条合法路径;
所述数据层定义本模块所需的基本数据定义;
所述配置层定义本模块所需的数据,将抽象的功能定义形象化;配置层对本模块所需的数据对应着功能进行了适配设计,即设计与实践有对应关系,使得代码更容易阅读;配置层可以被其他模块调用,即整个架构中的所有模块实际只能通过配置层进行资源共享;
所述状态层用于检查整个嵌入式模块状态,引导后续基础软件层的功能实现;状态层通过调用系统状态反馈函数以确认当前状态,以指导基础软件层进行模块状态切换,并对之后功能切换做准备;
所述基础软件层是实现功能所需的本地函数集合,与输出接口层进行区分,以实现内耦合的目标;基础软件层是提供软件模块功能所需的基础条件,整合各个层级间的数据输入,协调功能分配;基础软件层整合外部输入针对内部功能需求做出资源和功能划分,多是一些静态函数,为功能层提供函数输入;
所述功能层基于基础软件层的反馈,根据对应状态做出相应的行为,即接收到睡眠请求,则模块进行睡眠操作,接收到唤醒操作则在唤醒后进行正常操作;
所述输出接口层是提供给其他模块的函数接口或数据接口,其他层不能非法输出数据给外部模块使用,以此实现不同模块间的功能交互;
所述本地化外部接口层只能被状态层和配置层调用,所述数据层可被其他所有层级调用,所述基础软件层可调用状态层和配置数据,其余各层级的模块层之间的引用关系为高层级的模块层被其相邻的下一层级的模块层调用,所述状态层、基础软件层、功能层层级递减。
作为本发明的一种优选方案,所述数据层提供给其他层级的基本数据定义包括本地函数、变量、结构体、联合体。
作为本发明的一种优选方案,所述配置层和输出接口层可供外部模块访问,所述输出接口层将其他模块的输出重新在本模块中进行封装。
作为本发明的一种优选方案,所述数据层和配置层将数据定义为同一命名规则的宏定义或结构体变量,配置层中多用宏定义、结构体以及联合体进行封装,并做好批注,可针对不同项目进行适当修改,显得灵活多用。
作为本发明的一种优选方案,所述状态层所检查的模块状态,包括睡眠请求、唤醒、正常状态;状态层中初始化状态时候对本模块所需的所有数据进行初始化;空闲状态时候时时检测模块状态;工作状态时候执行功能;收到睡眠指令时候关闭或开启对应功能。
作为本发明的一种优选方案,所述模块有且只有输出接口层一个出口,其他层不能非法输出数据给外部模块使用。
作为本发明的一种优选方案,所述配置层定义的数据包括结构体、联合体数据。
作为本发明的一种优选方案,所述配置层包括时间参数、状态参数、通讯数据参数及接口数据参数。
一种嵌入式软件模块设计方法,包括:
步骤S101:整合本模块其他所有层级所需的数据,以构建所述软件模块的数据层;
步骤S102:集成其他模块的接口及数据,以构建所述软件模块的本地化外部接口层;
步骤S103:划分本模块时间参数、状态参数、通讯数据参数及接口数据参数,以构建所述软件模块的配置层;
步骤S104:划分初始化状态、开始状态、空闲状态、工作状态、准备睡眠状态,预睡眠状态,睡眠状态,以构建所述软件模块的状态层;
步骤S105:结合状态层和配置层的反馈来编写功能层所需的本地静态功能函数,以构建所述软件模块的基础软件层;
步骤S106:根据本模块功能需求进行代码编写,以构建所述软件模块的功能层;
步骤S107:针对外部模块需求来封装某些特定功能的函数接口,以构建所述软件模块的输出接口层。
由于采用上述技术方案,本发明具有以下有益效果:
本发明通过层级的划分,可以将整个软件模块设计划分为本地化外部接口层、数据层、配置层、状态层、功能层、基础软件层和输出接口层,并且对每个层级的软件层的功能进行了清晰明了的定义每个层级的软件层之间仅仅有纵向依赖关系而没有横向依赖关系,即每个层级的软件层仅能引用与其相邻的下一层级的软件层,而同层级的模块之间不能相互引用,这样的层级划分方式较为明确,并且每个层级的软件层的功能定义清晰明了,极大地提升了软件的后期可维护性和可扩展性,实现了各个层级模块之间的高内聚低耦合的目标,是一个高可复用的优秀的软件模块设计。
附图说明
图1为本发明的软件模块的结构示意图;
图2为本发明的配置层的结构示意图;
图3为本发明的软件模块设计方法的流程图。
图中:100、本地化外部接口层;200、配置层;300、状态层;310、时间参数;320、状态参数;330、通讯数据参数;340、接口数据参数;400、基础软件层;500、功能层;510、输出接口层。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。
实施例1
如图1、图2所示,本发明所述的一种嵌入式软件模块的具体实施例,包括:本地化外部接口层100、数据层、配置层200、状态层300、功能层500、基础软件层400和输出接口层510:本地化外部接口层100只能被状态层300和配置层200调用,所述数据层可被其他所有层级调用,所述基础软件层400可调用状态层300和配置数据,其余各层级的模块层之间的引用关系为高层级的模块层被其相邻的下一层级的模块层调用,所述状态层300、基础软件层400、功能层500层级递减;
数据层为本模块所有层级提供数据基础提出服务,是每个层级所需的不可缺少的组成部分;数据层提供给其他层级的基本数据定义包括本地函数、变量、结构体、联合体;
本地化外部接口层100的主要功能是将软件模块所依赖的其他模块输入的接口统一到一个层级中,本地化外部接口层100集成有软件模块中配置层200和状态层300所需的其他模块的函数和数据的封装,即调用其他模块的数据只能通过本地化外部接口层100进行调用,有且只有此一条合法路径;
配置层200主要功能是根据模块功能建立本模块依赖的各种数据,包括时间参数310、状态参数320、通讯数据参数330及接口数据参数340,配置层200定义的数据包括结构体、联合体等数据,配置层200是本发明实例建立软件模块的数据库;配置层200对本模块所需的数据对应着功能进行了适配设计,即设计与实践有对应关系,使得代码更容易阅读;配置层200可以被其他模块调用,即整个架构中的所有模块实际只能通过配置层200进行资源共享;
状态层300主要功能是根据本地化外部接口层100输入的其他模块的状态来输出本模块的各个状态,状态层300所检查的模块状态,包括睡眠请求、唤醒、正常状态,状态层300是本发明建立软件模块的状态反馈机制;状态层300通过调用系统状态反馈函数以确认当前状态,以指导基础软件层400进行模块状态切换,并对之后功能切换做准备;
基础软件层400主要功能是输出功能层500所需的各个功能组件,整合各个层级间的数据输入,协调功能分配;基础软件层400整合外部输入针对内部功能需求做出资源和功能划分,多是一些静态函数,为功能层500提供函数输入,基础软件层400是本发明建立软件模块的软件库;
功能层500基于基础软件层400的反馈,根据对应状态做出相应的行为,即接收到睡眠请求,则模块进行睡眠操作,接收到唤醒操作则在唤醒后进行正常操作;
输出接口层510主要功能是将功能层500中其他模块需要的内容进行封装,输出接口层510是本发明建立模块的输出接口,模块有且只有输出接口层510一个出口,其他层不能非法输出数据给外部模块使用。
本实施例中,配置层200和输出接口层510可供外部模块访问,所述输出接口层510将其他模块的输出重新在本模块中进行封装,有效的实现了高内聚的目标,而本地化外部接口层100则是将其他模块的输出重新在本模块中进行封装,使得设计更加模块化,复用起来更灵活方便。
本实施例中,数据层和配置层200将数据定义为同一命名规则的宏定义或结构体变量使得代码阅读更加简单。
通过上述的层级划分,可以将整个软件模块设计划分为五大层级。每个层级的软件层之间仅仅有纵向依赖关系而没有横向依赖关系,即每个层级的软件层仅能引用与其相邻的下一层级的软件层,而同层级的模块之间不能相互引用。这样的层级划分方式较为明确,并且每个层级的软件层的功能定义清晰明了,极大地提升了软件的后期可维护性和可扩展性。软件层的层级依赖关系简单明了,实现了各个层级模块之间的高内聚低耦合的目标,是一个高可复用的优秀的软件模块设计。
如图3所示,本发明所述的一种嵌入式软件模块设计方法,包括:步骤S101:整合本模块其他所有层级所需的数据,以构建所述软件模块的数据层;
步骤S102:集成其他模块的接口及数据,以构建所述软件模块的本地化外部接口层100;
步骤S103:划分本模块时间参数310、状态参数320、通讯数据参数330及接口数据参数340,以构建所述软件模块的配置层200;
步骤S104:划分初始化状态、开始状态、空闲状态、工作状态、准备睡眠状态,预睡眠状态,睡眠状态,以构建所述软件模块的状态层300;
步骤S105:结合状态层300和配置层200的反馈来编写功能层500所需的本地静态功能函数,以构建所述软件模块的基础软件层400;
步骤S106:根据本模块功能需求进行代码编写,以构建所述软件模块的功能层500;
步骤S107:针对外部模块需求来封装某些特定功能的函数接口,以构建所述软件模块的输出接口层510。
本发明提供的软件模块及软件模块设计方法,适用于嵌入式软件开发,软件模块被划分为本地化外部接口层、数据层、配置层、状态层、功能层、基础软件层和输出接口层,且对每个层级的软件层的功能进行了清晰明了的定义,层级之间的依赖关系进行了限定,实现了各个层级模块之间的高内聚低耦合的目标,极大地提高了软件的后期可维护性和扩展性。
本文中部件均为通用标准件或本领域技术人员知晓的部件,其结构和原理都为本领域技术人员可通过技术手册得知或通过常规实验方法获知的,故在此不再做过多记载。
上述虽然对本发明的具体实施例作了详细说明,但是本发明并不限于上述实施例,在本领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化,而不具备创造性劳动的修改或变形仍在本发明的保护范围以内。
Claims (9)
1.一种嵌入式软件模块,其特征在于,包括:本地化外部接口层、数据层、配置层、状态层、功能层、基础软件层和输出接口层:
所述本地化外部接口层集成或重新封装调用外部模块的数据访问接口;
所述数据层定义本模块所需的基本数据定义;
所述配置层定义本模块所需的数据,将抽象的功能定义形象化;
所述状态层用于检查整个嵌入式模块状态,引导后续基础软件层的功能实现;
所述基础软件层是实现功能所需的本地函数集合,与输出接口层进行区分,以实现内耦合;
所述功能层基于基础软件层的反馈,根据对应状态做出相应的行为;
所述输出接口层是提供给其他模块的函数接口或数据接口;
所述本地化外部接口层只能被状态层和配置层调用,所述数据层可被其他所有层级调用,所述基础软件层可调用状态层和配置数据,其余各层级的模块层之间的引用关系为高层级的模块层被其相邻的下一层级的模块层调用,所述状态层、基础软件层、功能层层级递减。
2.根据权利要求1所述的一种嵌入式软件模块,其特征在于:所述数据层提供给其他层级的基本数据定义包括本地函数、变量、结构体、联合体。
3.根据权利要求1所述的一种嵌入式软件模块,其特征在于:所述配置层和输出接口层可供外部模块访问,所述输出接口层将其他模块的输出重新在本模块中进行封装。
4.根据权利要求1所述的一种嵌入式软件模块,其特征在于:所述数据层和配置层将数据定义为同一命名规则的宏定义或结构体变量。
5.根据权利要求1所述的一种嵌入式软件模块,其特征在于:所述状态层所检查的模块状态,包括睡眠请求、唤醒、正常状态。
6.根据权利要求1所述的一种嵌入式软件模块,其特征在于:所述模块有且只有输出接口层一个出口,其他层不能非法输出数据给外部模块使用。
7.根据权利要求1所述的一种嵌入式软件模块,其特征在于:所述配置层定义的数据包括结构体、联合体数据。
8.根据权利要求1所述的一种嵌入式软件模块,其特征在于:所述配置层包括时间参数、状态参数、通讯数据参数及接口数据参数。
9.一种嵌入式软件模块设计方法,其特征在于,包括:
步骤S101:整合本模块其他所有层级所需的数据,以构建所述软件模块的数据层;
步骤S102:集成其他模块的接口及数据,以构建所述软件模块的本地化外部接口层;
步骤S103:划分本模块时间参数、状态参数、通讯数据参数及接口数据参数,以构建所述软件模块的配置层;
步骤S104:划分初始化状态、开始状态、空闲状态、工作状态、准备睡眠状态,预睡眠状态,睡眠状态,以构建所述软件模块的状态层;
步骤S105:结合状态层和配置层的反馈来编写功能层所需的本地静态功能函数,以构建所述软件模块的基础软件层;
步骤S106:根据本模块功能需求进行代码编写,以构建所述软件模块的功能层;
步骤S107:针对外部模块需求来封装某些特定功能的函数接口,以构建所述软件模块的输出接口层。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311641168.6A CN117667064A (zh) | 2023-12-01 | 2023-12-01 | 一种嵌入式软件模块及软件模块设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311641168.6A CN117667064A (zh) | 2023-12-01 | 2023-12-01 | 一种嵌入式软件模块及软件模块设计方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117667064A true CN117667064A (zh) | 2024-03-08 |
Family
ID=90063555
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311641168.6A Pending CN117667064A (zh) | 2023-12-01 | 2023-12-01 | 一种嵌入式软件模块及软件模块设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117667064A (zh) |
-
2023
- 2023-12-01 CN CN202311641168.6A patent/CN117667064A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Marwedel et al. | Code generation for embedded processors | |
CN105808266B (zh) | 代码运行方法及装置 | |
Damm et al. | Understanding UML: A formal semantics of concurrency and communication in real-time UML | |
CN101441566A (zh) | 一种嵌入式平台和在嵌入式平台上动态链接程序的方法 | |
CN109933328B (zh) | 智能合约的扩展编译方法,区块链节点及系统,存储介质 | |
CN106125664A (zh) | 一种嵌入式plc控制系统 | |
WO2002077803A1 (en) | Method and apparatus for dynamic assembly and verification of software components into flexible applications | |
Mittal et al. | DEVSML 2.0: the language and the stack. | |
Damm et al. | A discrete-time UML semantics for concurrency and communication in safety-critical applications | |
CN109542043A (zh) | 一种基于插件的数控系统管理方法及装置 | |
Nierstrasz et al. | A calculus for modeling software components | |
Leue et al. | v-Promela: A visual, object-oriented language for Spin | |
CN103049602B (zh) | 基于模型驱动工程的将aadl组件转换到接口自动机模型方法 | |
CN117667064A (zh) | 一种嵌入式软件模块及软件模块设计方法 | |
Astesiano et al. | Labelled transition logic: an outline | |
Vulgarakis et al. | Formal semantics of the ProCom real-time component model | |
CN102999371A (zh) | 基于Lua脚本的人机界面开发方法及系统 | |
Hirschkoff et al. | Component-oriented programming with sharing: Containment is not ownership | |
Hammond | Is it time for real-time functional programming? | |
de Boer et al. | A fully abstract semantics for UML components | |
Gotzhein et al. | Towards a new formal SDL semantics | |
Basanta-Val et al. | Simplifying the dualized threading model of RTSJ | |
Akentev et al. | Verified type-checker for jolie | |
Tseng et al. | Hierarchical state decomposition for the design of PLC software by applying axiomatic design | |
Kaplan et al. | An architecture for tool integration |
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 |