CN106569838A - 基于qp框架的代码自动生成器 - Google Patents

基于qp框架的代码自动生成器 Download PDF

Info

Publication number
CN106569838A
CN106569838A CN201611013753.1A CN201611013753A CN106569838A CN 106569838 A CN106569838 A CN 106569838A CN 201611013753 A CN201611013753 A CN 201611013753A CN 106569838 A CN106569838 A CN 106569838A
Authority
CN
China
Prior art keywords
state
information
initial
class
code generator
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
Application number
CN201611013753.1A
Other languages
English (en)
Inventor
陈胜勇
程徐
许金山
唐庭龙
刘梦娜
赵萌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tianjin University of Technology
Original Assignee
Tianjin University of Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tianjin University of Technology filed Critical Tianjin University of Technology
Priority to CN201611013753.1A priority Critical patent/CN106569838A/zh
Publication of CN106569838A publication Critical patent/CN106569838A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors

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

本发明提供了一种基于QP框架的代码自动生成器,可将按一定规范绘制的UML状态图转化成可在量子化平台上运行的C++代码的工具。该工具利用ODG文件与XML文件的关系,首先将以OpenOffice绘制odg形式的状态图文件转化成相应的XML文件,并从中提取出包含程序状态图静态和动态元素的节点信息,以Visual Studio 2012为环境搭建代码自动生成器工具进一步将状态图信息直接转化成具有一定规范的C++代码。本发明可以有效避免繁琐的代码编写工作,减轻因代码编写错误产生的程序调试工作,大大提高了软件开发的效率。

Description

