一种基于shell脚本的变量自动生成方法及装置制造方法

文档序号:6493012阅读:178来源:国知局
一种基于shell脚本的变量自动生成方法及装置制造方法
【专利摘要】本发明提出一种基于SHELL脚本的变量自动生成方法,包括以下步骤:在预设路径下建立配置文件,配置文件具有预设名称;根据预定标准将变量依次写入配置文件;根据预定标准通过SHELL脚本对配置文件进行转译以生成第一文件和第二文件;以及根据Makefile对上层软件、底层软件、第一文件和第二文件进行集成以得到目标文件,其中,上层软件、底层软件从目标文件获取变量以便调用变量。本发明的实施例的方法能够提高软件的开发效率,进而可加速ECU的调试、装车进度。
【专利说明】—种基于SHELL脚本的变量自动生成方法及装置
【技术领域】
[0001]本发明涉及汽车制造【技术领域】,特别涉及一种基于SHELL脚本的变量自动生成方法及装置。
【背景技术】
[0002]目前的汽车电子控制软件开发领域,通用开发方式是matlab进行策略软件开发,各类调试软件进行底层软件开发,策略开发与底层开发在各自独立的开发平台进行,两大模块间通过全局变量进行交互。全局变量往往由其中一方定义,另一方申明后使用。两大模块往往由不同的人员进行开发,沟通不及时的情况下,容易在集成链接时产生变量未定义或变量重复定义的错误。影响集成人员的集成进度,从而导致控制器(ECU)无法如期运行。
[0003]支持嵌入式系统开发的集成开发环境除了可以进行编译、链接等必须步骤外,还可支持SHELL、PERL等脚本语言的运行。Makefile,一种UNIX环境下make工具的输入文件,makefile便于在unix环境下工程的组织、管理。Makefile定义一系列的规则,用于指定文件的编译先后顺序,以及编译前、后的处理。
[0004]汽车软件由上层策略程序,底层平台程序两部分组成。这两个部分生成的可执行程序在不同的项目中,上层与底层的接口不尽相同。而上层与底层间通讯的变量近百。目前比较常用的方法是在底层进行变量的定义,上层在使用前进行变量属性的申明,当项目数目逐渐增加时,需要使用的变量将以百为单位增加,同时一旦变量在开发过程中需要调整时,上层,底层都需要同步进行修改,一旦上层与底层步调不一致,将导致集成时出现变量未定义或重复定义的情况。此时需要人工调试,时间消耗过多,影响ECU的正常使用。

【发明内容】

[0005]本发明旨在至少解决上述技术问题之一。
[0006]为此,本发明的一个目的在于提出一种可提高软件的开发效率,进而可加速控制器(ECU)的调试、装车进度的基于SHELL脚本的变量自动生成方法。
[0007]本发明的另一目的在于提出一种基于SHELL脚本的变量自动生成装置。
[0008]为了实现上述目的,本发明第一方面的实施例提出了一种基于SHELL脚本的变量自动生成方法,包括以下步骤:在预设路径下建立配置文件,所述配置文件具有预设名称;根据预定标准将变量依次写入所述配置文件;根据所述预定标准通过SHELL脚本对所述配置文件进行转译以生成第一文件和第二文件;以及根据Makefile对上层软件、底层软件、所述第一文件和所述第二文件进行处理以得到目标文件,其中,所述上层软件、底层软件从所述目标文件获取所述变量以便调用变量。
[0009]根据本发明实施例的基于SHELL脚本的变量自动生成方法,对ECU软件的底层与策略层(上层软件)间交互的所有变量进行自动定义与声明,开发人员只需在使用变量前引用一个头文件即可方便地使用没有上限数目的变量。变量变更后只需要在配置文本中进行简单的调整即可。因此可以提高软件的开发效率,进而可加速ECU的调试、装车进度。
[0010]本发明第二方面实施例提供了一种基于SHELL脚本的变量自动生成装置,包括:配置文件建立模块,用于在预设路径下建立配置文件,所述配置文件具有预设名称;写入模块,用于根据预定标准将变量依次写入所述配置文件;SHELL脚本执行模块,用于根据所述预定标准通过SHELL脚本对所述配置文件进行转译以生成第一文件和第二文件;以及集成模块,用于根据Makefile对上层软件、底层软件、所述第一文件和所述第二文件进行处理以得到目标文件,其中,所述上层软件、底层软件从所述目标文件获取所述变量以便调用变量。
[0011]根据本发明实施例的基于SHELL脚本的变量自动生成装置,对ECU软件的底层与策略层(上层软件)间交互的所有变量进行自动定义与声明,开发人员只需在使用变量前引用一个头文件即可方便地使用没有上限数目的变量。变量变更后只需要在配置文本中进行简单的调整即可。例如在应用于ECU的上层软件开发时,开发人员不需要进行变量声明,只需调用自动生成的变量,因此,减少开发人员的工作量,且在变量过多时,避免开发人员对变量声明出错,从而提高软件的开发效率、减少软件调试工作,进而可加速ECU的调试、装车进度。
[0012]本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
【专利附图】

