CN109799971A - 一种文件生成装置和方法 - Google Patents
一种文件生成装置和方法 Download PDFInfo
- Publication number
- CN109799971A CN109799971A CN201811492943.5A CN201811492943A CN109799971A CN 109799971 A CN109799971 A CN 109799971A CN 201811492943 A CN201811492943 A CN 201811492943A CN 109799971 A CN109799971 A CN 109799971A
- Authority
- CN
- China
- Prior art keywords
- file
- link
- compiling
- library
- submodule
- 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.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种文件生成装置和方法,所述的装置包括静态链接库获得模块,编译模块以及链接模块;所述的静态链接库获得模块与所述的链接模块连接,用于获得所述C语言程序文件的静态链接库文件;所述的编译模块与所述的链接模块连接,用于将所述的C语言程序文件通过编译的方式,生成库文件;所述的链接模块用于将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件;本发明提供的文件生成装置和方法的编译、链接等步骤都在后台进行调度执行,使得应用模型的开发不需关注代码编译、链接等过程,从而可将更多的精力集中在应用模型开发和算法设计层面,提高了软件开发效率。
Description
技术领域
本发明涉及电子信息领域,具体涉及一种文件生成装置和方法。
背景技术
目前在现有的编程环境中,C语言代码程序的编写和C语言程序文件的编译的独立的,也就是说,开发者需要手工编写C语言代码程序,形成C语言程序文件后,将C语言程序文件拷贝至编译器上,通过编译器内置的编译、链接功能将这些手工编写的.c文件生成.hex文件,编译器类似于一个翻译者的角色,将计算机上(通常指编译器环境下)的高级语言(C语言)翻译成MCU可执行的机器语言即二进制镜像文件.hex文件,尤其是在Simulink环境下,开发者在Simulink环境下编写的C语言程序文件是无法直接调试获得MCU可执行文件的。
因此,传统的开发方式是在MCU专属的编译器环境下进行重新的工程开发,手工编写C代码,形成C语言程序文件,然后再将C语言程序文件拷贝至编译器上,因此现有的技术中无法在编程环境下直接将C语言程序文件生成MCU可执行文件,需要退出编程开发环境后重新编写代码生成MCU可执行文件,该过程耗时费力,极大影响了工程开发的进度和效率。
发明内容
本发明的目的在于提供一种文件生成装置和方法,用以解决现有技术中在编程环境中将C语言程序文件生成MCU可执行文件的方式耗时费力,影响工程开发的进度和效率等问题。
为了实现上述任务,本发明采用以下技术方案:
一种文件生成装置,用于将C语言程序文件生成MCU可执行文件,所述的装置包括静态链接库获得模块,编译模块以及链接模块;
所述的静态链接库获得模块与所述的链接模块连接,用于获得所述C语言程序文件的静态链接库文件;
所述的编译模块与所述的链接模块连接,用于将所述的C语言程序文件通过编译的方式,生成库文件;
所述的链接模块用于将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件。
可选地,所述的编译模块包括编译引导子模块、编译选项子模块以及编译批处理子模块;
所述的编译引导子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供待编译目标以及编译方法;
所述的编译目标为C语言程序文件;
所述的编译选项子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供编译工具;
所述的编译批处理子模块用于根据所述的编译方法以及所述的编译工具将所述的C语言程序文件编译为库文件。
可选地,所述的链接模块包括链接引导子模块、链接选项子模块以及链接批处理子模块;
所述的链接引导子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供待链接目标以及链接方式;
所述的待链接目标包括所述的库文件以及所述的静态链接库文件;
所述的链接方式包括静态链接以及动态链接;
所述的链接选项子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供链接工具;
所述的链接批处理子模块用于根据链接方式以及链接工具将所述的库文件与静态链接库文件进行链接,生成MCU可执行文件。
一种文件生成装置,用于将Simulink模型文件生成MCU可执行文件,所述的装置包括转换模块、静态链接库获得模块,编译模块以及链接模块;
所述的转换模块分别与所述的静态链接库获得模块以及编译模块连接,用于将Simulink模型文件转换为C语言程序文件;
所述的静态链接库获得模块与所述的链接模块连接,用于获得所述C语言程序文件的静态链接库文件;
所述的编译模块与所述的链接模块连接,用于将所述的C语言程序文件通过编译的方式,生成库文件;
所述的链接模块用于将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件。
可选地,所述的编译模块包括编译引导子模块、编译选项子模块以及编译批处理子模块;
所述的编译引导子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供待编译目标以及编译方法;
所述的编译目标为C语言程序文件;
所述的编译选项子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供编译工具;
所述的编译批处理子模块用于根据所述的编译方法以及所述的编译工具将所述的C语言程序文件编译为库文件。
可选地,所述的链接模块包括链接引导子模块、链接选项子模块以及链接批处理子模块;
所述的链接引导子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供待链接目标以及链接方式;
所述的待链接目标包括所述的库文件以及所述的静态链接库文件;
所述的链接方式包括静态链接以及动态链接;
所述的链接选项子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供链接工具;
所述的链接批处理子模块用于根据链接方式以及链接工具将所述的库文件与静态链接库文件进行链接,生成MCU可执行文件。
一种文件生成方法,所述的方法利用m文件将C语言程序文件生成MCU可执行文件,所述的m文件用于执行以下步骤:
获得所述C语言程序文件的静态链接库文件;
将所述的C语言程序文件通过编译的方式,生成库文件;
将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件。
可选地,所述的将所述的C语言程序文件通过编译的方式,生成库文件时,包括:
生成编译批处理文件、编译引导文件以及编译选项文件,所述的编译批处理文件用于执行编译动作,所述的编译引导文件用于为所述的编译批处理文件提供待编译目标以及编译方法,所述的编译选项文件用于为所述的编译批处理文件提供编译工具;
利用所述的编译批处理文件调用所述的编译引导文件以及编译选项文件将所述的C语言程序文件编译为库文件;
将所述的库文件与静态链接库链接,生成所述的MCU可执行文件时,包括:
生成链接批处理文件、链接引导文件以及链接选项文件,所述的链接批处理文件用于执行链接动作,所述链接引导文件用于为所述的链接批处理文件提供待链接目标以及链接方式,所述的链接选项文件用于为链接批处理文件提供链接工具;
所述的待链接目标包括所述的库文件以及所述的静态链接库文件;
所述的链接方式包括静态链接以及动态链接;
利用所述的链接批处理文件调用所述的链接引导文件以及链接选项文件将所述的库文件与静态链接库文件进行链接,生成MCU可执行文件。
一种文件生成方法,所述的方法利用m文件将Simulink模型文件生成MCU可执行文件,所述的m文件用于执行以下步骤:
将Simulink模型文件转换为C语言程序文件;
采用以上所述的文件生成方法将所述的C语言程序文件生成MCU可执行文件。
可选地,所述的将Simulink模型文件转换为C语言程序文件时,调用RTW命令将Simulink模型文件转换为C语言程序文件。
本发明与现有技术相比具有以下技术效果:
本发明了提供一种文件生成装置和方法,可实现在编程环境下从C语言或Simulink模型(.slx)程序文件直接生成MCU所需的可执行文件(.hex),将两个不同开发环境下开发的工程在同一环境下进行合并、链接,使得应用软件的开发和MCU基础软件的开发可在彼此相对独立的环境中进行,并行开发、加快项目进度,对于应用软件开发工程师来说,编译、链接等步骤都在后台进行调度执行,使得应用模型的开发不需关注代码编译、链接等过程,从而可将更多的精力集中在应用模型开发和算法设计层面,提高了软件开发效率。
附图说明
图1为本发明的一个实施例中提供的代码生成装置结构图;
图2为本发明的另一个实施例中提供的代码生成装置结构图;
图3为本发明的一个实施例中提供的代码生成方法流程图;
图4为本发明的另一个实施例中提供的代码生成方法流程图。
具体实施方式
C语言程序文件:在编程环境中,程序员编写的用于解决实际问题的代码文件,C语言代码是高级语言;
MCU可执行文件:微控制单元(MCU)可执行文件,可执行文件中均为二进制的汇编语言,可执行文件能够在微控制单元上执行的文件,MCU可执行文件可以是.hex文件等,可执行文件通过库文件和静态链接库文件链接获得。
Simulink模型文件:在Simulink环境下以图形化的建模方式建立的.slx的文件格式的模型。
库文件:MCU的上层控制代码文件,是算法工程师编写的控制逻辑代码封装而成,负责向静态链接库文件发送控制指令。
静态链接库文件:MCU的基础软件代码文件,负责接收库文件发来的控制指令并根据这些指令控制MCU上的硬件电气元件产生真正的执行动作,静态链接库文件操作的是MCU内部的寄存器和其外部的驱动芯片(例如CAN通讯驱动芯片,ADC转换等功能)。
编译:从源语言编写的源程序产生目标程序的过程,把高级语言进行一系列词法分析、语法分析、语义分析及优化后生成汇编代码的过程。
编译规则是指编译的语法规则,编译规则是一套针对于不同对象的通用规则,例如C语言有其专用的编译规则,C++语言也有其专用的编译规则,在本发明中应用了C语言的编译规则,通过词法分析和语法分析后,在确认所有的指令都符合语法规则之后,将其翻译成等价的汇编代码,C语言的编译语法规则包括对C语言头文件的编译规则,对C语言的宏名称的编译规则等。
编译工具可以是现有的编译器,也可以是自行编写的编译程序。
链接:将多个目标文件、库文件合并成最终的可执行文件的过程。链接分为静态链接以及动态链接,静态链接是在形成可执行程序前进行链接,而动态链接的进行则是在程序执行时。
链接规则:包括静态链接规则以及动态链接规则,其中静态链接规则包括包含函数,类等等声明的头文件的链接规则以及头文件对应的实现文件的链接规则等;动态链接规则包括把程序按照模块拆分成各个相对独立部分的规则以及将各个独立部分链接在一起形成一个完整的程序的规则等。
链接工具可以是现有的链接器,也可以是自行编写的链接程序。
以下是发明人给出的具体实施例,用于对本发明的技术方案作出进一步地解释。
实施例一
如图1所示,在本实施例中公开了一种文件生成装置,目的在于直接将C语言程序文件生成MCU可执行文件,提高开发的效率。
在本实施例中提供的装置可以应用在Matlab平台上,在本实施例中提供的装置实现两个不同开发环境下的代码“合并”,提高程序员的开发效率。
所述的装置包括静态链接库获得模块,编译模块以及链接模块;
所述的静态链接库获得模块与所述的链接模块连接,用于获得所述C语言程序文件的静态链接库文件;
在本实施例中,利用静态链接库获得模块获得C语言程序文件的静态链接库时,C语言程序文件的静态链接库文件可以通过在编译器中直接输入的方式获得,也可以是在Simulink环境下通过调用编译器的方式获得,其中静态链接库文件为.a文件。
在进行编译前,静态链接库获得模块将静态链接库文件存放在工程文件夹下。
所述的编译模块与所述的链接模块连接,用于将所述的C语言程序文件通过编译的方式,生成库文件;
在本实施例中,在编译模块下将C语言程序文件通过编译的方式,生成库文件时,编译模块需要实现的功能有调用编译工具,为编译工具提供编译方法和编译对象,因此编译模块包括编译引导子模块、编译选项子模块以及编译批处理子模块;
可选地,所述的编译引导子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供待编译目标以及编译方法;
所述的编译目标为C语言程序文件;
所述的编译选项子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供编译工具;
所述的编译批处理子模块用于根据所述的编译方法以及所述的编译工具将所述的C语言程序文件编译为库文件。
在本实施例中,编译引导子模块以及编译选项子模块提供了编译需要的信息后,编译需要的信息包括了如何编译、对哪个对象进行编译以及采用什么实现编译,即待编译目标、编译方法以及编译工具,具体地,编译引导子模块中包括了待编译目标的地址以及编译规则,在编译选项子模块中包括了编译工具的地址,编译引导子模块以及编译选项子模块将以上信息发送给编译批处理子模块,编译批处理子模块用于实现编译,编译批处理子模块所作的就是利用编译工具在编译方法的引导下对待编译的目标,即C语言程序文件进行编译,获得库文件。
其中,编译工具可以是自行编写的编译程序,也可以是外部编译器等。
可选地,所述的编译引导子模块中包括所述的C语言程序文件的位置、C语言程序文件的编译规则以及库文件的封装要求;
所述的编译选项子模块中包括编译器的位置。
在所述的编译选项子模块中还包括编译器的编译选项,所述的编译选项用于对编译过程进行监督,提供了编译优化等级以及编译警告等级。
所述的编译批处理子模块中包括调用编译引导文件的命令以及调用编译选项文件的命令。
在本实施例中,编译方法包括如何将C语言文件生成库文件的编译规则以及最终形成的库文件的封装形式,其中编译规则是指对C语言文件中的各个部分如何采用通用的语言规则转换为二进制的机器代码,将编译方法写入到编译引导文件中。
在本实施例中,编译工具为编译器,编译工具信息包括编译器的名称以及编译器的在本机上的地址,将编译器的信息写入到编译选项文件中,以使编译批处理子模块在读取编译选项文件时,能够快速的找到编译工具的在本机上的位置。
所述的链接模块用于将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件。
在本实施例中,链接模块用于将多个目标文件进行链接,获得MCU可执行文件,链接模块要实现的功能有调用链接器、为链接器提供链接方式和链接对象,因此所述的链接模块包括链接引导子模块、链接选项子模块以及链接批处理子模块;
可选地,所述的链接引导子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供待链接目标以及链接方式;
所述的待链接目标包括所述的库文件以及所述的静态链接库文件;
所述的链接方式包括静态链接以及动态链接;
所述的链接选项子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供链接工具;
所述的链接批处理子模块用于根据链接方式以及链接工具将所述的库文件与静态链接库文件进行链接,生成MCU可执行文件。
在本实施例中,链接方式为静态链接,静态链接的链接规则是指将每个文件内部的代码段(.text)和数据段(.data)等不同的Section进行分析,然后将这些文件中相同的Section进行合并并放置到MCU指定的资源位置上(通过链接选项文件来实现),链接选项文件不仅仅指定了链接工具,同时对MCU内部的资源(FLASH和RAM)进行了统一的分配,链接的实质可理解为将链接输入文件中具有相同属性的Section进行提取和合并,如果在链接的过程中出现了FLASH或RAM的溢出,则链接将报错,停止。
因此,在本实施例中,链接引导子模块首先提供给链接批处理子模块多个待链接目标的位置并且告诉链接批处理子模块当前采用静态链接的方式,接着链接选项子模块将链接工具的地址告诉链接批处理子模块,当链接批处理子模块获得待链接目标的位置后,在该位置上找到待链接目标,将待链接目标放入链接工具中,再告诉链接工具此时为静态链接,当链接工具获得以上信息后就可以开始进行链接动作。
在本实施例中,链接工具可以是编写的链接程序,也可以是外部链接器,作为一种优选的实施方式链接工具以及编译工具为同一个外部编译链接器,具体可以是GCC编译器、Keil编译器等。
在本实施例中,在Simulink编程环境下编写好了C语言程序文件,是用来计算加法的,该文件名为add.c,那么利用文件生成装置,将C语言程序文件写好的加法功能生成MCU可执行文件,形成add.hex,即在MCU上可以执行加法动作时:
首先利用静态链接库文件获得模块获得C语言程序文件的静态链接库文件,针对于加法功能,该静态链接库文件中包括的是对MCU中累加器控制的语句,因此获得了add.a的加法静态链接库文件;
其次利用编译模块将C语言程序文件经过编译,获得库文件,首先编译引导子模块中包括了add.c文件的具体位置以及针对该add.c文件的C语言通用编译方法,编译选项子模块中包括了编译工具的具体位置,因此利用编译批处理文件先找到编译工具的位置后,调用该编译工具,向编译工具中输入add.c文件的具体位置上找到的文件以及C语言通用编译方法,编译完成获得库文件add.lib,因此针对于加法功能,该库文件中包括了怎么获得两个加法对象的语句以及把两个加法对象发送给静态链接库的语句。
最后,利用链接模块将静态链接库文件以及库文件进行链接,获得可执行文件,首先链接引导子模块中包括了库文件add.lib的具体位置以及静态链接库文件add.a的具体位置,还包括链接方式:静态链接,其次链接选项子模块中包括了链接工具的具体位置,将该信息发送给链接批处理文件,最后利用链接批处理文件首先找到链接工具,调用该链接工具,向链接工具中输入链接引导子模块中记载的库文件add.lib以及静态链接库文件add.a后,再告诉链接工具此次链接为静态链接后,获得了可执行文件,因此可以在MCU中仅需输入两个加法对象的具体的值,就可以获得两个加法对象求和后的值。
本实施例中提供的文件生成装置,通过在指定环境下运行该装置就能实现在任何环境下直接将C语言程序文件直接生成MCU可执行文件,其中指定的环境可以是Simulink环境、Java环境等,开发人员在开发程序软件时,无需对MCU可执行文件的语言进行学习,利用本发明提供的方法能够节省工程师开发时间,提高工程开发的进度和效率。
实施例二
与实施例一不同的是,在本实施例中提供的装置是将Simulink模型文件生成MCU可执行文件,Simulink环境下创建的模型文件(model.slx)需要运行在被控对象的控制器上才能将设计者的算法逻辑运用到实践中来,而控制器上的MCU所能执行的是二进制镜像.hex文件,所以我们需要将Simulink的模型文件(.slx文件)转化为MCU可执行文件(可以是.hex文件等)。
先将Simulink模型文件生成C语言程序文件,因此提供了用于将Simulink模型文件生成C语言程序文件的转换模块。
如图2所示,在本实施例中提供了一种文件生成装置,用于将Simulink模型文件生成MCU可执行文件,所述的装置包括转换模块、静态链接库获得模块,编译模块以及链接模块;
所述的转换模块分别与所述的静态链接库获得模块以及编译模块连接,用于将Simulink模型文件转换为C语言程序文件;
在本实施例中,转换模块可以是自行编写的将Simulink模型文件转换为C语言程序文件的程序,也可以是调用现有的模块进行实现。
当本实施例中文件生产装置应用在MATLAB平台下,则可以调用MATLAB中集成的转换工具箱实现。
所述的静态链接库获得模块与所述的链接模块连接,用于获得所述C语言程序文件的静态链接库文件;
所述的编译模块与所述的链接模块连接,用于将所述的C语言程序文件通过编译的方式,生成库文件;
可选地,所述的编译模块包括编译引导子模块、编译选项子模块以及编译批处理子模块;
所述的编译引导子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供待编译目标以及编译方法;
所述的编译目标为C语言程序文件;
所述的编译选项子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供编译工具;
所述的编译批处理子模块用于根据所述的编译方法以及所述的编译工具将所述的C语言程序文件编译为库文件。
所述的链接模块用于将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件。
可选地,所述的链接模块包括链接引导子模块、链接选项子模块以及链接批处理子模块;
所述的链接引导子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供待链接目标以及链接方式;
所述的待链接目标包括所述的库文件以及所述的静态链接库文件;
所述的链接方式包括静态链接以及动态链接;
所述的链接选项子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供链接工具;
所述的链接批处理子模块用于根据链接方式以及链接工具将所述的库文件与静态链接库文件进行链接,生成MCU可执行文件。
在本实施例中,链接工具可以是编写的链接程序,也可以是外部链接器,作为一种优选的实施方式链接工具以及编译工具为同一个外部编译链接器,具体可以是GCC编译器、Keil编译器等。
本实施例中提供的文件生成装置,通过在Simulink环境下运行该装置就能实现在任何环境下直接将Simulink模型文件直接生成MCU可执行文件,开发人员在开发程序软件时,无需对MCU可执行文件的语言进行学习,利用本发明提供的方法能够节省工程师开发时间,提高工程开发的进度和效率。
实施例三
在本实施例中公开了一种文件生成方法,可以应用在Matlab平台上,目的在于所述的方法利用m文件将C语言程序文件生成MCU可执行文件,提高开发的效率。
在本实施例中提供的文件生成方法主要是在Simulink环境下编写MATLAB中独有的m文件,通过执行m文件完成C语言程序文件到MCU可执行文件的生成,即实现两个不同开发环境下的代码“合并”。
如图3所示,所述的m文件用于执行以下步骤:
获得所述C语言程序文件的静态链接库文件;
将所述的C语言程序文件通过编译的方式,生成库文件;
将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件。
在本实施例中,在Simulink环境下实现的是将生成库文件,并且将库文件与静态链接库文件进行链接,获得MCU可执行文件。其中,C语言程序文件的静态链接库文件可以通过在编译器中直接输入的方式获得,也可以是在Simulink环境下通过调用编译器的方式获得。
在本实施例中,静态链接库文件为.a文件。
在进行编译前,将静态链接库文件存放在工程文件夹下。
可选地,所述的将所述的C语言程序文件通过编译的方式,生成库文件时,包括:
生成编译批处理文件、编译引导文件以及编译选项文件,所述的编译批处理文件用于执行编译动作,所述的编译引导文件用于为所述的编译批处理文件提供待编译的目标以及编译方法,所述的编译选项文件用于为所述的编译批处理文件提供编译工具的位置。
利用所述的编译批处理文件调用所述的编译引导文件以及编译选项文件将所述的C语言程序文件编译为库文件。
在本实施例中,由于Simulink环境提供了调用外置系统文件的命令–system,通过该命令调用事先编辑好的编译批处理文件,即.bat文件,该编译批处理文件的用于实现编译,但是编译批处理文件并不知道怎么编译以及怎么执行编译,因此需要编译引导文件以及编译选项文件告诉编译批处理文件如何编译、对哪个对象进行编译,采用什么实现编译。
在编译引导文件以及编译选项文件提供了编译需要的信息后,编译批处理文件所作的就是利用编译工具在编译方法的引导下对待编译的目标,即C语言程序文件进行编译,获得库文件。
可选地,所述的编译批处理文件中包括调用编译引导文件的命令以及调用编译选项文件的命令;
所述的编译引导文件中包括所述的C语言程序文件的位置、C语言程序文件的编译规则以及库文件的封装要求;
所述的编译选项文件中包括编译工具的位置。
在所述的编译选项文件中还包括编译器的编译选项,所述的编译选项用于对编译过程进行监督,提供了编译优化等级以及编译警告等级。
在本实施例中,在Simulink环境下采用编译的方法将C语言程序文件生成库文件前,可以提供C语言程序文件的信息、编译方法以及编译工具的信息,将这些信息写入编译引导文件以及编译选项文件中,其中C语言程序文件信息包括C语言程序文件的地址,用于找到待编译的C语言程序文件,将C语言程序文件信息写入到编译引导文件中,编译方法包括如何将C语言文件生成库文件的编译规则以及最终形成的库文件的封装形式,其中编译规则是指对C语言文件中的各个部分如何采用通用的语言规则转换为二进制的机器代码,将编译方法写入到编译引导文件中;编译工具的信息包括编译工具的名称以及编译工具的在本机上的地址,将编译工具的信息写入到编译选项文件中,以使编译批处理文件在读取编译选项文件时,能够快速的找到编译工具的在本机上的位置。
作为一种优选的实施方式,编译引导文件为.mk文件,编译选项文件为.opt文件。
可选地,将所述的库文件与静态链接库链接,生成所述的MCU可执行文件时,包括:
生成链接批处理文件、链接引导文件以及链接选项文件,所述的链接批处理文件用于执行链接动作,所述链接引导文件用于为所述的链接批处理文件提供待链接的目标以及链接方式,所述的链接选项文件用于为链接批处理文件提供链接工具;
在本实施例中,链接选项文件还用于为链接批处理文件提供链接选项,例如生成.map文件。
在本实施例中,链接工具可以是编写的链接程序,也可以是外部链接器,作为一种优选的实施方式链接工具以及编译工具为同一个外部编译链接器,具体可以是GCC编译器、Keil编译器等。
可选地,所述的连接批处理文件中包括调用链接引导文件的命令以及调用链接选项文件的命令;
所述链接引导文件包括待链接目标的位置以及链接方式指令;
所述的链接选项文件中包括链接工具的位置。
在本实施例中,链接引导文件为.mk文件,链接选项文件为.ld文件,在链接引导文件中描述了具体的链接规则,将Simulink模型生成的.lib库文件和基础软件.a静态链接库文件进行链接,完整的链接对象包含以下文件:.lib库文件、.a静态链接库文件、编译器自带的库文件(例如libgcc.a)、MCU启动代码工程文件(例如crt.o)
链接的总体过程类似于“拼积木”的过程,链接器会对所有需要链接的文件(.obj工程文件和库文件)进行扫描和分析,在本实施例中,链接方式为静态链接,静态链接的链接规则是指将每个文件内部的代码段(.text)和数据段(.data)等不同的Section进行分析,然后将这些文件中相同的Section进行合并并放置到MCU指定的资源位置上(通过链接选项文件来实现),链接选项文件不仅仅指定了链接工具,同时对MCU内部的资源(FLASH和RAM)进行了统一的分配,链接的实质可理解为将链接输入文件中具有相同属性的Section进行提取和合并,如果在链接的过程中出现了FLASH或RAM的溢出,则链接将报错,停止。
利用所述的链接批处理文件调用所述的链接引导文件以及链接选项文件(.ld)将所述的库文件与静态链接库文件进行连接,生成MCU可执行文件。
在本实施例中实现了在任何环境下直接将C语言程序文件直接生成MCU可执行文件,开发人员在开发程序软件时,无需对MCU可执行文件的语言进行学习,利用本发明提供的方法能够节省工程师开发时间,提高工程开发的进度和效率。
实施例四
与实施例三不同的是,在本实施例中,是将Simulink模型文件生成MCU可执行文件,其中先将Simulink模型文件生成C语言程序文件。
一种文件生成方法,可以应用在Matlab平台上,所述的方法包括利用m文件将Simulink模型文件生成MCU可执行文件,如图4所示,所述的m文件用于执行以下步骤:
将Simulink模型文件转换为C语言程序文件;
将Simulink模型文件转换为C语言程序文件时,可以通过用户自行编程的方式实现,可以是通过Matlab平台提供的封装好的函数直接进行转换。
可选地,所述的将Simulink模型文件转换为C语言程序文件时,调用RTW命令将Simulink模型文件转换为C语言程序文件。
在本实施例中,调用Simulink内置的Read Time Workshop(RTW)来实现的,RTW本身是支持命令行控制的方式。
给rtwbuild函数三个输入,分别subsystem——Simulink模型中的子系统名;Mode——Simulink模型生成代码的模式;ExportFunctionCalls——将Subsystem生成为导出函数的形式,即一个独立的C函数。
采用实施例三中所述的文件生成方法将所述的C语言程序文件生成MCU可执行文件。
在本实施例中实现了在Simulink环境下直接将C语言程序文件直接生成MCU可执行文件,开发人员在开发程序软件时,无需对MCU可执行文件的语言进行学习,利用本发明提供的方法能够节省工程师开发时间,提高工程开发的进度和效率。
Claims (10)
1.一种文件生成装置,用于将C语言程序文件生成MCU可执行文件,其特征在于,所述的装置包括静态链接库获得模块,编译模块以及链接模块;
所述的静态链接库获得模块与所述的链接模块连接,用于获得所述C语言程序文件的静态链接库文件;
所述的编译模块与所述的链接模块连接,用于将所述的C语言程序文件通过编译的方式,生成库文件;
所述的链接模块用于将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件。
2.如权利要求1所述的文件生成装置,其特征在于,所述的编译模块包括编译引导子模块、编译选项子模块以及编译批处理子模块;
所述的编译引导子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供待编译目标以及编译方法;
所述的编译目标为C语言程序文件;
所述的编译选项子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供编译工具;
所述的编译批处理子模块用于根据所述的编译方法利用所述的编译工具将所述的C语言程序文件编译为库文件。
3.如权利要求2所述的文件生成装置,其特征在于,所述的链接模块包括链接引导子模块、链接选项子模块以及链接批处理子模块;
所述的链接引导子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供待链接目标以及链接方式;
所述的待链接目标包括所述的库文件以及所述的静态链接库文件;
所述的链接方式包括静态链接以及动态链接;
所述的链接选项子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供链接工具;
所述的链接批处理子模块用于根据链接方式利用所述的链接工具将所述的库文件与静态链接库文件进行链接,生成MCU可执行文件。
4.一种文件生成装置,其特征在于,用于将Simulink模型文件生成MCU可执行文件,所述的装置包括转换模块、静态链接库获得模块,编译模块以及链接模块;
所述的转换模块分别与所述的静态链接库获得模块以及编译模块连接,用于将Simulink模型文件转换为C语言程序文件;
所述的静态链接库获得模块与所述的链接模块连接,用于获得所述C语言程序文件的静态链接库文件;
所述的编译模块与所述的链接模块连接,用于将所述的C语言程序文件通过编译的方式,生成库文件;
所述的链接模块用于将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件。
5.如权利要求4所述的文件生成装置,其特征在于,所述的编译模块包括编译引导子模块、编译选项子模块以及编译批处理子模块;
所述的编译引导子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供待编译目标以及编译方法;
所述的编译目标为C语言程序文件;
所述的编译选项子模块与所述的编译批处理子模块连接,用于为所述的编译批处理子模块提供编译工具;
所述的编译批处理子模块用于根据所述的编译方法利用所述的编译工具将所述的C语言程序文件编译为库文件。
6.如权利要求5所述的文件生成装置,其特征在于,所述的链接模块包括链接引导子模块、链接选项子模块以及链接批处理子模块;
所述的链接引导子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供待链接目标以及链接方式;
所述的待链接目标包括所述的库文件以及所述的静态链接库文件;
所述的链接方式包括静态链接以及动态链接;
所述的链接选项子模块与所述的链接批处理子模块连接,用于为所述的链接批处理子模块提供链接工具;
所述的链接批处理子模块用于根据链接方式利用所述的链接工具将所述的库文件与静态链接库文件进行链接,生成MCU可执行文件。
7.一种文件生成方法,其特征在于,所述的方法利用m文件将C语言程序文件生成MCU可执行文件,所述的m文件用于执行以下步骤:
获得所述C语言程序文件的静态链接库文件;
将所述的C语言程序文件通过编译的方式,生成库文件;
将所述的库文件与静态链接库文件链接,生成所述的MCU可执行文件。
8.如权利要求1所述的文件生成方法,其特征在于,所述的将所述的C语言程序文件通过编译的方式,生成库文件时,包括:
生成编译批处理文件、编译引导文件以及编译选项文件,所述的编译批处理文件用于执行编译动作,所述的编译引导文件用于为所述的编译批处理文件提供待编译目标以及编译方法,所述的编译选项文件用于为所述的编译批处理文件提供编译工具;
所述的待编译目标为C语言程序文件;
利用所述的编译批处理文件调用所述的编译引导文件以及编译选项文件将所述的C语言程序文件编译为库文件;
将所述的库文件与静态链接库链接,生成所述的MCU可执行文件时,包括:
生成链接批处理文件、链接引导文件以及链接选项文件,所述的链接批处理文件用于执行链接动作,所述链接引导文件用于为所述的链接批处理文件提供待链接目标以及链接方式,所述的链接选项文件用于为链接批处理文件提供链接工具;
所述的待链接目标包括所述的库文件以及所述的静态链接库文件;
所述的链接方式包括静态链接以及动态链接;
利用所述的链接批处理文件调用所述的链接引导文件以及链接选项文件将所述的库文件与静态链接库文件进行链接,生成MCU可执行文件。
9.一种文件生成方法,其特征在于,所述的方法利用m文件将Simulink模型文件生成MCU可执行文件,所述的m文件用于执行以下步骤:
将Simulink模型文件转换为C语言程序文件;
采用权利要求7-8任一项权利要求所述的文件生成方法将所述的C语言程序文件生成MCU可执行文件。
10.如权利要求9所述的文件生成方法,其特征在于,所述的将Simulink模型文件转换为C语言程序文件时,调用RTW命令将Simulink模型文件转换为C语言程序文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811492943.5A CN109799971B (zh) | 2018-12-07 | 2018-12-07 | 一种文件生成装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811492943.5A CN109799971B (zh) | 2018-12-07 | 2018-12-07 | 一种文件生成装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109799971A true CN109799971A (zh) | 2019-05-24 |
CN109799971B CN109799971B (zh) | 2022-04-15 |
Family
ID=66556540
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811492943.5A Active CN109799971B (zh) | 2018-12-07 | 2018-12-07 | 一种文件生成装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109799971B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110196720A (zh) * | 2019-05-29 | 2019-09-03 | 北京灵思创奇科技有限公司 | 一种Simulink生成动态链接库的优化方法 |
CN110333872A (zh) * | 2019-07-09 | 2019-10-15 | 广州虎牙科技有限公司 | 一种应用的处理方法、装置、设备和介质 |
CN111985055A (zh) * | 2020-08-28 | 2020-11-24 | 北京世冠金洋科技发展有限公司 | 一种模型封装方法、装置及电子设备 |
CN112506517A (zh) * | 2020-11-30 | 2021-03-16 | 天津飞腾信息技术有限公司 | 一种裸机系统级激励交叉编译系统及编译方法 |
CN115080049A (zh) * | 2021-03-16 | 2022-09-20 | 中国航发商用航空发动机有限责任公司 | 用于编译仿真模型的方法、系统和计算机可读存储介质 |
CN117331565A (zh) * | 2023-10-09 | 2024-01-02 | 镁佳(北京)科技有限公司 | 软件生成方法、装置、计算机设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5408665A (en) * | 1993-04-30 | 1995-04-18 | Borland International, Inc. | System and methods for linking compiled code with extended dictionary support |
CN101295263A (zh) * | 2008-06-23 | 2008-10-29 | 北京中星微电子有限公司 | 多媒体工程及对第三方库文件进行编译的系统和方法 |
CN102385509A (zh) * | 2010-08-31 | 2012-03-21 | 苏州大学 | 一种图形化嵌入式开发方法和平台 |
CN105117210A (zh) * | 2015-07-28 | 2015-12-02 | 苏州大学 | 一种面向wscn的图形化编程系统 |
CN106371813A (zh) * | 2015-07-23 | 2017-02-01 | 广州汽车集团股份有限公司 | 一种基于Simulink的电动汽车电机控制器软件生成方法 |
-
2018
- 2018-12-07 CN CN201811492943.5A patent/CN109799971B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5408665A (en) * | 1993-04-30 | 1995-04-18 | Borland International, Inc. | System and methods for linking compiled code with extended dictionary support |
CN101295263A (zh) * | 2008-06-23 | 2008-10-29 | 北京中星微电子有限公司 | 多媒体工程及对第三方库文件进行编译的系统和方法 |
CN102385509A (zh) * | 2010-08-31 | 2012-03-21 | 苏州大学 | 一种图形化嵌入式开发方法和平台 |
CN106371813A (zh) * | 2015-07-23 | 2017-02-01 | 广州汽车集团股份有限公司 | 一种基于Simulink的电动汽车电机控制器软件生成方法 |
CN105117210A (zh) * | 2015-07-28 | 2015-12-02 | 苏州大学 | 一种面向wscn的图形化编程系统 |
Non-Patent Citations (1)
Title |
---|
刘伟: ""模块化嵌入式MCU辅助教学平台的设计与实现"", 《中国优秀硕士学位论文全文数据库电子期刊 信息科技辑》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110196720A (zh) * | 2019-05-29 | 2019-09-03 | 北京灵思创奇科技有限公司 | 一种Simulink生成动态链接库的优化方法 |
CN110196720B (zh) * | 2019-05-29 | 2023-01-10 | 北京灵思创奇科技有限公司 | 一种Simulink生成动态链接库的优化方法 |
CN110333872A (zh) * | 2019-07-09 | 2019-10-15 | 广州虎牙科技有限公司 | 一种应用的处理方法、装置、设备和介质 |
CN110333872B (zh) * | 2019-07-09 | 2023-06-16 | 广州虎牙科技有限公司 | 一种应用的处理方法、装置、设备和介质 |
CN111985055A (zh) * | 2020-08-28 | 2020-11-24 | 北京世冠金洋科技发展有限公司 | 一种模型封装方法、装置及电子设备 |
CN111985055B (zh) * | 2020-08-28 | 2023-08-08 | 北京世冠金洋科技发展有限公司 | 一种模型封装方法、装置及电子设备 |
CN112506517A (zh) * | 2020-11-30 | 2021-03-16 | 天津飞腾信息技术有限公司 | 一种裸机系统级激励交叉编译系统及编译方法 |
CN115080049A (zh) * | 2021-03-16 | 2022-09-20 | 中国航发商用航空发动机有限责任公司 | 用于编译仿真模型的方法、系统和计算机可读存储介质 |
CN117331565A (zh) * | 2023-10-09 | 2024-01-02 | 镁佳(北京)科技有限公司 | 软件生成方法、装置、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109799971B (zh) | 2022-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109799971A (zh) | 一种文件生成装置和方法 | |
Anand et al. | CertiCoq: A verified compiler for Coq | |
Selic | The pragmatics of model-driven development | |
Kennedy et al. | Telescoping languages: A system for automatic generation of domain languages | |
JPH08202545A (ja) | ターゲット言語コードを生成するためのオブジェクト指向システム及びその方法 | |
Ozik et al. | The ReLogo agent-based modeling language | |
Hong et al. | The application guide of mixed programming between MATLAB and other programming languages | |
CN106371887A (zh) | 一种msvl语言的编译系统及方法 | |
Anderson et al. | Experience report: Developing the Servo web browser engine using Rust | |
CN110333867B (zh) | 一种多方安全计算数据处理方法、装置及系统 | |
Wilson et al. | An overview of the SUIF compiler system | |
Paulweber et al. | CASM-IR: uniform ASM-based intermediate representation for model specification, execution, and transformation | |
CN116594622A (zh) | 基于类型推导与数据流分析的Python程序编译方法及系统 | |
CN107203406A (zh) | 一种面向分布式存储结构的处理方法 | |
Dillig et al. | SAIL: Static analysis intermediate language with a two-level representation | |
Kumar et al. | First steps to compiling Matlab to X10 | |
Chen et al. | A Conversion Framework of the Continuous Modeling Languages Based on ANTLR4 | |
JP2004013190A (ja) | ソフトウエア開発環境、シミュレータ及び記録媒体 | |
KR20010011036A (ko) | 인터프리터형 제어프로그램의 개발 방법 및 시스템 | |
Dévai et al. | The EDSL’s struggle for their sources | |
Racković | Construction of a translator for robot-programming languages | |
Lanoe et al. | A modeling and code generation framework for critical embedded systems design: From Simulink down to VHDL and Ada/C code | |
Falcou | Designing HPC libraries in the modern C++ world | |
Bowen et al. | Towards verified systems: The SAFEMOS project | |
CN112579088A (zh) | 面向异构混合编程的一站式程序编译方法 |
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 |