基于QP框架的代码自动生成器
技术领域
本发明实现了一种可将按一定规范绘制的UML状态图转化成可在量子化平台上运行的C++代码的工具。
背景技术
随着软件技术的不断普及与提高,软件产品的需求一直呈现出日益增长的趋势。人们一边在享受计算机在工作和生活中带来的巨大便利的同时,也对计算机软件和硬件的开发提出了更多的要求。这些要求具体表现在,一是软件的开发所要处理的环境变得越来越复杂,功能要求更加全面,二是用户的需求多变,三是系统要更加安全可靠和稳定。而在软件工程高度发展的今天,很多软件开发人员仍然使用手工编码的方法。这种传统的开发方式通常效率低而且开发周期长,并且存在大量的重复劳动。这样当遇到大型复杂软件项目会出现延期、成本超出计划,甚至中途夭折等问题,所以这将引起软件开发人员对于如何降低软件开发和维护成本、提高开发效率、减小需求变更对系统的影响以及延长系统的生命周期进行思考。可是传统的开发手段总是很难完善这种问题。这就需要一种可以避免低水平重复开发、能实现标准化生产的软件开发新方式,以帮助企业应对快速变化的市场环境,而自动代码生成技术在一定程序上解决了这个问题。
(1)量子框架(QP)
量子框架是是基于事件驱动并发状态机的一种应用框架。传统方法中用户主要考虑的是共享资源和各种同步机制,而量子框架将共享资源封装在一个专用的活动对象中,系统的其余部分共享活动对象,而不是直接共享资源。每一个活动对象都是一个单独的活动线程,对应着不同的任务。不同活动对象之间订阅和发布不同的事件实例,事件实例通过量子框架来进行分发。
1)QF通用结构
QF的结构对于任何基于活动对象的框架来说都是典型的。QF的通用结构具有以下特点:
QF是分层设计的,它以实时系统多线程为基础,并提供事件队列和内存池的服务。
QF提供活动对象基类,以派生具体的活动对象。活动对象为活动对象分配一个执行线程和一个事件队列。
基于QF的应用程序通过从活动对象和事件派生子类来扩展框架。应用程序通过量子框架API使用QF的通信和定时服务,不需要直接访问实时系统API。
2)活动对象
活动对象是QF中的主要元素,可以与其它活动对象并发执行,并通过发送和接收事件来于他们通信。活动对象一个最重要的特性是它不透明的封装壳,他将活动对象的内部结构与外部环境严格地分离开来,唯一能从外面或里面穿过这个壳的对象是事件实例,这与面向对象思想中的类是非常相似的,被保护、或私有的数据成员和函数成员只能通过共有的成员函数来与外界进行沟通。每个活动对象可以看作是一个独立的任务,所有QF活动对象都是从QActive继承而来,QActive作为活动对象的基类有三个特征:(1)它是一个状态机,继承自QHsm类;(2)它有一个事件队列,作为与其他活动对象通信的外部接口;(3)它有一个执行线程。另外,QActive类是可配置的,例如myPrio可以由用户来定义该活动对象特有的一些属性。
3)状态转换及发布订阅模型
在QF中每个具体的活动对象都是一个状态机,因为它间接来源于QHSM基类,使得行为继承元模式的全部能力和方便都可以立即用于构造活动对象的行为。在应用级,通常可以将一个活动对象的所有其他方面都提取出去,而将它仅仅看做是一个状态机。这样以来,用户就不需要关注每一个活动对象的其他附加元素,包括事件队列或执行线程等,只需将设计重点放在状态机的状态转换,信号的细粒度上来。状态机的状态转换是由量子事件处理器(QEP)来完成的,
QEP作为应用系统的一部分与量子框架一起管理整个状态机的运转。QEP支持层次式状态机,完成任意状态的进入/退出动作。量子框架还提供了一种轻量级的发布-订阅机制,来解决活动对象间事件交换。事件订阅者向量子框架(QF)订阅事件(通过QActive_subscribe_()、QActive_unsubscribe_()、QActive_unsubscribeAll_()),事件产生者将事件发布到框架中(通过QF_publish()),由量子框架来分发事件。
(2)UML状态机
状态机是一种逻辑上的流程机,用于描述一个对象在其生命周期中的动态行为,表现对象响应事件所经历的状态序列以及伴随的动作。由于现在的程序设计功能越来越强大和复杂为了简化人们的逻辑思维过程,所以引入一个状态机的概念。当我们打开思路,把状态机作为一种思想导入到程序中去时,就会找到解决问题的一条有效的捷径。有时候用状态机的思维去思考程序该干什么,比用控制流程的思维去思考,可能会更有效。这样一来状态机便有了更实际的功用。比如说一个按键命令解析程序,就可以被看做状态机,本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。一般来说,在一个结构完整清晰且执行效率非常高效的程序中,都能发现其中有状态机的性质。
UML状态机可归纳为4个要素,即现态、条件、动作、次态。这样的归纳,主要是出于对状态机的内在因果关系的考虑。“现态”和“条件”是因,“动作”和“次态”是果。①状态(State)指的是对象在其生命周期中的一种状况,处于某个特定状态中的对象必然会满足某些条件、执行某些动作或者是等待某些事件;②事件(Event):当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。③动作(Action):条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。④转换(Transition)指的是两个状态之间的一种关系,表明对象将在第一个状态中执行一定的动作,并将在某个事件发生同时某个特定条件满足时进入第二个状态。⑤次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。如果我们进一步归纳,把“现态”和“次态”统一起来,而把“动作”忽略(降格处理),则只剩下两个最关键的要素,即:状态、迁移条件。
状态机也可以分为两大类,即有限状态机(Finite State Machine,FSM)和层次状态机(Hierarchical State Machine,HSM)两种。本发明采用层次状态机。
层次状态机基本的概念和状态机一样,也是用来表现各种不同状态、不同约束、状态迁移。层次状态机可以将一些状态节点的归结成一个超级状态,共享一些状态跳转逻辑。相对于状态机,它主要提供了可重用得跳转条件。绝大多数层次状态机设计的时候,每一个子状态通常只包含在一个Super-States里面。例,如果A,B两个Super-State都包含相同的子状态,则A,B分别添加两个不同的子状态实例。超级状态跳转依然需要考虑很多不同的子状态的情况。
层次状态机实现形式中的行为继承与类继承之间的类相似,层次状态机应该能够模拟下列属于C++对象模型:使用和维护简单,应允许状态机容易改变,不应要求转换连接的人工代码,所需要的修改限制在代码的一个地方还有提供好的运行-时间效率和小的存储。
为了满足上面的要求,层次状态机的实现着重于下面的主要元素,完全支持行为继承的层次关系用状态进入和退出动作实现有保证得初始化和清除通过类继承支持规定的状态模型。层次状态机的基本要素和有限状态机类似。也包括如下:
1)状态:在层次状态的情形下,状态处理器必须返回朝状态,这导致层次状态处理特征标记的递归定义。
2)进入/退出动作和初始状态:这些元素是状态专有的特征,在转态中他们被定义,而特别的是与到达状态所进过的路径无关,状态处理机可以用一般的switch语句规定适当的用例处理这些信号,可以自由的执行相应信号的操作。
3)状态转换:状态处理机用Q_TRAN实现状态转换,并且在原状态的上下文中执行动作。采用层次状态模型,将状态机中各组成部分分别解除关联,逐个进行分析,可以降低问题复杂度。所以,层次状态机在存在状态特性方面,在许多软件设计开发中有着很强的适用性。而发明中的工具设计也是依于层次状态建模,简便直观。
层次状态机的代码特点如附图1所示,附图1是QP编程框架C/C++版本的一个状态函数。可以看出基于QP量子框架的C/C++版本有着其显著的特点:①每一个状态函数都有着规范的写法QState ClassA::StateA(ClassA*const me,QEvt const*const e)。在同一个类中,只需要修改不同的状态,其余的部分均相同。②状态函数首先需要指明属于该状态的父状态,指明父状态的方法也是规范的。父状态的指明方法如下:static constQStateHandler superstate=(QStateHandler)&ClassA::FatherState;③状态通过switch开关来选择信号量,信号量的选择首先需要指明默认开关量指向哪儿,而默认情况下指向父状态。再者就是必须指明Q_ENTRY_SIG信号的动作。这两个信号的行为均是由QP框架决定的,每一个状态的开关量必须要这两个信号。④在switch开关选择其他信号量时,需要指明状态的动作,所谓状态的动作是指在此信号下,是否有状态的跳转或需要进行哪些情况处理等。
发明内容
本发明的目的在于开发出一种代码生成器,将UML状态图直接转换成可以运行的程序代码。
为了实现上述目的,本发明的方案是:
基于QP框架的代码自动生成器,包括以下步骤:
步骤一,基于OpenOffice Draw的符合一定规范的状态图设计的步骤;步骤二,OpenOffice Draw文本信息的提取的步骤;步骤三,将提取的零散的信息整理成符合C/C++语言规范和QP编程规范的代码的步骤。
进一步的,步骤一中包括:
1)在OpenOffice的画图模块中设计第一个方框中State表示整个状态的名称,第二个方框中表示状态中的一些事件,将在此状态下需要处理的事件在第二个方框内进行描述;
2)进行转换设计,将其属性名称设置为transition,用transition连接不同的两种状态信息,在满足转换条件guard1的情况下,状态state1向状态state2跳转;如果某一条件发生变化,那么状态state2转换成状态state1,其中transition的转换方向通过判断transition的起点状态ID和终点状态ID来判断;
3)初始化Initial设计,导出xml文件后,状态初始的描述均在XML中的“initial”节点下,“initial”节点正是在进行状态图设计时所设计的状态初始化initial的属性名称;initial状态也有一个属于它的唯一的ID,此时结合transition的条件可以查找到初始状态的转换;
4)预定义图设计,添加一个程序预定义模块对代码进行设置,使用户更加自主的添加库文件,并利用OpenOffice设计程序预定义之时需将每一个方框的属性名称设计为对应的各个模块。
进一步的,步骤二中包括:
1)根据odg文件的路径,读取该文件到内存中得到一个数据流对象,使用C#中ZipFile类库对该对象进行解压得到里面所有的文件列表,找到其中一个名为content.xml的文件,读取该文件的所有内容,并使用xmlDocument类库将内容初始化一个xmlDocument的实例对象;
2)为了最终初始化一个层次状态机类HSM类的实例对象,需要先初始化对象,遍历步骤1)得到的xmlDocument实例对象,读取xml对象中预定义图的信息,并将信息逐一赋值到HSM类实例对象中,依次遍历xmlDocument实例对象的各个节点,依次读入状态图中状态,转换,初始伪状态等元素的信息,并生成对象抽象类的对象并加入到HSM类实例对象中,最后得到一个包含了所有状态图和预定义图所有信息的HSM类实例对象,为后续将信息转化为代码做准备。
进一步的,步骤三中包括:
1)将该实例对象中包含的预定义图中的信息通过GenerateHeader方法生成目标的.h文件;
2)将实例对象中的状态图信息通过GenerateCode方法生成.cpp文件。
本发明的有益效果是:考虑到代码运行对操作系统环境的要求,特别是嵌入式系统程序开发的需求,该工具引入量子化平台(QP)编程框架,实现了以QP编程框架为基础设计的状态图到C++代码的直接转化。该工具可以有效避免繁琐的代码编写工作,减轻因代码编写错误产生的程序调试工作,大大提高了软件开发的效率。克服了QP官方提供的代码生成工具QM的以下缺点:
(1)不够人性化,学习曲线较高,比较难懂;
(2)代码生成的格式比较单一,不利于集成到自己的工程中;
(3)不能够根据自己的代码需求进行调整。
附图说明
图1 QP编程框架C/C++版本状态函数图;
图2框架流程图;
图3状态图;
图4状态命名图;
图5连接图之间的转换;
图6预定义图设计;
图7命名空间设置;
图8读取xml文件过程;
图9代码生成流程图;
图10例子UML状态图实现;
图11代码生成图;
图12代码执行结果图。
具体实施方式
下面结合附图对本发明做进一步说明。
参见附图2,本发明的方案是:步骤一,基于OpenOffice Draw的符合一定规范的状态图设计的步骤;步骤二,OpenOffice Draw文本信息的提取的步骤;步骤三,将提取的零散的信息整理成符合C/C++语言规范和QP编程规范的代码的步骤。每一步骤中的详细步骤是:
(1)UML状态图的绘制规范
1)状态(state)。在OpenOffice的画图(draw)模块中设计如图3所示“状态”,图中第一个方框中State表示整个状态的名称,第二个方框中表示状态中的一些事件,比如进入、进出动作事件。因为QP框架是一个事件型框架,所以可以将在此状态下需要处理的事件在第二个方框内进行描述。
当然,为了在进行XML解析的时候能快速的定位并分辨出这个图是一个状态,我们最好将此图的名称设置为state,如图4所示。
2)转换(transition)。这个转化有时需要一定的条件,称之为“Guard”。同样,进行transition设计之时,和上述状态图绘制一样,我们将其属性名称设置成“transition”,方便XML文件解析时使用。接下来,我们用transition连接不同的两种状态信息,在满足guard1条件的情况下,状态state1向状态state2跳转,如图5中Guard1箭头所指;如果某一条件发生变化,那么状态state2转换成状态state1,它的表示方法则是从状态1指向状态2的箭头,其中transition的转换方向通过判断transition的起点状态ID和终点状态ID来判断,如图5所示。
同样,我们可以知道状态转化的所有描述是在XML中的“transition”节点下,“transition”节点正是在进行状态图设计时所设计的状态转换的属性名称,"draw:start-shape"里是transition的起点状态ID,"draw:end-shape"里描述的是终点状态的ID,而text:p是代表transition的文本信息,我们通过判断transition的起点状态ID和终点状态ID来判断transition的转换方向;
3)初始化Initial设计。和上面其他元素一样,我们将Initial的属性名称改称“initial”。同理导出xml文件后,状态初始的描述均在XML中的“initial”节点下,“initial”节点正是在进行状态图设计时所设计的状态初始化(initial)的属性名称;initial状态也有一个属于它的唯一的ID,此时结合transition的条件可以查找到初始状态的转换。
4)预定义图设计。在自动代码生成器里,为了更加方便的设计自己的代码架构,能够让用户更加自主的添加库文件,通常会添加一个程序预定义模块对代码进行设置。如图6所示。
为了能够解析图中各个模块,利用OpenOffice设计程序预定义之时需将每一个方框的属性名称设计为对应的各个模块。
1)命名空间(namespace)。将输入框的名称设置为namespace,如图7所示。
2)class Constructor Prototype设计。将输入框的名称设置为classConstructor Prototype。
3)同理,后面的local object argument设计,base class设计,base classarguments设计,additional Initializaiton设计,include设计将输入框的名称设置为各对应名字的属性。
(2)信息提取
该模块主要的分为两个大步骤:
1)根据odg文件的路径,读取该文件到内存中得到一个数据流对象,使用C#中ZipFile类库对该对象进行解压得到里面所有的文件列表,找到其中一个名为content.xml的文件,读取该文件的所有内容,并使用xmlDocument类库将内容初始化一个xmlDocument的实例对象。图8所示为该步骤的一个流程图展示。
代码实现中我们创建了转换类(parser类),此类中的主要的静态方法ParseOdgFile,负责将输入的一个odg文件的路径然后进行一系列的处理返回一个层次状态机的实例对象,而我们这一步骤主要包含在此类的子方法ReadContent中,它负责将odg文件读入并解压,找到content.xml,最终读入该xml文件到内存流中并返回。
2)为了最终初始化一个层次状态机类(HSM类)的实例对象,我们需要先初始化对象,遍历上一步骤得到的xmlDocument实例对象,结合之前分析的存储规则,读取xml对象中预定义图的信息,并将信息逐一赋值到HSM类实例对象中,依次遍历xmlDocument实例对象的各个节点,依次读入状态图中状态,转换,初始伪状态等元素的信息,并生成上述(1)UML状态图的绘制规范中对象抽象类的对象并加入到HSM类实例对象中,最后得到一个包含了所有状态图和预定义图所有信息的HSM类实例对象,为后续将信息转化为代码做准备。图9为该步骤的流程展示。
代码中我们创建了Diagram类来帮助进行转换,它提供了一个静态方法名为ParseDefinition,该方法将初始化一个Hsm类对象,并从xmlDocument实例对象中找到预定义图中的每一个节点的内容,并将对应的数据取出,赋值到hsm的属性中。
(3)代码生成
通过上一节(2)信息提取,我们得到了一个包含预定义图和状态图所有信息的HSM类实例对象,接下来的生成器的工作就是将该实例对象生成目标代码,分为两个步骤:
1)将该实例对象中包含的预定义图中的信息通过GenerateHeader方法生成目标的头文件.h文件;
2)将实例对象中的状态图信息通过GenerateCode方法生成实现文件.cpp文件。图9展示了代码生成的主要流程过程。
代码中我们创建了Code类来进行代码生成的工作,生成的工作包括两部分:头文件(.h文件)和实现文件(.cpp文件)的生成,它们对应的函数是GenerateHeader方法和GenerateCode方法。
GenerateHeader方法的作用是将上一步hsm对象中包含的状态图信息进行解析和整理,生成头文件代码到指定的文件存储位置。
本发明通过生成一个在嵌入式操作系统中控制LED灯开启和关闭状态的程序来检验自动代码生成器的执行结果。该功能即控制LED灯在一定条件下,切换到不同的状态。具体功能需求分析如下:程序启动后,LED灯应当处于通电状态。默认进入的是OFF状态,即关闭状态,启动后设置一个定时器条件,间隔5s触发一次,一旦触发器事件到来,程序将从OFF状态进入ON状态,即开启状态,等到下一次定时事件到来,程序又回到OFF状态。
基于上述介绍的QP框架和层次状态机等知识,该系统对象有一个父状态,称之为Run状态,即现实中LED灯通电状态,和两个子状态,即OFF和ON。该两个子状态继承于父状态,对象进入父状态后将立即进入OFF,等到有一个定时事件产生后,对象将跳转到ON,同样,该状态下系统又接收到定时事件之后将回到OFF,如此反复进行状态的切换。
1)根据层次状态机的概念,状态图有一个入口点,即上文说指的初态,我们通过OpenOffice软件的绘图功能,拖入一个实心的圆点,并将该图的名称设置为initial。需要注意的是该名称非常重要,我们将在后续xml文件解析中通过寻找节点中name为initial的节点,判断此条节点数据为初态。
2)根据上面的需求,程序一旦运行后将直接进入父状态Run,状态的改变需要有一个转换(transition),我们在软件中拖到一个箭头,并将它的名称设置为transition,这样在xml解析中如果节点的name为transition,我们就可以知道它表达的是转换的意思,而这个转换连接的是初态到父状态Run。附图10就是把上述操作步骤使用UML状态图的展现。
将绘制完毕的状态图存储为ODG后缀的文件格式,运行生成器代码,最终得到两个Led.h和Led.cpp两个文件。其中led.h头文件中定义了4个不同的状态,initial状态,父状态run,两个子状态led on和led off,和一个时间控制变量delay,还有错误控制mFaultInfo变量。得到代码生成器得到的代码文件后,需要使用VS2012再建立一个项目,导入QP框架的相关文件,如附图11所示。运行该项目,记录测试结果,如附图12所示,满足系统的需求,所以检测生成代码成功。
需要说明的是,以上所述仅为本发明优选实施例,仅仅是解释本发明,并非因此限制本发明专利范围。对属于本发明技术构思而仅仅显而易见的改动,同样在本发明保护范围之内。