【附图说明】
[0013]本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
[0014]图1是根据本发明一个实施例的基于SHELL脚本的变量自动生成方法的流程图;
[0015]图2是根据本发明一个实施例的基于SHELL脚本的变量自动生成方法的配置文件建立及变量写入过程示意图;
[0016]图3是根据本发明一个实施例的基于SHELL脚本的变量自动生成方法的第一文件和第二文件的生成示意图;
[0017]图4是根据本发明一个实施例的基于SHELL脚本的变量自动生成方法的对上层软件、底层软件、第一文件和第二文件进行集成的示意图;以及
[0018]图5是根据本发明一个实施例的基于SHELL脚本的变量自动生成装置的结构图。【具体实施方式】
[0019]下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
[0020]在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
[0021]在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
[0022]以下结合附图描述根据本发明实施例的基于SHELL脚本的变量自动生成方法及
>J-U ρ?α装直。
[0023]图1是根据本发明一个实施例的基于SHELL脚本的变量自动生成方法的流程图。
[0024]如图1所示,该基于SHELL脚本的变量自动生成方法,包括如下步骤:
[0025]步骤SlOl:在预设路径下建立配置文件,配置文件具有预设名称。
[0026]具体而言,预设路径根据项目名称建立。例如:在集成开发环境下,一个开发平台兼容多个项目,每个项目应该由独立的配置文件进行变量属性的说明。因此在开发环境目录下开辟一个新的目录:conf ig,在conf ig目录下根据项目建立子目录,如TEST项目,则建立如下目录:config/TEST,配置文件统一名称为10_Def inition.txt。
[0027]步骤S102:根据预定标准将变量依次写入配置文件。变量类型的不同,其写入配置文件的规范也不同。在本发明的一个实施例中,变量属性定义规范为:结合汽车电子控制技术与目前的设计结构分析,当前使用的变量类型可分为通讯类变量:串行外设接口(SPI)、控制器局域网(CAN)、物理输出(ADC)、外部变量(DAC)等;内部交互变量,用于底层与策略层间单纯进行交互的变量:电可擦可编程只读存储器存储变量(EEPR0M)、高低便驱动、串行外设接口模块(SPI模块)、控制器局域网CAN模块等外围器件的执行状态描述。根据变量的各类属性,分为以下几大类:模拟量、数字量、控制器局域网CAN通讯变量、内部变量;根据变量的走向分为输入量、输出量。根据变量类型,可分为bool、单字节、双字节等。格式示例如下:
[0028]can_input_message, 0x150, uint8_t, CAN_1。
[0029]由上可知:如果变量的类型为模拟量,则变量写入配置文件的标准为:变量类型+变量名称+类型(单字节、双字节、比特位)+输入/输出标志;如果变量的类型为数字量,则变量写入配置文件的标准为:变量类型+变量名称+类型(O、I) +输入/输出标志+缺省值;如果变量的类型为通讯类变量SPI,则变量写入配置文件的标准为:变量类型+变量名称+类型(比特位)+输入/输出标志;如果变量的类型为通讯类变量CAN,则变量写入配置文件的标准为:变量类型+变量名称+类型(比特位)+输入/输出标志+帧编号+变量偏移量;以及如果变量的类型为内部交互变量,则变量写入配置文件的标准为:变量类型+变量名称+类型(字节、双字节)。
[0030]作为一个具体的例子,如图2所示,对于配置文件的建立以及变量的写入,包括以下步骤:
[0031]步骤S201:在预定的路径下新建文本文件,保证文件名为约定的文件名。预定的路径如config/TEST目录中。
[0032]步骤S202:模拟量属性描述:变量类型+变量名称+类型(单字节、双字节、比特位)+输入/输出标志。[0033]步骤S203:数字量属性描述:变量类型+变量名称+类型(O、I)+输入/输出标志+缺省值。
[0034]步骤S204 =SPI属性描述:变量类型+变量名称+类型(比特位)+输入/输出标
O
[0035]步骤S205 =CAN属性描述:变量类型+变量名称+类型(比特位)+输入/输出标志+帧编号+变量偏移量。
[0036]步骤S206:内部变量属性描述:变量类型+变量名称+类型(字节、双字节)。
[0037]步骤S103:根据预定标准通过SHELL脚本对配置文件进行转译以生成第一文件和第二文件。其中,第一文件为变量定义文件var.C,第二文件为变量声明文件var.h。具体而言,包括以下步骤=SHELL脚本从配置文件中依次读取变量;根据预定标准对变量进行分析以得到变量类型;根据变量类型对变量进行识别;以及根据识别结果对变量进行转译以生成第一文件和第二文件。
[0038]作为一个具体的例子,SHELL脚本的编写:脚本的第一行内容需如下:# ! /bin/sh,脚本开始执行时,脚本解析器读取第一行内容,确认具体使用的脚本解析器是用B_SHELL, C_SHELL,或者是K_SHELL,当指定路径下SHELL工具不存在时,SHELL将无法被解析。本专利采用的Cygwin类UNIX环境,可直接填写上述内容。准确定义各输入输出文件的目录、名称,如前述配置文件的目录:config/TEST。文本处理:解析格式文件内容:can_input_message,0x150, uint8_t, CAN_1,格式中各段落以逗号进行划分,can_input_message:表示此变量描述的是CAN通讯变量,来源于CAN总线的输入量;0X150为变量所在CAN通讯帧的10,1^1^8_〖表示该变`量的长度为单字节,0八11表示CAN数据帧是通过CAN_1这一 CAN通道接收。在Makefile中添加SHELL脚本名称的属性说明:目录,名称;在进行编译前调用SHELL脚本。Makefile的调用,表示集成开始。SHELL执行完毕后,生成var.C,var.h两文件,其中var.c用于变量的定义,var.h用于变量申明;上层与底层需要使用变量时,只需将var.h包含到应用源码中即可;而var.c在编译链接中直接被调用,保证链接时不会出现变量未定义的错误。
[0039]作为一个具体的例子,如图3所示,SHELL脚本的处理过程如下:
[0040]步骤S301:指定 SHELL 工具路径:# ! /bin/sh。
[0041]步骤S302:定义输入输出文件名称及路径,即配置文件(源文件)。
[0042]步骤S303:判断读取文本文件是否成功,如果成功则执行步骤S304,否则执行步骤 S310。
[0043]步骤S304:判断类型是否为模拟量,如果是则执行步骤S309,否则执行步骤S305。
[0044]步骤S305:判断类型是否为数字量,如果是则执行步骤S309,否则执行步骤S306。
[0045]步骤S306:判断类型是否为SPI通讯变量,如果是则执行步骤S309,否则执行步骤
5307。
[0046]步骤S307:判断类型是否为CAN通讯变量,如果是则执行步骤S309,否则执行步骤
5308。
[0047]步骤S308:判断类型是否为内部通讯变量,如果是则执行步骤S309,否则执行步骤 S310。
[0048]步骤S309:根据特定类型的变量,读取不同的属性,分别写入声明、定义两个源文件。
[0049]步骤S310:结束文本处理。
[0050]步骤S104:根据Makefile对上层软件、底层软件、第一文件和第二文件进行集成以得到目标文件,其中,上层软件、底层软件从目标文件获取变量以便调用变量。
[0051]如图4所示,包括如下步骤:
[0052]步骤S401:指定SHELL文件名及路径,添加文件变量。
[0053]步骤S402:在编译文件集中添加SHELL脚本。
[0054]步骤S403:判断SHELL脚本是否在指定的路径上,如果是则执行步骤S404,否则执行步骤S406。
[0055]步骤S404:执行调用SHELL脚本。
[0056]步骤S405:执行编译指令,编译生成目标文件。
[0057]步骤S406:Makefile 执行结束。
[0058]根据本发明实施例的基于SHELL脚本的变量自动生成方法,分析通讯变量类型,根据输入输出,变量用途SP1、CAN、Digtal, Anolog,变量类型bool、单字节、双字节等进行分类。根据变量属性的描述进行解析,进而可以根据分类进行变量的定义、声明等操作。通过在Makefile中添加命令行的方式来执行SHELL脚本。在SHELL脚本中生成编译链接需要用到的变量定义与声明源文件。底层软件采集硬件外围器件(EEPR0M、SP1、CAN等)的状态,通过公共变量传送到策略层进行状态的控制。本发明对ECU软件的底层与策略层(上层软件)间交互的所有变量进行自动定义与声明,开发人员只需在使用变量前引用一个头文件即可方便地使用没有上限数目的变量。变量变更后只需要在配置文本中进行简单的调整即可。例如在应用于ECU的上层软件开发时,开发人员不需要进行变量声明,只需调用自动生成的变量,因此,减少开发人员的工作量,且在变量过多时,避免开发人员对变量声明出错,从而提高软件的开发效率、减少软件调试工作,进而可加速ECU的调试、装车进度。
[0059]图5是根据本发明实施例的基于SHELL脚本的变量自动生成装置。
[0060]如图5所示,该自动生成装置500,包括配置文件建立模块510、写入模块520、SHELL脚本执行模块530和集成模块540。
[0061]具体地,配置文件建立模块510用于在预设路径下建立配置文件,配置文件具有预设名称,且预设路径根据项目名称建立。
[0062]写入模块520用于根据预定标准将变量依次写入配置文件。具体而言,写入模块用于:
[0063]如果变量的类型为模拟量,则变量写入配置文件的标准为:变量类型+变量名称+类型(单字节、双字节、比特位)+输入/输出标志;如果变量的类型为数字量,则变量写入所述配置文件的标准为:变量类型+变量名称+类型(O、I)+输入/输出标志+缺省值;如果变量的类型为通讯类变量SPI,则变量写入配置文件的标准为:变量类型+变量名称+类型(比特位)+输入/输出标志;如果变量的类型为通讯类变量CAN,则变量写入配置文件的标准为:变量类型+变量名称+类型(比特位)+输入/输出标志+帧编号+变量偏移量;如果变量的类型为内部交互变量,则变量写入配置文件的标准为:变量类型+变量名称+类型(字节、双字节)。
[0064]SHELL脚本执行模块530用于根据预定标准通过SHELL脚本对配置文件进行转译以生成第一文件和第二文件。其中,第一文件为变量定义文件var.c,所述第二文件为变量声明文件var.h。具体而言=SHELL脚本执行模块用于=SHELL脚本从配置文件中依次读取变量;根据预定标准对变量进行分析以得到变量类型;根据变量类型对变量进行识别;以及根据识别结果对变量进行转译以生成第一文件和第二文件。
[0065]集成模块540用于根据Makefile对上层软件、底层软件、第一文件和第二文件进行集成以得到目标文件,其中,上层软件、底层软件从目标文件获取变量以便调用变量。
[0066]根据本发明实施例的基于SHELL脚本的变量自动生成装置,分析通讯变量类型,根据输入输出,变量用途SP1、CAN、Digtal, Anolog,变量类型bool、单字节、双字节等进行分类。根据变量属性的描述进行解析,进而可以根据分类进行变量的定义、声明等操作。通过在Makefile中添加命令行的方式来执行SHELL脚本。在SHELL脚本中生成编译链接需要用到的变量定义与声明源文件。底层软件采集硬件外围器件(EEPR0M、SP1、CAN等)的状态,通过公共变量传送到策略层进行状态的控制。本发明对ECU软件的底层与策略层(上层软件)间交互的所有变量进行自动定义与声明,开发人员只需在使用变量前引用一个头文件即可方便地使用没有上限数目的变量。变量变更后只需要在配置文本中进行简单的调整即可。因此可以提高软件的开发效率,进而可加速ECU的调试、装车进度。
[0067]在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
[0068]尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同限定。
【权利要求】
1.一种基于SHELL脚本的变量自动生成方法,其特征在于,包括以下步骤: 在预设路径下建立配置文件,所述配置文件具有预设名称; 根据预定标准将变量依次写入所述配置文件; 根据所述预定标准通过SHELL脚本对所述配置文件进行转译以生成第一文件和第二文件;以及 根据Makefile对上层软件、底层软件、所述第一文件和所述第二文件进行集成以得到目标文件,其中,所述上层软件、底层软件从所述目标文件获取所述变量以便调用变量。
2.根据权利要求1所述的方法,其特征在于, 如果所述变量的类型为模拟量,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型+输入/输出标志; 如果所述变量的类型为数字量,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型+输入/输出标志+缺省值; 如果所述变量的类型为通讯类变量SPI,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型+输入/输出标志; 如果所述变量的类型为通讯类变量CAN,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型+输入/输出标志+帧编号+变量偏移量; 如果所述变量的类型为内部交互变量,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型。
3.根据权利要求1所述的方法`,`其特征在于,所述第一文件为变量定义文件var.c,所述第二文件为变量声明文件var.h。
4.根据权利要求1所述的方法,其特征在于,所述根据预定标准通过SHELL脚本对所述配置文件进行转译以生成第一文件和第二文件的步骤包括: 所述SHELL脚本从所述配置文件中依次读取变量; 根据所述预定标准对变量进行分析以得到变量类型; 根据所述变量类型对所述变量进行识别;以及 根据识别结果对所述变量进行转译以生成所述第一文件和所述第二文件。
5.根据权利要求1所述的方法,其特征在于,所述预设路径根据项目名称建立。
6.一种基于SHELL脚本的变量自动生成装置,其特征在于,包括: 配置文件建立模块,用于在预设路径下建立配置文件,所述配置文件具有预设名称; 写入模块,用于根据预定标准将变量依次写入所述配置文件; SHELL脚本执行模块,用于根据所述预定标准通过SHELL脚本对所述配置文件进行转译以生成第一文件和第二文件;以及 集成模块,用于根据Makefile对上层软件、底层软件、所述第一文件和所述第二文件进行集成以得到目标文件,其中,所述上层软件、底层软件从所述目标文件获取所述变量以便调用变量。
7.根据权利要求6所述的装置,其特征在于,所述写入模块用于: 如果所述变量的类型为模拟量,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型+输入/输出标志; 如果所述变量的类型为数字量,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型+输入/输出标志+缺省值; 如果所述变量的类型为通讯类变量SPI,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型+输入/输出标志; 如果所述变量的类型为通讯类变量CAN,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型+输入/输出标志+帧编号+变量偏移量; 如果所述变量的类型为内部交互变量,则所述变量写入所述配置文件的标准为:变量类型+变量名称+类型。
8.根据权利要求6所述的装置,其特征在于,所述第一文件为变量定义文件var.c,所述第二文件为变量声明文件var.h。
9.根据权利要求6所述的装置,其特征在于,SHELL脚本执行模块用于: 所述SHELL脚本从所述配置文件中依次读取变量; 根据所述预定标准对变量进行分析以得到变量类型; 根据所述变量类型对所述变量进行识别;以及 根据识别结果对所述变量进行转译以生成所述第一文件和所述第二文件。
10.根据权利 要求6所述的装置,其特征在于,所述预设路径根据项目名称建立。
【文档编号】G06F9/44GK103870262SQ201210546394
【公开日】2014年6月18日 申请日期:2012年12月14日 优先权日:2012年12月14日
【发明者】余军 申请人:北汽福田汽车股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1