1.本发明属于计算机技术领域,具体涉及一种图形化编程系统。
背景技术:2.经研究发现,目前大多数嵌入式底层开发都依赖c/c++作为开发语言。然而随着嵌入式开发需求的逐步变化,传统的c/c++无法满足某些需求复杂的嵌入式系统,所以引进python语言进入嵌入式编程系统。由于python是解释性语言,无法满足嵌入式系统的实时性要求,因此需要设计实现编译型嵌入式python(以下简称e-python)并将其融入图形化编程系统中。
技术实现要素:3.本发明的目的是通过以下技术方案实现的。
4.基于目前嵌入式系统对于智能化的需求以及图形化编程系统的便利性,本发明致力于设计并实现以python作为底层编程语言的图形化嵌入式编程系统。
5.根据本发明的一个方面,提供了一种图形化编程系统,包括:
6.上位机编程环境单元、工程文件操作模块、e-python翻译模块、源代码编译模块、串口更新模块;其中,工程文件操作模块将图形化工程文件输入或者输出所述上位机编程环境单元,所述上位机编程环境单元对所述图形化工程文件编程后输出python源码工程文件,所述e-python翻译模块将所述python源码工程文件翻译为c/c++源码工程文件,再由所述源代码编译模块转换为可执行代码,最后经过所述串口更新模块输出给下位机终端设备。
7.进一步地,进一步包括:文件导出模块,用于将所述python源码工程文件导出为标准工程文件。
8.进一步地,所述上位机编程环境单元包括图形化编程环境子单元、环境切换模块,代码编程环境子单元,所述环境切换模块用于在图形化编程环境子单元和代码编程环境子单元之间切换编程模式。
9.进一步地,所述图形化编程环境子单元包括图标代码库、图标配置模块、控件操作模块、硬件配置模块、源代码生成模块、第一信息输出模块;代码编程环境子单元包括代码编辑模块、文本操作模块、图形代码对照模块、第二信息输出模块。
10.进一步地,所述图形化编程环境子单元实现图形化程序的开发,通过拖拽图标控件、连接控件、和/或配置控件操作以实现图形化编程;代码编程环境子单元实现程序的二次编程,在图形化编程生成的源码基础上采用编写文本代码行的形式进行二次编程。
11.进一步地,所述系统使用窗体作为前端界面载体,通过新建项目工程或打开已有工程文件来启动主窗体,采用主窗体和子窗体相结合的设计:主窗体由四个板块组成,分别为图标控件区、图形化编程区、代码显示区、信息提示区;主窗体菜单栏中提供文件操作功能、程序编译功能、串口更新功能、工程文件导出功能、串口调试功能、bios修复功能、硬件
检测功能、信息可视化功能、代码二次编辑功能。
12.进一步地,所述图标控件包括事件控件、执行控件、传感器控件、通信控件、流程控制控件、和子程序控件。
13.进一步地,所述控件操作模块用于连线和控件删除,其中实现控件删除的具体操作为:将待删除控件与其父控件和子控件之间的连线分别清除;将待删除控件中存储的子控件信息复制到该子控件的父控件中,将待删除控件中存储的父控件信息复制到该父控件的子控件中,实现待删除控件的父控件与子控件之间的双向关联;将待删除控件的父控件出口点引出连线至待删除控件的子控件入口点,实现待删除控件的父控件与子控件的连线;最后释放待删除控件占用的资源,完成删除的操作。
14.进一步地,所述源代码生成模块,用于将控件携带的代码按照代码类型分类存放在控件中;控件在图形化编程面板中经过操作实现图形化程序的开发,同时控件中存放的代码将一一对应按照位置生成在源代码文件中;在生成源代码的过程中,首先遍历存放在图形化编程面板中的所有控件,以main控件、事件控件或子程序控件为起始控件,将子控件的代码逐一插入,直至子控件为null即遍历到最后一个控件。
15.进一步地,所述源代码编译模块采用gcc编译器作为编译工具,采用交叉编译的方式。
16.本发明的优点在于:可以满足嵌入式系统的实时性要求,以及智能化的需求,并且在使用上具有很强的便利性。
附图说明
17.通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
18.附图1示出了根据本发明实施方式的图形化编程系统结构图。
19.附图2示出了根据本发明实施方式的图形化编程系统主界面示意图。
20.附图3示出了根据本发明实施方式的二次编程界面示意图。
21.附图4示出了根据本发明实施方式的蜂鸣器控件的配置弹窗和延时控件的配置弹窗示意图。
22.附图5示出了根据本发明实施方式的可视化界面示意图。
23.附图6示出了根据本发明实施方式获取的数据折线图。
24.附图7示出了根据本发明实施方式获取的a类图标示意图。
25.附图8示出了根据本发明实施方式获取的b类图标示意图。
26.附图9示出了根据本发明实施方式获取的c类图标示意图。
27.附图10示出了根据本发明实施方式的图标控件类的uml类图。
28.附图11示出了图标控件库的六种类型控件图标示意图。
29.附图12示出了“内置三色灯”控件三类图标设计示意图。
30.附图13所示为图形化代码生成的源代码示意图。
具体实施方式
31.下面将参照附图更详细地描述本公开的示例性实施方式。虽然附图中显示了本公开的示例性实施方式,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
32.1软件系统框架设计
33.上位机软件实现图形化编程的实质是通过拖拽图标至编程区域,生成相关代码行插入到预先存放好的工程文件中,再通过上位机的编译功能将工程文件编译为可执行文件,最后将可执行文件烧录至下位机中。因此,上位机软件的实现不仅需要设计出软件的框架,还需设计底层项目工程文件的框架,制定统一的文件模板。
34.1.1底层工程文件框架设计
35.表4-1为底层的工程文件架构设计,该架构遵循了嵌入式软件开发的层次性原则和构件化思想。该架构由四个部分组成:cpu、mcu、驱动构件以及应用文件,这四部分层层关联又相互递进满足了软件设计的层次性原则;而构件部分又划分为底层构件、应用构件以及软件构件,并且分别存放在各自文件夹中,契合了构件化的设计思想。
[0036][0037]
当上位机软件对底层工程软件做出处理时,主要由07_nosprg文件夹中的isr.py中断处理函数以及main.py主函数接收指令。上位机任务执行完成时,底层的工程文件根据用户的需求添加了相关代码信息,最终程序按照执行流程得出预期的运行结果。
[0038]
1.2上位机软件框架设计
[0039]
软件的框架设计是软件开发的基础,一个优秀的软件框架可以提高软件的可复用性,降低软件的生产成本以及有利于软件的未来成长。遵循软件工程的设计原则,以高效、安全的系统运行环境为目标,开发出层次分明、结构清晰、功能明确的上位机软件,其框架如图1所示。
[0040]
如图1所示,本发明的图形化编程系统包括:上位机编程环境单元、工程文件操作模块、e-python翻译模块、源代码编译模块、串口更新模块、文件导出模块。其中,工程文件操作模块将图形化工程文件输入或者输出所述上位机编程环境单元,所述上位机编程环境单元对所述图形化工程文件编程后输出python源码工程文件,所述e-python翻译模块将所述python源码工程文件翻译为c/c++源码工程文件,再由所述源代码编译模块转换为可执行代码,最后经过所述串口更新模块输出给下位机终端设备。另外,文件导出模块可以将所述python源码工程文件导出为标准工程文件。
[0041]
上位机编程环境单元包括图形化编程环境子单元、环境切换模块,代码编程环境子单元,所述环境切换模块用于在图形化编程环境子单元和代码编程环境子单元之间切换编程模式。图形化编程环境子单元包括图标代码库、图标配置模块、控件操作模块、硬件配置模块、源代码生成模块、信息输出模块。代码编程环境子单元包括代码编辑模块、文本操作模块、图形代码对照模块、信息输出模块。
[0042]
上位机编程环境由两部分组成:图形化编程环境和代码编程环境。图形化编程环境实现图形化程序的开发,通过拖拽图标控件、连接控件、配置控件等操作以实现图形化编程;代码编程环境实现程序的二次编程,进入该环境后在图形化编程生成的源码基础上采用编写文本代码行的形式进行二次编程,本发明中采用python编写程序。
[0043]
2上位机软件功能实现
[0044]
本发明中上位机软件采用c#winform技术设计编写,使用窗体作为前端界面载体,通过新建项目工程或打开已有工程文件来启动主窗体。上位机软件采用了主窗体和子窗体相结合的设计:主窗体由四个板块组成,分别为图标控件区、图形化编程区、代码显示区、信息提示区。除此之外,主窗体菜单栏中提供文件操作功能、程序编译功能、串口更新功能、工程文件导出功能、串口调试功能、bios修复功能、硬件检测功能、信息可视化功能、代码二次编辑功能等;主窗体中很多功能都可一键实现,无法一键实现的功能如信息可视化、代码二次编辑、串口调试等将提供与之对应的后端.cs文件来实现。
[0045]
2.1主界面
[0046]
主界面由新建或打开工程文件时被创建,将该界面窗体设置为mdi容器便于子窗体可在主窗体下打开。主界面采用weifenluo.winformsui.docking实现图2所示的布局,被划分为四个部分。
[0047]
(1)图标控件区。图标控件区用于存放用于编程的图标控件,采用树式图treeview控件使该模块以树形菜单列表的形式展示出来。
[0048]
(2)图形化编程区。图标控件拖拽至编程区域,在该区域内可实现控件的连接、控件的配置等与编程有关的操作,也是上位机软件中最核心的部分。
[0049]
(3)代码显示区。编程过程中每一次对控件的配置都会在该区域实时的生成python源码。该区域采用tabcontrol控件创建tabpage用于显示main.py和isr.py两个文件内容,代码内容的显示是通过ctexteditmenu类创建文本框实现的。
[0050]
(4)信息提示区。信息提示区也叫信息输出窗口,主要用来提示编译状态、编译信息、串口烧录进度等各类信息,这些信息的输出是通过richtextbox控件绑定各类输出事件来实现的。
[0051]
2.2源代码二次编程界面
[0052]
该界面为上位机软件的子界面,由主界面菜单栏中“进入高级模式”可打开二次编程界面如图3所示。该界面的设计并未重新创建一个子窗体,而是在主界面的基础上作相应的修改。主界面菜单栏由toolstripmenuitem实现,在“进入高级模式”的单击事件中定义一个bool型变量isadvancemode来判断当前是否处于高级模式。若当前处于高级模式即代码编程环境中,则设置图标控件窗口、图形化编程窗口隐藏状态为true,此时界面只剩下代码显示窗口和信息输出窗口。上位机软件中定义了一个设置代码是否只读的函数setreadonly,参数为bool型。在图形化编程环境中,将该函数参数设为true实现此时文本代码不可编写;在文本编程环境中,将参数设为false表示此时代码可编写。
[0053]
2.3控件配置界面
[0054]
控件配置界面在单击控件时以弹窗的形式弹出来实现对图标控件的配置。每个图标控件的配置都需要根据其自身的特性而为其设计配置的内容,如小灯控件需要设置开关状态以及状态反转等,nb初始化控件需要设置其相关参数ip地址、端口号等。通过在配置窗体中添加label、textbox、radiobutton和combobox等控件来设计完成控件的配置功能,同时添加button控件来“确定”控件的配置完成。只有在“确定”按钮被点击后,源码才会在代码区显示。图4为蜂鸣器控件的配置弹窗和延时控件的配置弹窗。
[0055]
2.4可视化界面
[0056]
使用上位机软件开发嵌入式应用时,获取到的外界数据信息可以有多重方式输出。本发明中提供一些外接组件如lcd液晶屏等是一种输出方式。此外,上位机还提供可视化界面也可用作数据的输出。本发明中可视化界面采用折线图的方式来呈现数据,适用于传感器数据的读取可明显观察数据的变化。如图5所示,可视化界面由两部分组成:设置折线图和查看折线图。
[0057]
设置折线图时,需要设定数据获取的时间间隔以及确定传感器类型。传感器类型的下拉框中,只有在接入传感器时才会显示其类型以供选择。折线图生成后会根据数据获取的时间间隔不断的更新折线图,且可以随时停止更新将图以图片形式或excel格式导出实现实际的数据应用。编写可视化界面的测试程序:使用两个温度传感器,采取用手握住传感器等方式使其处于不同环境。获取的数据折线图如图6所示。
[0058]
3图标控件模块设计与实现
[0059]
在图形化编程系统中,图标控件是不可或缺的元素,是实现图形化编程的基本单位。传统的图形化编程软件无法实现图标控件的自由定制,这可能导致因为缺乏某种功能而无法完成某个应用系统的开发。本发明设计了一种采用配置文件的形式来实现图标控件的快速增删,可根据硬件需求提供可自由定制的图标。
[0060]
3.1图标控件可视化分类设计
[0061]
由于图标种类较多,需要将其按照多方位元素进行分类才能更好地管理图标控件库。本发明中将图标按照横向分类设计和纵向分类设计两种方式来设计,横向分类设计的是一种图标的不同形式,纵向分类是将所有图标按特性分类归属。
[0062]
1.图标横向分类设计
[0063]
图标库中一个图标需要设计三种类型的图标,在本发明中分别标记为a类、b类和c类。a类图标如图7所示,表示图标控件区域的控件图标;b类图标如图8所示,表示拖拽到图形化编程区域中的控件图标;c类图标如图9所示,与b类图标相比,图标外围加了一圈深色
标记以表示此时鼠标悬停在该图标上方。本发明设计三类图标来表示编程过程中的三种不同状态,使系统具有友好的编程界面。
[0064]
2.图标纵向分类设计
[0065]
图形化编程中图标控件相当于编程过程中所使用的代码语句,本发明中依据硬件需求以及软件功能需求设计了一套以知识要素进行分类的图标控件。常用的图标分为六种类型,以下为这六种类型控件的详细说明。
[0066]
(1)事件控件。当该类型中的控件被触发时,此时mcu产生中断。此类控件一般需要达到某个条件,比如人体红外传感器探测到人体时,触发中断条件,此时执行isr.py中断函数。
[0067]
(2)执行控件。该类型控件可以向外界输出控制信号,比如蜂鸣器、lcd显示屏等控件都可以向外界传输信号以实现嵌入式系统的实际作用。
[0068]
(3)传感器控件。该类型控件可以向外界获取信息数据,比如加速度传感器、声音传感器等都是由于外界某些相关因素的变化使得传感器接收到数据信息,然后上传到mcu中进行处理。
[0069]
(4)通信控件。该类型控件能实现mcu与外界的数据通信,无论是有线类型还是无线类型的数据传输,都归属于通信控件类。比如nb-iot相关控件、串口相关控件都能实现设备的数据传输。
[0070]
(5)流程控制控件。该类型控件用来定义程序的执行流程和执行逻辑,无论是文本代码行编程还是图形化编程,流程控制模块都是不可缺失的元素。编程中常使用的条件循环、计数循环等都为流程控制控件。
[0071]
(6)子程序控件。该类型控件提供子程序定义及子程序调用,是根据软件功能需求而设计出的控件类型。该类型控件可以对函数功能进行封装,提高图形化代码的可读性。
[0072]
上述控件是目前按照图形化编程系统的需求而设计的6种控件图标类型,用户还可根据自身需求添加控件类型,比如按照嵌入式应用系统分类设计,将该系统所需控件添加或复制到该类型控件中,更加方便实现该系统的图形化编程。
[0073]
3.2图标控件类设计
[0074]
将图标控件按照功能特性分类后,对其进行科学建模,在具象化的图标控件中抽象出层次结构清晰的图标控件类,该类uml图如图10所示。图标控件类实现的主要功能是图标控件对象的创建,创建的对象是图形化代码的重要组成部分,也是实现图形化编程软件的基础。
[0075]
图中icon类是图标控件的基类,包含了图标控件的基本信息,对控件提供通用的方法,本身并不能被实例化。图标控件的基本信息比如:控件类型、控件名称、控件图标、控件显示位置信息等都在icon类中预先定义好。设计icon类作为基类可以使软件程序具备更好的迭代更新能力。
[0076]
generalicon类是icon类的子类,继承icon类中的图标信息以及通用方法,此外generalicon类在icon的基础上给图标对象添加了一个入口点和一个出口点,实现图标的拖拽效果、复制粘贴剪切删除操作以及控件的配置等。generalicon类可实例化,预先设置显示图标以及图标显示的位置等操作以实现图标库的初始化。先将generalicon实例化,在对其进行初始化,上位机软件将根据设置的情况调整布局图标控件库,使其显示在图形化
编程主面板中。上位机中的控件均为generalicon类型。
[0077]
3.3图标控件可配置设计实现
[0078]
传统的图形化编程软件大多都是将图标直接封装集成在图标库中,这导致图形化编程在开发嵌入式系统时有很大的局限性。本发明采用了一种配置文件的方式,将图标控件信息存储在该文件中,在软件程序启动时直接读取配置文件中的信息,即可动态更新图标库的内容。这种采用配置文件的方式实现图标控件的可配置,大大提高软件的可扩展性。
[0079]
1.配置文件格式
[0080]
本发明采用json格式作为数据存储的格式,这是一种轻量级的数据交换格式。采用json格式的配置文件作为控件信息存储的载体,是因为该格式编解码难度低有利于计算机的解析和生成来提高图形化代码编程的效率。此外,采用该格式可以节省图形化控件信息占据内存的空间,提高程序运行的效率。json格式还具有较高的可读性,并且层次结构清晰简洁,使编写和阅读更便捷。
[0081]
json格式由一系列相关的“键值对”组成,以图标控件“lcd显示”的配置信息为例:一个控件信息表示配置文件中的一个对象,以一对大括号将“键值对”涵盖在其中。在大括号中,以英文逗号分隔的每行文字都是一组“键值对”。每组“键值对”由两部分组成:以英文冒号为间隔,冒号左边为“键”,右边为对应的“值”。“键”只能采用字符串的表现形式,“值”可以采用字符串、数组、数字或另一个对象。
[0082][0083]
2.控件信息导入图标库
[0084]
本发明设置了“config.json”作为配置文件将控件信息按照键值对的形式存储在该文件中。启动上位机软件后,程序将自动加载配置文件“config.json”中的控件信息。上位机软件中创建了iconboxinfo类用于加载配置文件,并且解析出控件信息以及可扩展硬件的连接信息。iconboxinfo类中定义了字典变量controlicondic用于存储解析出的内容。
[0085]
如图11所示为图标控件库的六种类型控件图标。外界的可扩展硬件大多放在事件控件、执行空间以及传感器控件这三种类别中,通信控件中存放的是内置的通信组件,而流程控件以及子程序控件中存放的都是软件控件。图标控件库通过设计一个子窗体frmiconbox实现,在用户打开或新建工程文件时,程序将创建该子窗体以生成图标控件模块。在子窗体frmiconbox的构造函数中在树treeviewiconbox上创建类型控件的根节点,并将字典变量controlicondic中的控件按照类型分类分别放入对应的控件根节点中。
[0086]
3.4图标的构件化添加设计
[0087]
由上节内容可知由配置文件“config.json”可实现图标控件的自由添加,本节以“内置三色灯”为例来演示图标的构件化添加过程。
[0088]
1.控件图标横向设计
[0089]
根据2.1节中的图标横向分类设计,为“内置三色灯”控件设计a、b、c三类图标如图
12所示。
[0090]
这三类图标都采用png格式,设计完成后按照标准格式命名,标准格式为:“控件名称+数字.png”,其中以数字1表示a类图标,数字2表示b类图标,数字3表示c类图标。因此将“内置三色灯”控件的三类图标按照a、b、c类的顺序分别表示为“内置三色灯1.png”、“内置三色灯2.png”和“内置三色灯3.png”。完成以上步骤后,将图片添加至指定文件夹中存放。
[0091]
2.控件信息添加
[0092]
根据2.3节中控件的可配置实现方式可知,需要将控件信息按固定格式添加至“config.json”文件中。文件内存储的控件信息为:控件名称、控件类型及控件图标信息。“内置三色灯”控件的json配置信息如下所示。
[0093][0094]
3.创建配置窗体
[0095]
为控件创建单独的配置窗体是为了设置图标控件的参数或者同一个控件不同功能的选择,控件只有配置成功才能保证源码的正确生成。有些控件功能单一且无需设置参数就不用为其单独创建配置窗体。根据三色灯本身特性为该控件设置红、绿、蓝灯的打开、关闭、以及状态切换来实现内置三色灯的调控。以选项点亮蓝灯为例,配置完成后将会生成对应的python代码如下所示。
[0096]
在初始化代码initialation中添加以下python代码行完成控件的初始化:
[0097][0098]
在插入控件位置处的代码insertcode中添加以下python代码行以实现执行控件的操作:
[0099][0100]
4图形化编程环境的搭建
[0101]
图形化编程的实现步骤为:先拖拽图标控件库中的控件至图形化编程区域,再将控件按照一定逻辑连接起来,使其像流程图一样更具可读性。以控件为代码的图形化程序编写好后,会在代码显示区域自动生成源代码。由于本发明中采用python作为源代码,无法直接通过传统的编译技术直接编译成可执行文件。根据嵌入式python应用架构的要求,python程序在进行编译时比c/c++编译增加了一个翻译的步骤。因此,python源码被翻译后通过编译技术可将其编译成计算机能够直接执行的可执行文件,再将可执行文件通过串口烧录至下位机中以实现嵌入式系统的开发。通过分析图形化编程的实现步骤,发现图形化编程环境主要元素有:图标控件、连线、源代码自动生成、编译技术以及串口烧录技术。本节将围绕这些元素来描述图形化编程环境搭建的步骤。
[0102]
4.1控件代码生成设计
[0103]
采用图标代替文本行编程从宏观上看只是图标与图标之间的连线大大降低嵌入式编程的难度,但从微观上看就是将控件所携带的文本代码行按具体位置插入到源代码文件中。将文本代码行插入到源代码文件操作看似简单,实则不然。所有的代码语句不仅要放在正确的位置上,而且本发明中使用的python对于代码格式要求更高。因此,设计了一种将源码分类存放的方式来实现控件携带代码的插入。
[0104]
上位机软件定义了一个code类用来保存控件生成的代码,在generalicon类中定义了code类型的变量code,设置控件配置窗体的本质就是修改code变量里存放的代码。code类中将源代码文件中各部分代码分类定义了成员变量。
[0105]
表4-5code成员解析
[0106][0107]
[0108]
4.2控件实际操作分析与实现
[0109]
用户在使用图形化编程时,无需了解编程的细节。在操作时只需要采用连线的方式将控件连接起来即可,并且编写好的图形化程序需要用户去赋予其实际的应用意义。控件的具体操作主要由连线和控件删除组成,本节中将对实现基本操作的技术进行分析。
[0110]
1.连线操作
[0111]
本发明采用连线的方式决定控件的执行顺序。图形化程序只能从“main”控件、事件控件以及子程序控件开始出发。这三类控件可作为程序的初始控件。
[0112]
控件之间的连线操作与双向链表类似。每个控件都包含parent和son成员,parent表示该控件的父控件,son表示该控件的子控件。同时该控件又为其父控件的子控件,子控件的父控件。使用设置父子控件的方式使两个控件之间产生双向关联以保证控件以绝对的顺序排列。
[0113]
控件拖拽至图形化面板且未连线时,parent和son的值均为null。generalicon中定义成员变量inpic和outpic对应控件的入口点和出口点,上位机通过这两个成员完成控件之间的连线操作。以a控件和b控件之间的连线操作为例:鼠标点击a控件的出口点,从a控件出口点处引出一条带有箭头的线,此时连线操作开始,上位机记录保存a控件对象;鼠标此时停在连线的箭头处,将鼠标点击b控件的入口点,通过上位机判断a控件与b控件连线是否合法,若合法则使用坐标定位的方式将两个控件相连接;最后,上位机将a控件的子控件设置为b控件,b控件的父控件为a控件。
[0114]
2.控件删除操作
[0115]
控件在图形化编程面板可实现控件的删除操作。若控件未与其他控件连接,可将该控件在图形化编程面板上直接删除,包含控件的所有信息。若控件已与其他控件连接,删除该控件时则需要先从连线中分离。该操作也类似于在双向链表中删除一个节点。由于在连线中的控件与其父控件、子控件都是双向保存,因此需要分别修改该控件的父控件与子控件以实现该控件从程序中剥离出来。实现控件删除的具体操作:将待删除控件与其父控件和子控件之间的连线分别清除;将待删除控件中存储的子控件信息复制到该控件的父控件中,将待删除控件中存储的父控件信息复制到该控件的子控件中,实现待删除控件的父控件与子控件之间的双向关联;将待删除控件的父控件出口点引出连线至待删除控件的子控件入口点,实现待删除控件的父控件与子控件的连线;最后释放待删除控件占用的资源,完成删除的操作。
[0116]
4.3源代码自动生成技术
[0117]
由4.1节内容可知,控件携带的代码按照代码类型分类存放在控件中。控件在图形化编程面板中经过相关操作实现图形化程序的开发,同时控件中存放的代码将一一对应按照位置生成在源代码文件中。
[0118]
在生成源代码的过程中,上位机首先遍历存放在图形化编程面板中的所有控件,以“main”控件、事件控件或子程序控件为起始控件,将其子控件的代码逐一插入,直至子控件为null即遍历到最后一个控件。如图13所示为图形化代码生成的源代码。
[0119]
4.4编译技术与烧录技术
[0120]
1.程序编译技术
[0121]
图形化程序编写完成生成源代码后,需要通过编译技术将源代码编译成计算机可
直接执行的文件,一般采用交叉编译的方式。本发明采用gcc编译器作为编译工具。
[0122]
采用交叉编译的模式需配置大量的参数,本发明中使用gnu编译器中make工具的批处理功能可提高程序编译的效率。make工具执行批处理文件makefile中的指令,而makefile中定义了程序的编译规则和链接规则。编译规则中,使用“arm-none-eabi-gcc”工具实现“.s”和“.c”文件到中间文件“.o”文件的转换;编译原则中,使用“arm-none-eabi-g++”工具和“arm-none-eabi-objcopy”工具实现中间文件“.o”文件到可执行文件“.hex”文件和“.elf”的转换生成。
[0123]
上位机软件使用cmd窗口调用make工具执行makefile文件实现程序编译的操作,其关键代码如下所示。
[0124][0125]
上位机软件还通过绑定信息输出事件来获得编译过程中的信息提示,其关键代码如下所示。
[0126][0127]
2.程序烧录技术
[0128]
程序通过编译后生成可执行文件,上位机将可执行文件烧录到下位机终端设备中实现设备的运行。上位机中在主界面菜单栏中提供了一键烧录的功能。在烧录过程中,首先要确认设备的连接,只有在设备连接成功的基础上才能完成可执行文件的烧录。设备连接成功后,载入通过编译生成的hex文件。hex文件是一种用来存储程序机器码的文件格式,文件中每行包含一条hex记录,每条记录包含6个字段分别为:开始标记、数据长度、偏移量、记录类型、数据区以及校验和。上位机需要判断hex是否合法,若合法则将hex文件解析为帧格式数据。上位机将解析完成的帧格式数据一帧一帧向设备发送,每一帧数据都需要得到设备的正确应答才能进行下一帧数据的发送,直至所有数据帧发送完成,机器码成功烧录至终端设备。
[0129]
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。