Claims (4)

1.基于QP框架的代码自动生成器,其特征是包括以下步骤:步骤一,基于OpenOfficeDraw的符合一定规范的状态图设计的步骤;步骤二,OpenOffice Draw文本信息的提取的步骤;步骤三,将提取的零散的信息整理成符合C/C++语言规范和QP编程规范的代码的步骤。
2.根据权利要求1所述的基于QP框架的代码自动生成器,其特征是步骤一中包括:
1)在OpenOffice的画图模块中设计第一个方框中State表示整个状态的名称,第二个方框中表示状态中的一些事件,将在此状态下需要处理的事件在第二个方框内进行描述;
2)进行转换设计,将其属性名称设置为transition,用transition连接不同的两种状态信息,在满足转换条件guard1的情况下,状态state1向状态state2跳转;如果某一条件发生变化,那么状态state2转换成状态state1,其中transition的转换方向通过判断transition的起点状态ID和终点状态ID来判断;
3)初始化Initial设计,导出xml文件后,状态初始的描述均在XML中的“initial”节点下,“initial”节点正是在进行状态图设计时所设计的状态初始化initial的属性名称;initial状态也有一个属于它的唯一的ID,此时结合transition的条件可以查找到初始状态的转换;
4)预定义图设计,添加一个程序预定义模块对代码进行设置,使用户更加自主的添加库文件,并利用OpenOffice设计程序预定义之时需将每一个方框的属性名称设计为对应的各个模块。
3.根据权利要求1所述的基于QP框架的代码自动生成器,其特征是步骤二中包括:
1)根据odg文件的路径,读取该文件到内存中得到一个数据流对象,使用C#中ZipFile类库对该对象进行解压得到里面所有的文件列表,找到其中一个名为content.xml的文件,读取该文件的所有内容,并使用xmlDocument类库将内容初始化一个xmlDocument的实例对象;
2)为了最终初始化一个层次状态机类HSM类的实例对象,需要先初始化对象,遍历步骤1)得到的xmlDocument实例对象,读取xml对象中预定义图的信息,并将信息逐一赋值到HSM类实例对象中,依次遍历xmlDocument实例对象的各个节点,依次读入状态图中状态,转换,初始伪状态等元素的信息,并生成对象抽象类的对象并加入到HSM类实例对象中,最后得到一个包含了所有状态图和预定义图所有信息的HSM类实例对象,为后续将信息转化为代码做准备。
4.根据权利要求1所述的基于QP框架的代码自动生成器,其特征是步骤三中包括:
1)将该实例对象中包含的预定义图中的信息通过GenerateHeader方法生成目标的.h文件;
2)将实例对象中的状态图信息通过GenerateCode方法生成.cpp文件。
CN201611013753.1A 2016-11-18 2016-11-18 基于qp框架的代码自动生成器 Pending CN106569838A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611013753.1A CN106569838A (zh) 2016-11-18 2016-11-18 基于qp框架的代码自动生成器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611013753.1A CN106569838A (zh) 2016-11-18 2016-11-18 基于qp框架的代码自动生成器

