一种面向wscn的图形化编程系统的制作方法_2

文档序号:9396676阅读:来源:国知局
完后进行重新链接就行。在具体的程序实现过程中,对每个图标都要根据函数的返回值、参数等信息进行设置。
[0050](三)与MCU无关的通用图形化编程层
[0051]与MCU无关的通用图形化编程层实现了一个图形化编程的嵌入式开发平台,利用可定制图元中间层提供的构件图标,按照标准流程图方式进行程序的组织,就可以实现预期设计的程序功能。该层已经与MCU的类型无关,主要包括:构件图标管理单元、图形化编程控制单元。
[0052]构件图标管理单元主要完成构件图标的分类组织功能。构件图标包括硬件模块构件图标、功能函数构件图标和流程控制构件图标。硬件模块构件图标与硬件模块的驱动程序一一对应,主要实现MCU的硬件功能;功能函数构件图标实际上就是子程序的图形化表达,往往是一些有特定功能或者含义的程序段;流程控制构件图标主要实现C语言编程中的分支和循环结构的功能。构件图标管理单元采用分类的方法将程序中的上述构件图标进行分类管理,方便图形化显示和代码的自动生成。
[0053]图形化编程控制单元是与MCU无关的通用图形化编程层的核心部分,主要完成图形化程序的编写、显示、注释和图形化程序所对应的文本程序的自动生成和显示等功能。开发人员使用图形化编程控制单元可以完成图形化程序的编写,同时开发平台可以实时显示图形化程序所对应的文本程序,方便开发人员对比查错,也为程序的编译链接提供方便。
[0054](四)上述各层之间的联系
[0055]与MCU相关的硬件参数和程序层是与MCU无关的图形化嵌入式开发平台的底层,一方面为图形化编程层提供与具体MCU相关的硬件参数和工具程序,另一方面,在可定制图元生成图形化编程的构件图标时,为可定制图元模块提供必要的程序接口信息。与MCU相关的硬件参数和程序层本身为一个可更换的文件集,通过更换硬件参数和程序层,可以实现图形化嵌入式开发平台的通用性,提高平台的可扩展性。
[0056]图形化编程要素
[0057]图2是本发明采用的可定制图元结构示意图。如何将WSCN底层驱动程序构件库包含的函数转换为图形化编程所需的构件图标,是实现WSCN图形化开发平台的关键技术之一O
[0058]底层驱动程序构件库与图形化编程所需的构件图标之间通过WSCN图形化中的图元实现联系。图元的定制主要是对构件图标的基本信息和函数信息进行设置。
[0059]图2为可定制图元的结构框图。构件图标的基本信息包括构件图标名、构件图标类型和构件图标图片信息。构件图标类型包括执行控件、通信控件和子程序控件。构件图标的函数信息为构件图标对应的函数的基本信息,包括函数名、函数返回值和函数参数等。
[0060]在设计时,根据底层驱动程序构件库中定义好的函数接口及相关传入、传出参数来定制图元即可。在完成图元的数据结构设计后,接下来我们将对定制图元程序功能进行设计。本本发明将图元定制程序功能分为四个函数:添加构件图标、删除构件图标、修改构件图标和清空构件图标。
[0061]添加构件图标的函数主要实现了在构件图标库中添加新的构件图标信息。图3为添加构件图标功能的流程。其中,构件图标库与驱动程序库均采用Access数据库,都是通过OLEDB的数据库访问方式对Access数据库进行访问。在设计定制程序功能函数时,作者将与数据库相关的操作都封装进一个数据库操作类,使得程序的可复用性增强。
[0062]删除构件图标、修改图元控件和清空图元控件库的函数主要实现对图元控件库中的图元控件信息的删除、修改和清空的功能,其本质就是对Access数据库进行删除、修改和清空功能。其执行过程与添加图元控件函数的过程相似,这里不再详细阐述。
[0063]通过以上列举的四个函数,用户即可完成对图元控件的建立、修改和删除的功能,为上层开发平台的图形化编程提供先决条件。
[0064]可扩展代码编译链接功能设计
[0065]本发明面向WSCN的图形化编程开发平台的代码编译功能使用GNU ARM提供的开源编译工具arm-none-eabi,需要使用Makefile文件和Linker脚本文件。本发明将从应用程序的编译流程的设计、Makefile文件编写和Linker文件编写三个部分讨论本发明的代码编译功能。
[0066](一 )编译流程的设计
[0067]本发明使用GNU ARM提供的make工具、编译器和链接器对程序进行编译和链接,最终生成ELF与HEX两种机器码文件。
[0068]make工具用于读取并解释MakefiIe文件中的指令,以指明哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的操作。
[0069]编译工具用于将C程序源文件编译成目标文件(Object Files), BP.ο文件。
[0070]链接工具主要用于读取并解释Linker文件,根据Linker文件中的规则将程序块和变量重定位,从而将大量的目标文件合成为ELF或HEX等格式的机器码文件。
[0071]经以上分析可以看出Makefile文件与Linker文件在整个编译链接过程中的起到了关键的作用。本发明自行设计了 Makefile文件与Linker文件,在对程序进行编译链接时,使用make工具执行makefile文件,即可完成自动编译链接。主要编译流程分为以下几步:
[0072](I)使用make工具执行Makefile文件;
[0073](2)Makefile文件根据代码类型(C源程序或汇编程序)调用相应的编译器将程序代码编译成目标文件,并将其存放在Makefile文件规定的目录下。
[0074](3)完成编译后,Makefile调用链接器使其运行,并将Linker文件的路径传递给链接器。链接器读入Linker文件后将根据其内部相关规则生成ELF或HEX文件。
[0075](二)Makefile文件的分析与编写
[0076]根据上文设计的编译流程,可以看出Makefile包含了相关文件的路径并且规定了整个编译的流程。本节选取了 Makefile中的一些关键作用进行解释。
[0077](I)指定所有的源文件和链接文件的路径;
[0078](2)在编译之前需要指定编译器、汇编译器和链接器的路径;
[0079](3)在编译源程序时,需要根据芯片内核和工程相关信息来设定参数。如,芯片内核为ARM Cortex-MO+,则调用编译器时需要加上“_mcpu = cortex-mOplus”指令;源程序使用的指令集为Thumb指令集,故需要加上“-mthumb”指令;为了让编译器自动生成依赖关系,而不必让用户手动书写文件之间的相互依赖关系,需要使用“-MM”命令;为了方便用户对源程序依赖关系的查看,需要使用“-MF”指令将每个目标文件的依赖关系输出到指定文件中。
[0080](4)当编译器完成对源程序的编译之后,Makefile将调用链接器,读取指定路径下的Linker文件。
[0081](5)因最终生成的程序使用本本发明自定义的启动函数,故在调用编译器时需使用“-nostartfiles”命令来禁止使用GNU ARM自带的标准启动函数。同时为了生成程序的内存布局的map文件,方便调试使用,需要使用“-Wl,-Map, OUTPUT, map”将其输出到OUTPUT文件中。
[0082]本发明在设计Makefile时考虑到通用性,自动读取相关路径下的源程序并进行编译,然后利用Windows操作系统批处理的功能将其集成到开发平台中,真正做到了一键编译的功能。
[0083](三)Linker文件的分析与编写
[0084]Linker文件又称为链接文件,Makefile文件中在调用链接器的过程中读入了相关的链接文件,本节将介绍链接文件的分析与编写。
[0085]链接的过程实际上是为了解决多个文件之间符号引用(Symbol Resolut1n)和地址、空间分配(Address and Storage Allocat1n)的问题。编译器编译时只对单个文件进行处理,如果该文件里面需要引用到其它文件中的符号(如全局变量或函数),那么在这个文件中该符号的地址是无法确定的,必须等链接器把所有的目标文件连接到一起时才能确定最终的地址。
[0086]链接文件主要用于链接时重定位代码和提供数据在内存中的存储位置的问题。代码和数据的基本单位是段,链接器可以识别这些段,并根据链接脚本文件中的规定将其放置到指定的Flash空间中。链接文件主要包括MEMORY和SECT1NS两个命令,二者共同作用,向链接器提供了各个段及目标文件的位置信息。MEMORY指令指出了中断向量表、Flash配置域、rom区和ram区的起始地址和长度。SECT1NS向链接器提供代码段和数据段与实际地址空间之间映射关系。链接器把目标文件中的每个SECT1NS都当做一个个体,为其分配运行所需要的地址这个过程就是重定位,最后把所有目标文件合并为一个目标文件。链接器通过一个链接脚本来控制,这个脚本描述了输入文件的SECT1NS到输出文件的映射,以及输出文件的内存分布。SECT1NS规定中断向量表、Flash配置域、代码段和全局静态变量都存放到rom区,数据段、BSS段、堆和栈等存放到ram区。
[0087]可配置机器码下载功能设计
[0088]目前市场上的主流编程写入器都采用了图4所示的框架:编程写入器通过USB接口或串口与PC通信,同时通过写入接口与目标MCU通
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1