CN115344268A - 一种多平台嵌入式开发环境编译方法及装置 - Google Patents
一种多平台嵌入式开发环境编译方法及装置 Download PDFInfo
- Publication number
- CN115344268A CN115344268A CN202210997196.0A CN202210997196A CN115344268A CN 115344268 A CN115344268 A CN 115344268A CN 202210997196 A CN202210997196 A CN 202210997196A CN 115344268 A CN115344268 A CN 115344268A
- Authority
- CN
- China
- Prior art keywords
- product
- compiling
- template
- shell
- shell script
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种多平台嵌入式开发环境编译方法及装置,该方法包括:S1,接收用户在Web页面中输入的编译所需要的产品参数;S2,根据所述产品参数确定产品统一接口类,实例化产品统一接口类,得到产品统一接口类对象;S3,所述统一接口类对象依据产品参数内部实例化产品编译类,得到产品参数对应的产品编译类对象;S4,编写Shell脚本模板,产品编译类对象根据编写好的Shell脚本模板,生成可执行Shell脚本;S5,执行Shell脚本,生成可供用户下载烧录的数据包。本申请能够统一编译不同芯片厂商的设备源代码,使得编译变得简单、容易,而且保证了编译结果的正确性,避免了因参数或流程记错而导致的错误。
Description
技术领域
本发明属于程序编译领域,具体而言,涉及一种多平台嵌入式开发环境编译方法及装置。
背景技术
现有工厂常常采购来自不同设备供应商的设备,即使同类设备,不同供应商的型号也不相同。不同型号的设备,编译步骤是各不相同的,其代码管理方式也不统一。在管理并编译不同平台的设备源代码时容易忘记具体的编译细节。隔一段时间维护不同供应商设备的代码时,容易忘记编译过程及一些必要的参数。工厂为了产品升级,特定产品需求更新时,要使用自动编译工具对已经时隔很久的设备源代码进行编译。比如分别有S980,AV187,TG01三款产品,这3款产品各自的芯片厂商是不同的,编译方式完全不同,而AV187的产品已经有将近1年没有重新编译过。当要对AV187产品做出修改并编译时,不得不再翻出AV187产品所有文档去研究整个编译流程及必要参数。如果当时的开发人员已经不再负责这款产品,那再次熟悉和编译AV187的难度不亚于新启动一个项目。
发明内容
本申请实施例提供了通用的编译流程,能够处理多个芯片厂商的设备源代码的编译需求,能够统一编译不同芯片厂商的设备源代码,忽略编译过程的具体琐碎参数细节,使得编译变得简单,容易,且保证了编译结果的正确性,避免了因参数或流程记错而导致的错误。
第一方面,本申请实施例提供了一种多平台嵌入式开发环境编译方法,包括:
S1,接收用户在Web页面中输入的编译所需要的产品参数;
S2,根据所述产品参数确定产品统一接口类,实例化产品统一接口类,得到产品统一接口类对象;
S3,所述统一接口类对象依据产品参数内部实例化产品编译类,得到产品参数对应的产品编译类对象;
S4,编写Shell脚本模板,产品编译类对象根据编写好的Shell脚本模板,生成可执行Shell脚本;
S5,执行Shell脚本,生成可供用户下载烧录的数据包。
其中,步骤S1包括:接收用户在Web页面中输入的编译所需要的产品参数,所述产品参数包括主参数和附参数,所述主参数包括产品型号,所述附参数包括App版本、内核版本、MCU单片机版本、AVM算法版本,将所述产品参数以json键值对格式发送给PHP后端。
其中,步骤S2包括:PHP后端对产品参数进行校验后,将json文本存入数据库;PHP后端进程从数据库将json数据取出得到$json,实例化产品统一接口类$product_obj=newProducts($json),得到统一接口类对象$porduct_obj。
其中,步骤S3包括:产品统一接口类对象根据json产品参数配置,确定产品对应型号的产品编译类,内部完成产品编译类的实例化得到产品编译类对象$s980_obj=$product_obj->get_obj()。
其中,步骤S4包括:产品编译类对象根据json产品参数配置,读取Shell编译模板保存到变量$shell_template中,将产品参数代入,调用Shell模板语法替换工具$s980_obj->gen_shell($shell_template,$json),将模板中含有${{}}标识符的文本替换,形成最终可执行的Shell脚本。
其中,调用Shell模板语法替换工具,将模板中含有${{}}标识符的文本替换,包括:
产品编译类对象调用模板语法替换工具,传入产品编译模板,传入替换列表;
模板语法替换工具解析模板,通过正则匹配,锁定到${{符号,开始匹配后面的内容,遇到}}符号停止匹配,取出匹配到的关键字;
将关键字去掉两端的空白字符后,从传入的替换列表中获取关键字对应的值,替换到模板中,完成语法替换。
其中,步骤S5包括:生成shell脚本后,发送信号给守护进程,传入Shell脚本路径,执行脚本;执行Shell脚本过程中,使用了守护进程执行,同时也支持cli终端实时执行,用来测试执行过程中发生的各种异常。
第二方面,本申请提供了一种多平台嵌入式开发环境编译装置,包括:
接收单元,用于接收用户在Web页面中输入的编译所需要的产品参数;
第一实例化单元,用于根据所述产品参数确定产品统一接口类,实例化产品统一接口类,得到产品统一接口类对象;
第二实例化单元,用于所述统一接口类对象依据产品参数内部实例化产品编译类,得到产品参数对应的产品编译类对象;
生成脚本单元,用于编写Shell脚本模板,产品编译类对象根据编写好的Shell脚本模板,生成可执行Shell脚本;
执行单元,用于执行Shell脚本,生成可供用户下载烧录的数据包。
第三方面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项所述方法的步骤。
第四方面,本申请实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一项所述方法的步骤。
本申请实施例多平台嵌入式开发环境编译方法及装置具有如下有益效果:
本申请能够处理多个芯片厂商的设备源代码的编译需求,能够统一编译不同芯片厂商的设备源代码,忽略编译过程的具体琐碎参数细节,使得编译变得简单,容易,且保证了编译结果的正确性,避免了因参数或流程记错而导致的错误。
附图说明
图1为本申请实施例多平台嵌入式开发环境编译方法流程示意图;
图2为本申请实施例多平台嵌入式开发环境编译方法另一种流程示意图;
图3为本申请自动编译工具中模板语法解释器的工作流程示意图;
图4为本申请实施例多平台嵌入式开发环境编译装置的结构示意图。
具体实施方式
下面结合附图和实施例对本申请进行进一步的介绍。
在下述介绍中,术语“第一”、“第二”仅为用于描述的目的,而不能理解为指示或暗示相对重要性。下述介绍提供了本发明的多个实施例,不同实施例之间可以替换或者合并组合,因此本申请也可认为包含所记载的相同和/或不同实施例的所有可能组合。因而,如果一个实施例包含特征A、B、C,另一个实施例包含特征B、D,那么本申请也应视为包括含有A、B、C、D的一个或多个所有其他可能的组合的实施例,尽管该实施例可能并未在以下内容中有明确的文字记载。
下面的描述提供了示例,并且不对权利要求书中阐述的范围、适用性或示例进行限制。可以在不脱离本申请内容的范围的情况下,对描述的元素的功能和布置做出改变。各个示例可以适当省略、替代或添加各种过程或组件。例如所描述的方法可以以所描述的顺序不同的顺序来执行,并且可以添加、省略或组合各种步骤。此外,可以将关于一些示例描述的特征组合到其他示例中。
现有的自动编译工具都只针对某一个芯片厂商的设备代码进行管理和编译,尚且没有一个通用的编译流程能够处理多个芯片厂商的设备源代码的编译需求。
如图1-3所示,本申请多平台嵌入式开发环境编译方法包括:S1,接收用户在Web页面中输入的编译所需要的产品参数;S2,根据产品参数确定产品统一接口类,实例化产品统一接口类,得到产品统一接口类对象;S3,统一接口类对象依据产品参数内部实例化产品编译类,得到产品参数对应的产品编译类对象;S4,编写Shell脚本模板,产品编译类对象根据编写好的Shell脚本模板,生成可执行Shell脚本;S5,执行Shell脚本,生成可供用户下载烧录的数据包。
本申请的自动编译工具使得产品管理更加规范,统一,方便,忽略不同芯片厂商差别各异的依赖环境和各不相同的编译方式,做到任意平台产品统一编译。
本申请发明人发明了一套通用编译流程,来解决不同设备厂商差别各异的编译方式。因为根据观察研究,不同的设备厂商的各种代码管理方式,编译环境及编译流程,可以抽象成独立的参数、独立环境变量作用域、独立的编译过程三大部分。基于此研究,通用编译流程包括参数处理部分,分离的编译逻辑处理部分,编译执行部分。
参数处理部分,选择Web页面进行处理。在Web页面中,通过Vue框架的页面与数据双向绑定的功能,能够方便地修改编译参数,页面无需刷新。这一步可以将形态各异的产品统一转化成一组简洁明了的json数据传给Web后台。Web后台根据特定的参数,选择特定的编译类。这一步采用了软件的面向对象设计模型中的工厂模型。将统一接口类实例化,依据主参数将得到特定的编译对象。这一步实现了特定型号对应特定编译对象的对应关系。
分离编译逻辑部分。因为各大芯片厂商的编译过程中都要用到很多环境变量,不同厂家之间的环境变量还有可能冲突,所以将编译过程限定在一个Shell进程中,进程启动时,设定环境变量,进程结束时销毁环境变量,保证了每个产品编译时的环境变量是单独一份的。Shell脚本中允许单独的产品有完全独立的编译逻辑,这一步是实现兼容多平台编译的关键。因为这个编译流程由参数处理部分的对象动态生成,所以能够做到特定参数对应特定编译流程的转化。
编译执行部分,使用了守护进程执行,同时也支持cli中断实时执行,能够测试执行过程中发生的各种异常。编译部分通过轮询的方式从数据库中查询是否有新的编译任务。检测到编译任务,就去执行由编译对象生成的Shell脚本。
本产品采用Web页面作为统一管理平台,Web后端处理编译参数,守护进程执行具体编译过程。这样的整体流程,保证了一个工具可以应对多种平台的编译。Web前端使用Vue页面无刷新技术。Web后端使用PHP面向对象技术。基于Yii后端框架,守护进程由PHP创建,编译脚本为Shell。
本申请具体编译流程如下:
步骤一:Web端选择要编译的产品型号、该产品对应的内核版本和各种依赖库版本。这一步将决定最终的编译参数如何组成。用户在网页上看到的只是具体的终端产品型号,但不同的产品型号对应的芯片厂商是不同的。假设用户选择了型号如S980,那么,Web后端控制器就会查找到S980型号对应的芯片厂商是全志,对应的编译平台是全志T5,最终程序会执行全志T5的编译流程。
步骤二:根据所选的产品型号、产品对应的内核版本和各种依赖库版本,确定产品对应的编译类,编译类实例化后,得到负责此产品的,基于特定编译参数的编译对象实例。编译对象实现了该厂商独有的编译流程。例如,Web控制器确定了S980产品,需要使用的编译平台是全志T5,然后Web控制器就会实例化一个产品类,传入参数指向全志T5产品,最终得到一个可以编译全志T5产品的类对象。得到类对象就意味着全志T5产品编译过程中所要用到的参数也都准备好了。
这里通过产品型号得到具体类对象的过程,充分使用了接口,继承等面向对象编程的编程思想。任何平台的产品实例化方式都是统一的,唯一不同的是,当传入的产品型号不同时,负责辨别产品的类方法会实例化对应厂商的类对象。
步骤三:产品编译对象执行后会生成一个Shell脚本,Shell脚本中就是具体的一条条编译指令。如图3所示,Shell脚本的生成使用了Shell脚本模板,并使用了模板语法检测与替换的方案。将特定的参数替换到编译模板中,从而生成最终正确的编译脚本。如前面例举的S980产品,对应的S980产品类对象会自动生成一个Shell脚本文件,这个脚本文件是根据全志T5平台编译脚本模板生成的。T5平台编译模板中,首先确定了全志T5平台的SDK存放路径,又确定了T5平台所要使用的交叉编译工具链是什么,还有T5平台编译时所要用到的环境变量有哪些,以及T5平台特定的编译指令序列。这些都是编译T5平台下产品的必要条件。然后依据这个模板,S980编译对象会执行一次参数替换,因为S980是具体的产品,所以要将产品的版本号,产品所要用到的动态库版本,产品编译时需要用到的特定参数及环境变量等,都传入到脚本模板中,最终生成一个可执行的Shell脚本。
Shell脚本中,使用到了发明人发明的${{}}标识符。这个标识符避免了和Shell本身的语法冲突,也避免了和PHP变量标识符${}产生冲突。我们发明了可以解释该标识的解释器。任何一个文档中出现了${{}}标识符,解释器就会依据替换列表尝试替换其中的变量。如我们的替换列表中有product_model=>S980一项,遇到${{product_model}}时,解释器就会在替换列表中查找${{product_model}}可以替换成什么。如果没找到可替换的变量,则会报错,解释失败。解释成功时,${{product_model}}将被替换为S980。
步骤四:产品编译类对象发送信号给守护进程,守护进程将依据Shell脚本编译指令执行编译。
步骤五:将编译完成的结果压缩打包,以供下载烧录使用。
${{}}标识符实现标记替换的原理:
因为Shell是一种解释型语言,它有很多特定的语法规则。在动态生成Shell脚本时,就要想办法避免影响源代码,以防干扰它的正常执行。${{}}的符号替换本身是基于正则替换,这种符号并不属于Shell语法,所以执行替换时不会将Shell变量错误替换,也不会干扰到原Shell正常的执行。正则替换的原理是,匹配到${{开头的符号,就认为是匹配开始,中间是匹配到的内容,遇到}}时匹配完成。匹配到的内容,去掉两边的空格,就得到替换标记。产品编译类对象传入的替换列表是由一个个键值对组成的,每一个键,都是一个替换标记,最终把${{}}符号及替换标记删除掉,换成替换标记所对应的值,完成替换。
本申请项目部署部分如下:
1)使用服务器控制面板工具,如宝塔,安装PHP运行环境;
2)部署Web服务器部分项目,将仓库代码部署到Web访问路径下,配置服务器。
3)创建数据库,使用Yii框架自动建表,运行php yii migrate自动创建所有表。
4)运行环境配置检测脚本php yii config/run这个程序会检测所有的配置项是否存在,根据提示可以补充完整所有配置项,配置文件位于config/params.php中。
5)启动自动编译守护进程php yii compile/daemon。添加新的平台编译规则时,要进行多次调试,可以运行php yii compile/run进行调试。守护进程的维护需要借助第三方工具,如pm2等,为了方便管理守护进程,可以使用screen软件,screen-S auto_compile创建终端分离进程,在其中运行php yii compile/run之后Ctrl+D退出screen,可以得到和守护进程一样的效果。
6)从各个git仓库拉取厂商产品代码,在配置文件中指定所有产品代码路径及SDK存储路径。
本申请项目实现部分:
步骤一:配置要编译的产品参数,在Web页面设置编译所需要的产品参数。产品参数包括主参数和附参数。主参数为产品型号,如选择产品型号S980。产品附参数包括App版本、内核版本、MCU单片机版本、AVM算法版本等,如配置App版本为1.2,Kernel版本为1.0,将产品参数以json键值对格式传给PHP后端。
步骤二:实例化产品统一接口类,得到产品统一接口类对象。PHP后端对产品参数进行基本校验后,将json文本存入数据库。PHP后端进程从数据库将json数据取出得到$json,实例化产品统一接口类$product_obj=new Products($json),得到统一接口类对象$porduct_obj。
步骤三:获得产品型号对应类对象。产品统一接口类根据json产品参数配置,确定产品对应型号的产品编译类,内部完成产品编译类的实例化得到产品编译类对象$s980_obj=$product_obj->get_obj()。
上述的步骤中,选择Web页面进行对产品参数处理。在Web页面中,通过Vue框架的页面与数据双向绑定的功能,能够方便地修改编译参数,页面无需刷新。这一步可以将形态各异的产品统一转化成一组简洁明了的json数据传给Web后台。Web后台根据特定的参数,选择特定的编译类。这一步采用了软件的面向对象设计模型中的工厂设计模型。将统一接口类实例化,依据传入的主参数,将得到特定的产品编译类对象。这一步实现了特定型号对应特定编译对象的对应关系。
步骤四:编写Shell脚本模板,将产品编译指令写入到shell脚本中,Shell脚本包括:切换编译进程的工作目录到产品源代码所在的目录,设定环境变量,切换产品App版本号到附参数中指定的App版本号,执行产品编译,打包编译完成的产品等一系列指令。因为S980型号产品属于全志公司T5型平台,所以要在Shell脚本模版中要编写T5平台产品编译指令。如cd${{repo_path}},切换到仓库目录下,git checkout${{version}},切换为指定版本。这其中的${{}}符号为模板语法,遇到需要替换的变量时会由模板语法解释器进行解释替换。
由于各大芯片厂商的编译过程中都要用到很多环境变量,不同厂家之间的环境变量还有可能冲突,将编译过程限定在一个Shell进程中,进程启动时,设定环境变量,进程结束时销毁环境变量,保证了每个Shell进程中的环境变量相对独立。Shell脚本中允许单独的产品有完全独立的编译逻辑,这一步是实现兼容多平台编译的关键。因为这个编译流程由参数处理部分的对象动态生成,所以能够做到特定参数对应特定编译流程的转化。
步骤五:动态生成可执行Shell脚本。产品编译类对象根据json产品参数配置,读取Shell编译模板保存到变量$shell_template中,将产品参数代入,调用Shell模板语法替换工具:
$s980_obj->gen_shell($shell_template,$json),将模板中含有${{}}标识符的文本替换,形成最终可执行的Shell脚本。
其中,在此步骤中${{}}标识符,其作为Shell模板语法替换工具,包括如下的步骤:
步骤5.1)产品编译对象调用模板语法替换工具,传入产品编译模板,传入替换列表。
步骤5.2)模板语法替换工具解析模板,通过正则匹配,锁定到${{符号,开始匹配后面的内容,遇到}}符号停止匹配,取出匹配到的关键字。
步骤5.3)将关键字去掉两端的空白字符后,从传入的替换列表中获取关键字对应的值,替换到模板中,完成语法替换。
在动态生成shell脚本时,就要想办法避免影响源代码,干扰它正常执行。${{}}的符号替换的原理是字符串的正则匹配与替换,这种符号并不属于Shell语法,所以执行替换时不会将Shell变量错误替换,也不会干扰到原Shell正常的执行。正则替换的原理是,匹配到${{开头的符号,就认为是匹配开始,中间是匹配到的内容,遇到}}时匹配完成。匹配到的内容,去掉两边的空格,就得到替换标记。类对象传入的附参数是由一个个键值对组成的,每一个键,都是一个替换标记,最终把${{}}符号及替换标记删除掉,换成替换标记所对应的值,完成替换。如替换列表中有product_model=>S980一项,遇到${{product_model}}时,模板语法替换工具就会在替换列表中查找${{product_model}}可以替换成什么。如果没找到可替换的变量,则会报错,解释失败。解释成功时,${{product_model}}将被替换为S980。
步骤六:执行Shell脚本。$shell_path=$s980->gen_shell()这一步会返回生成的可执行shell脚本路径。生成完脚本后,调用:
$s980->do_compile($shell_path)发送信号给守护进程,传入Shell脚本路径,执行脚本,此时编译过程真正开始执行。脚本执行会进行产品的编译、打包、压缩,最终生成可供用户下载烧录的数据包。
执行Shell脚本时,使用了守护进程执行,同时也支持cli终端实时执行,用来测试执行过程中发生的各种异常。编译部分通过轮询的方式从数据库中查询是否有新的编译任务。检测到编译任务,就去执行由编译对象生成的Shell脚本。
步骤七:下载数据包,烧录数据到设备。
用户只需要进行如下操作即可,其操作步骤如下:
1.用户打开网址,进入Web页面,该Web页面包括产品型号选择、配置和编译项目。2.选择产品型号如S980。3.用户点击产品型号后面的“配置”选项,对编译选项进行配置。如配置语言,版本,算法版本,内核版本等。4.用户点击“编译”按钮,开始等待编译。5.编译过程完成后,会生成编译结果,将其打包后,用户Web页面上会产生编译结果下载链接,以供用户随时下载使用。
本申请实现了一键编译的功能,忽略编译过程的具体琐碎参数细节,使得编译变得简单,容易,且保证了编译结果的正确性,避免了因参数或流程记错而导致的错误。比如我们分别有S980,AV187,TG01三款产品,这3款产品各自的芯片厂商是不同的,编译方式完全不同,而AV187的产品已经有将近1年没有重新编译过。当要对AV187产品做出修改并编译时,不得不再翻出AV187产品所有文档去研究整个编译流程及必要参数。如果当时的开发人员已经不在负责这款产品,那再次熟悉和编译AV187的难度不亚于新启动一个项目。自动编译工具就省去了反复查阅文档记忆编译过程的麻烦,可以准确无误地编译任何一款产品。
如图4所示,本申请还提供了一种多平台嵌入式开发环境编译装置,包括:接收单元201,用于接收用户在Web页面中输入的编译所需要的产品参数;第一实例化单元202,用于根据所述产品参数确定产品统一接口类,实例化产品统一接口类,得到产品统一接口类对象;第二实例化单元203,用于所述统一接口类对象依据产品参数内部实例化产品编译类,得到产品参数对应的产品编译类对象;生成脚本单元204,用于编写Shell脚本模板,产品编译类对象根据编写好的Shell脚本模板,生成可执行Shell脚本;执行单元205,用于执行Shell脚本,生成可供用户下载烧录的数据包。
本申请中,多平台嵌入式开发环境编译装置实施例与多平台嵌入式开发环境编译方法实施例基本相似,相关之处请参考多平台嵌入式开发环境编译方法实施例的介绍。
本申请还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一项多平台嵌入式开发环境编译方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述多平台嵌入式开发环境编译方法步骤。其中,计算机可读存储介质可以包括但不限于任何类型的盘,包括软盘、光盘、DVD、CD-ROM、微型驱动器以及磁光盘、ROM、RAM、EPROM、EEPROM、DRAM、VRAM、闪速存储器设备、磁卡或光卡、纳米系统(包括分子存储器IC),或适合于存储指令和/或数据的任何类型的媒介或设备。
以上介绍仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种多平台嵌入式开发环境编译方法,其特征在于,包括:
S1,接收用户在Web页面中输入的编译所需要的产品参数;
S2,根据所述产品参数确定产品统一接口类,实例化产品统一接口类,得到产品统一接口类对象;
S3,所述统一接口类对象依据产品参数内部实例化产品编译类,得到产品参数对应的产品编译类对象;
S4,编写Shell脚本模板,产品编译类对象根据编写好的Shell脚本模板,生成可执行Shell脚本;
S5,执行Shell脚本,生成可供用户下载烧录的数据包。
2.根据权利要求1所述多平台嵌入式开发环境编译方法,其特征在于,步骤S1包括:接收用户在Web页面中输入的编译所需要的产品参数,所述产品参数包括主参数和附参数,所述主参数包括产品型号,所述附参数包括App版本、内核版本、MCU单片机版本、AVM算法版本,将所述产品参数以json键值对格式发送给PHP后端。
3.根据权利要求2所述多平台嵌入式开发环境编译方法,其特征在于,步骤S2包括:PHP后端对产品参数进行校验后,将json文本存入数据库;PHP后端进程从数据库将json数据取出得到$json,实例化产品统一接口类$product_obj=new Products($json),得到统一接口类对象$porduct_obj。
4.根据权利要求1-3中任一项所述多平台嵌入式开发环境编译方法,其特征在于,步骤S3包括:产品统一接口类对象根据json产品参数配置,确定产品对应型号的产品编译类,内部完成产品编译类的实例化得到产品编译类对象$s980_obj=$product_obj->get_obj()。
5.根据权利要求1-3中任一项所述多平台嵌入式开发环境编译方法,其特征在于,步骤S4包括:产品编译类对象根据json产品参数配置,读取Shell编译模板保存到变量$shell_template中,将产品参数代入,调用Shell模板语法替换工具$s980_obj->gen_shell($shell_template,$json),将模板中含有${{}}标识符的文本替换,形成最终可执行的Shell脚本。
6.根据权利要求5所述多平台嵌入式开发环境编译方法,其特征在于,调用Shell模板语法替换工具,将模板中含有${{}}标识符的文本替换,包括:
产品编译类对象调用模板语法替换工具,传入产品编译模板,传入替换列表;
模板语法替换工具解析模板,通过正则匹配,锁定到${{符号,开始匹配后面的内容,遇到}}符号停止匹配,取出匹配到的关键字;
将关键字去掉两端的空白字符后,从传入的替换列表中获取关键字对应的值,替换到模板中,完成语法替换。
7.根据权利要求1-3中任一项所述多平台嵌入式开发环境编译方法,其特征在于,步骤S5包括:生成shell脚本后,发送信号给守护进程,传入Shell脚本路径,执行脚本;执行Shell脚本过程中,使用了守护进程执行,同时也支持cli终端实时执行,用来测试执行过程中发生的各种异常。
8.一种多平台嵌入式开发环境编译装置,其特征在于,包括:
接收单元,用于接收用户在Web页面中输入的编译所需要的产品参数;
第一实例化单元,用于根据所述产品参数确定产品统一接口类,实例化产品统一接口类,得到产品统一接口类对象;
第二实例化单元,用于所述统一接口类对象依据产品参数内部实例化产品编译类,得到产品参数对应的产品编译类对象;
生成脚本单元,用于编写Shell脚本模板,产品编译类对象根据编写好的Shell脚本模板,生成可执行Shell脚本;
执行单元,用于执行Shell脚本,生成可供用户下载烧录的数据包。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现所述权利要求1-7中任一项所述方法的步骤。
10.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现所述权利要求1-7中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210997196.0A CN115344268A (zh) | 2022-08-19 | 2022-08-19 | 一种多平台嵌入式开发环境编译方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210997196.0A CN115344268A (zh) | 2022-08-19 | 2022-08-19 | 一种多平台嵌入式开发环境编译方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115344268A true CN115344268A (zh) | 2022-11-15 |
Family
ID=83953474
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210997196.0A Pending CN115344268A (zh) | 2022-08-19 | 2022-08-19 | 一种多平台嵌入式开发环境编译方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115344268A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116931954A (zh) * | 2023-09-18 | 2023-10-24 | 浙江简捷物联科技有限公司 | 一种嵌入式软件包编译构建方法、装置、设备及介质 |
-
2022
- 2022-08-19 CN CN202210997196.0A patent/CN115344268A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116931954A (zh) * | 2023-09-18 | 2023-10-24 | 浙江简捷物联科技有限公司 | 一种嵌入式软件包编译构建方法、装置、设备及介质 |
CN116931954B (zh) * | 2023-09-18 | 2023-12-19 | 浙江简捷物联科技有限公司 | 一种嵌入式软件包编译构建方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10489274B2 (en) | Using emulation to disassociate verification from stimulus in functional test | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
US6321376B1 (en) | Apparatus and method for semi-automated generation and application of language conformity tests | |
US20110258600A1 (en) | Using a dsl for calling apis to test software | |
US8997049B1 (en) | Method and system for debugging of compiled code using an interpreter | |
US7895575B2 (en) | Apparatus and method for generating test driver | |
CA2773981C (en) | System and method of substituting parameter sets in self-contained mini-applications | |
CN110149800A (zh) | 一种用于处理与源程序的源代码相关联的抽象语法树的装置 | |
CN109522010B (zh) | 初始化代码添加方法及装置、存储介质、电子设备 | |
CN112882718A (zh) | 编译处理方法、装置、设备及存储介质 | |
CN112230988A (zh) | 接口文档的生成方法、装置、计算机设备和存储介质 | |
US20060041873A1 (en) | Computer system and method for verifying functional equivalence | |
CN115344268A (zh) | 一种多平台嵌入式开发环境编译方法及装置 | |
US7624381B1 (en) | Portable detection of start and completion of object construction | |
CN108304164B (zh) | 一种业务逻辑的开发方法及开发系统 | |
CN108287720B (zh) | 软件编译方法、装置、设备及存储介质 | |
US11442845B2 (en) | Systems and methods for automatic test generation | |
CN115756424A (zh) | 一种生成mvp代码的方法、装置及设备 | |
CN114281709A (zh) | 一种单元测试方法、系统、电子设备及存储介质 | |
Yang et al. | KernelGPT: Enhanced Kernel Fuzzing via Large Language Models | |
CN113961238A (zh) | 对象转换方法、装置及电子设备和存储介质 | |
CN114489653A (zh) | 基于编译器的数据处理方法、装置以及可读存储介质 | |
US20040177350A1 (en) | Windowstm f-language interpreter | |
Cheng et al. | Incremental deductive verification for relational model transformations | |
KR100916301B1 (ko) | 커널 api 대화식 실행 장치 및 방법 |
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 |