Publications (1)

Publication Number Publication Date
CN106569838A true CN106569838A (zh) 2017-04-19

Family

ID=58542190

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611013753.1A Pending CN106569838A (zh) 2016-11-18 2016-11-18 基于qp框架的代码自动生成器

Country Status (1)

Country Link
CN (1) CN106569838A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107943470A (zh) * 2017-11-23 2018-04-20 四川长虹电器股份有限公司 云管理平台代码生成与回收的系统与方法
CN110502237A (zh) * 2019-09-07 2019-11-26 创新奇智(广州)科技有限公司 一种基于状态图的软件界面原型设计方法与工具
CN110543095A (zh) * 2019-09-17 2019-12-06 南京工业大学 一种基于量子框架的数控齿轮倒角机控制系统的设计方法
CN111614604A (zh) * 2019-02-26 2020-09-01 阿里巴巴集团控股有限公司 一种代码文件生成方法和装置
CN114924727A (zh) * 2022-05-31 2022-08-19 重庆长安新能源汽车科技有限公司 一种软件代码框架自动生成系统及方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1249045A (zh) * 1996-12-25 2000-03-29 埃米尔泰克有限公司 实现层次状态图的装置和对其有用的方法及设备
CN101295246A (zh) * 2008-05-28 2008-10-29 浙江大学 一种从UML模型转换至SmartC模型的转换方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1249045A (zh) * 1996-12-25 2000-03-29 埃米尔泰克有限公司 实现层次状态图的装置和对其有用的方法及设备
CN101295246A (zh) * 2008-05-28 2008-10-29 浙江大学 一种从UML模型转换至SmartC模型的转换方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
赵刚: "面向嵌入式系统中量子框架的状态机代码生成技术的研究与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107943470A (zh) * 2017-11-23 2018-04-20 四川长虹电器股份有限公司 云管理平台代码生成与回收的系统与方法
CN107943470B (zh) * 2017-11-23 2020-10-23 四川长虹电器股份有限公司 云管理平台代码生成与回收的系统与方法
CN111614604A (zh) * 2019-02-26 2020-09-01 阿里巴巴集团控股有限公司 一种代码文件生成方法和装置
CN111614604B (zh) * 2019-02-26 2022-06-14 阿里巴巴集团控股有限公司 一种代码文件生成方法和装置
CN110502237A (zh) * 2019-09-07 2019-11-26 创新奇智(广州)科技有限公司 一种基于状态图的软件界面原型设计方法与工具
CN110543095A (zh) * 2019-09-17 2019-12-06 南京工业大学 一种基于量子框架的数控齿轮倒角机控制系统的设计方法
CN114924727A (zh) * 2022-05-31 2022-08-19 重庆长安新能源汽车科技有限公司 一种软件代码框架自动生成系统及方法
CN114924727B (zh) * 2022-05-31 2024-06-04 深蓝汽车科技有限公司 一种软件代码框架自动生成系统及方法

Similar Documents

Publication Publication Date Title
CN106569838A (zh) 基于qp框架的代码自动生成器
CN108885545B (zh) 用于实时数据流编程语言的工具和方法
US10235265B2 (en) Sequentially constructive model of computation
Nurkiewicz et al. Reactive programming with RxJava: creating asynchronous, event-based applications
Poigné et al. The synchronous approach to designing reactive systems
Pohl et al. vMAGIC—automatic code generation for VHDL
Daniels et al. RxJS in Action
Hilderink Managing complexity of control software through concurrency
Bardaro et al. AADL for robotics: a general approach for system architecture modeling and code generation
CN116756338A (zh) 面向ar装配引导的工艺知识图谱构建方法及系统
Spaanenburg et al. Cloud connectivity and embedded sensory systems
CN106104470B (zh) 动作设计装置
CN102662670B (zh) 一种场景式无核嵌入式实时操作系统的实现方法
Chen et al. Integrating base object model components into DEVS-based simulation
Caracaş Modeling, compiling, and efficiently executing business processes on resource-constrained wireless sensor networks
Whittle et al. Trends in structure-oriented environments
Patel et al. Ingredients for Successful System Level Design Methodology
Esposito et al. Reactive Programming for. NET Developers
Angelov et al. Model-based design and verification of embedded software
Orlic SystemCSP: A graphical language for designing concurrent component-based embedded control systems
Russo CAD Tools for Emerging Nanotechnologies
Nguyen Statecharts for modern web application state management
Gurdeep Singh Taming nondeterminism: programming language abstractions and tools for dealing with nondeterministic programs
HAMAMA Detecting Design Patterns by Learning Embedded Code Features
Denuzière et al. Piglets to the Rescue: Declarative User Interface Specification with Pluggable View Models

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
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20170419