一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种嵌入式系统自动测试方法与流程

2023-01-14 11:43:16 来源:中国专利 TAG:


1.本发明涉及自动测试技术领域,尤其涉及一种嵌入式系统自动测试方法。


背景技术:

2.当前,在使用etest平台进行嵌入式测试的过程中,交互的数据需要遵循相应的通信协议,目前嵌入式测试过程中通信协议的描述通常使用word文件式的描述方式,即在word文件中如下表所示的方式对协议进行描述。
3.以word文件的方式,定义出通信协议的数据格式,包括字段格式、参数格式、字节数等内容。但是word文件描述方式中,字段长度通常是固定的,对于复杂的、字段长度可变的通信协议,word文件无法做到很好的描述。


技术实现要素:

4.本发明的目的在于克服上述一种或多种现有的技术问题,提供一种嵌入式系统自动测试方法。
5.为实现上述目的,本发明提供的一种嵌入式系统自动测试方法,包括:s1.通过人机交互界面编写etl描述文件,所述etl描述文件用于描述嵌入式测试的通信协议的数据格式;其中,所述etl描述文件中规定了协议段数组,所述协议段数组长度表示为协议段引用或计算表达式;s2.将所述etl描述文件注册到etestid进程模块;s3.将测试数据发送给etestid进程模块,所述etestid进程模块根据所述etl描述文件中所描述的通信协议的数据格式,对所述测试数据进行处理;s4.所述etestid进程模块将处理后的所述测试数据下发至执行器;s5.所述执行器在数据执行的过程中将测试结果上传回所述人机交互界面。
6.根据本发明的一个方面,在所述etl描述文件中,描述的子元素类型包括:segment协议段,是协议内部的最小组成单元,由协议段名称和协议段属性构成;segments协议组,是若干个协议的集合,由协议组名称和子级协议段构成;和oneof协议分支,用于动态判断解析路径,由判定条件和分支协议构成。
7.根据本发明的一个方面,所述oneof协议分支使用when条件语句进行动态解析,并使用as关键字对分支定义别名;分支别名不改变协议段的引用方式,仅用于打包、解包的结果描述信息中,以描述解包、打包时使用的分支;当when判定条件计算结果为true时,解析器进入该分支内部进行解析,其它分支将被忽略;当when判定条件计算结果为false时,跳过该分支,继续下一分支条件判断。
8.根据本发明的一个方面,所述etl描述文件中还定义了协议段引用,协议段属性赋值时使用this.seg_name的方式来引用其它协议段。
9.根据本发明的一个方面,所述etl描述文件中还规定了协议段数组,所述协议段数组长度表示为协议段引用或计算表达式,具体包括使用segment协议段或segments协议组
设置数组,数组长度值为协议段引用或计算表达式。
10.根据本发明的一个方面,所述etl描述文件中规定了协议内置函数,所述协议内置函数用于协议定义时动态计算或调用内置算法,所述内置函数包括:bytesize函数,接收一个协议段引用,返回协议段的字节长度,bytesize只能接收整字节的协议段;checkcode函数,用计算校验值;接收3个参数,依次为校验函数、校验开始协议段、校验结尾协议段后两个参数为可选参数,默认从协议第一个协议段开始,至校验字段的前一个协议段结束第一个参数有三种赋值方式:内置校验函数名、用户自定义校验函数名或crc算法描述方式。
11.根据本发明的一个方面,所述etl描述文件中规定了解析属性parser,用于描述协议段的解析方式,有两种赋值方式:解析字符串或自定义解析对象。
12.根据本发明的一个方面,所述etl描述文件中规定了自动值属性autovalue,当报文数据打包时,如果对应协议段的值为空,则解析器自动使用自动值属性autovalue打包;如果对应协议段已经赋值自动值属性autovalue会被解析器忽略。
13.根据本发明的一个方面,所述etl描述文件中规定了字符串属性,字符串属性必须设置以下之一:length长度属性,用于设置字符串类型协议段的字节长度;endswith结尾符属性,用于设置字符串类型协议段的结尾符号。
14.根据本发明的一个方面,当同时设置所述length长度属性和endswith结尾符属性时,只有length属性有效,endswith属性被解析器忽略。
15.根据本发明的一个方面,所述etl描述文件中规定了附加属性option,其由多个键值对构成,用于描述协议附加属性,附加属性option包括:最小值min,协议段的最小值,用于解析结果自动验证;最大值max,协议段的最大值,用于解析结果自动验证;分类catalog,协议段的类别,用于提供给自动工具使用;精度precision,协议段的数值精度,用于提供给自动工具使用;自动匹配match,协议段必须符合的表达式规则,用于协议解析开始前从数据流中查找匹配的数据;自动验证valid,协议段应该符合的表达式规则,用于协议解析完成后,自动验证有效性。
16.基于此,本发明的有益效果在于:本发明在嵌入式系统自动测试过程中使用etl描述文件取代了word形式描述文件,通过在etl文件描述中规定了协议段数组,协议段数组长度表示为协议段引用或计算表达式的方式,从而实现可变字段长度的协议解析,使通信协议的定义更加充分灵活。
附图说明
17.图1示意性表示根据本发明的一种嵌入式系统自动测试系统的流程图;图2示意性表示根据本发明的一种嵌入式系统自动测试方法的流程图。
具体实施方式
18.现在将参照示例性实施例来论述本发明的内容,应当理解,论述的实施例仅是为了使得本领域普通技术人员能够更好地理解且因此实现本发明的内容,而不是暗示对本发明的范围的任何限制。
19.如本文中所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”,术语“一个实施例”和“一种实施例”要被解读为“至少一个实施例”。
20.如图1所示,本实施例公开了一种嵌入式系统自动测试系统,其包括人机交互界面101、etestid进程模块102和执行器103。
21.如图2所示,本实施例公开了一种嵌入式系统自动测试方法,具体包括:s1.通过人机交互界面101编写etl描述文件,所述etl描述文件用于描述嵌入式测试的通信协议的数据格式;其中,所述etl描述文件中规定了协议段数组,所述协议段数组长度表示为协议段引用或计算表达式;s2.将所述etl描述文件注册到etestid进程模块102;s3.将测试数据发送给etestid进程模块102,所述etestid进程模块102根据所述etl描述文件中所描述的通信协议的数据格式,对所述测试数据进行处理;s4.所述etestid进程模块102将处理后的所述测试数据下发至执行器103;s5.所述执行器103在数据执行的过程中将测试结果上传回所述人机交互界面101。
22.其中,在所述etl描述文件中,描述的子元素类型包括:segment 协议段,是协议内部的最小组成单元,由协议段名称和协议段属性构成。
23.segments 协议组,是若干个协议的集合,由协议组名称和子级协议段构成。
24.oneof 协议分支,用于动态判断解析路径,由判定条件和分支协议构成。
25.示例:protocol prot_name {segment msg_type { parser: 'uint8',autovalue: 0}segments point {segment x_number_data {parser: 'uint16 》 ! ',autovalue: 0}segment y_number_data {parser: 'uint16 《 ! ',autovalue: 0}}oneof {when(this.msg_type == 1) as alias1:segment len {parser:'uint32',autovalue: 0}when(this.msg_type == 2) as alias2:segment len {parser:'uint16',autovalue: 0}}}etl描述文件中还定义了:协议段引用:协议段属性赋值时可以使用 this.seg_name 的方式来引用其它协
议段;在计算表达式中使用协议段引用时,等同于使用对应协议段的值。
26.协议内置函数:协议内置函数用于协议定义时动态计算或调用内置算法,内置函数包括:bytesize函数,接收一个协议段引用,返回协议段的字节长度,bytesize只能接收整字节的协议段。
27.checkcode函数,用计算校验值;接收3个参数,依次为校验函数、校验开始协议段、校验结尾协议段后两个参数为可选参数,默认从协议第一个协议段开始,至校验字段的前一个协议段结束第一个参数有三种赋值方式:内置校验函数名、用户自定义校验函数名或crc算法描述方式。crc算法描述使用数组的方式描述crc算法,数组前3个值为数字,后2个值为布尔值,依次为 [多项式值,crc初始值,结果异或值,是否反转输入,是否反转输出]。
[0028]
示例:protocol prot {segment seg_begin { parser: 'uint16',autovalue: 0}segment data { parser: 'uint16',autovalue: 0}segment seg_end { parser: 'uint16',autovalue: 0}segment seg_crc1 {parser: 'uint16',autovalue: checkcode([0x04c11db7,0xffff,0xffff,true,true],this.seg_begin,this.seg_end)}segment seg_crc2 {parser: 'uin32',autovalue: checkcode(crc_32,this.seg_begin)}}空通信协议段:协议段可以仅描述名称,而没有任何属性,称为空协议段。
[0029]
空协议段主要用来标识字节流位置,空协议段在解析时将被忽略。
[0030]
通信协议段:协议段使用类型关键字segment,内部组成元素是协议段的属性设置。
[0031]
解析属性:解析属性parser,用于描述协议段的解析方式,有两种赋值方式:解析字符串或自定义解析对象。
[0032]
解析字符串由以下关键字的组合构成:

数据类型:int1 ~ int64、uint1 ~ uint64、float、double、string;

大端序(》):是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中;

小端序(《):是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中 ;

原码(=):将一个整数转换成二进制,就是其原码(第一位为符号位0表示正数,1表示负数);

反码(!):正数的反码就是其原码;负数的反码是将原码中,除符号位以外每一位取反;

补码(&):正数的补码就是其原码;负数的反码 1就是补码;注:除数据类型必须描述外,其它为可选项;缺省情况下使用小端序、补码。
[0033]
示例:protocol prot_1 {segment segment_data_1 { parser: 'uint2' ,autovalue: 0}segment segment_data_2 { parser: 'uint20' ,autovalue: 0}segment segment_data_3 { parser: 'uint10' ,autovalue: 0}segment segment_data_4 { parser: 'float 》 !' ,autovalue: 0}}自定义解析对象内包含pack、unpack两个属性,分别用于指定用户自定义的打包函数名和解包函数名。
[0034]
示例:protocol prot_1 {segment seg_1 {parser: { pack: mypackfn,unpack: myunpackfn }}}自动值属性:当报文数据打包时,如果对应协议段的值为空,则解析器自动使用autovalue属性值打包。如果对应协议段已经赋值,该属性会被解析器忽略。
[0035]
autovalue属性值可以设置为常量、数组、协议段引用、内置函数调用或计算表达式。
[0036]
字符串属性:字符串协议段必须设置以下属性之一:

length长度属性,用于设置字符串类型协议段的字节长度;

endswith结尾符属性,用于设置字符串类型协议段的结尾符号;对于endswith属性,需要注意:打包时会自动添加结尾符,解包时自动删除结尾符。
[0037]
当同时设置以上两个属性时,只有length属性有效,endswith属性会被解析器忽略。
[0038]
附加属性:option属性值由多个键值对构成,用于描述协议附加属性,包括:

最小值min,协议段的最小值,用于解析结果自动验证;

最大值max,协议段的最大值,用于解析结果自动验证;

分类catalog,协议段的类别,用于提供给自动工具使用;

精度precision,协议段的数值精度,用于提供给自动工具使用;

自动匹配match,协议段必须符合的表达式规则,用于协议解析开始前从数据流中查找匹配的数据;

自动验证valid,协议段应该符合的表达式规则,用于协议解析完成后,自动验证有效性;示例:protocol prot_1 {
segment cmd {parser: 'uint8',autovalue: 0,option: {match: 'value 》 1',valid: 'value == 1',catalog: '包头',min: 4,max: 23,precision: 4,enumeration: '10,12',},}协议组:协议组使用类型关键字segments。协议组用于将多个协议段组合在一起,并使用相同的父级名称。协议组可以多层嵌套使用,也可以设置为数组类型。
[0039]
示例:protocol prot_1 {segment header { parser: 'uint16',autovalue: 0x55aa }segments pos[100] {segment x { parser: 'float' }segment y { parser: 'float' }}}协议分支:协议组的类型关键字是oneof,使用when条件语句进行动态解析,并使用as关键字对分支定义别名;分支别名不改变协议段的引用方式,仅用于打包、解包的结果描述信息中,以描述解包、打包时使用的分支。
[0040]
当when判定条件计算结果为true时,解析器进入该分支内部进行解析,其它分支将被忽略;当when判定条件计算结果为false时,跳过该分支,继续下一分支条件判断。
[0041]
示例:protocol prot_oneof {segment type1 { parser: 'int8',autovalue: 0 }segment type2 { parser: 'int8',autovalue: this.type1*2 }oneof {when(this.type1 == 2) as pro_alias_type1_equal_two:segment x { parser: 'float' }segment y { parser: 'float' }when(this.type1 == 3) as pro_alias_type1_equal_three:segment x { parser: 'float' }segment y { parser: 'float' }segment z { parser: 'float' }}oneof {
when(this.type2 《= 2) as pro_alias_type2_less_two:segment x1 { parser: 'float',autovalue: 9.8 }when(this.type2==2*this.type1)as pro_alias_type2_equal_doubletype1:segment x2 { parser: 'double' }}segment tail { parser: 'int8',autovalue: 2*(1 this.type1)}}协议段数组[ ]使用segment协议段或segments协议组设置数组,后跟[ ]来标识数组,中括号内为数组的长度,长度值为协议段引用或计算表达式。
[0042]
协议段引用示例:protocol prot_1 {segment seg { parser: 'int32',autovalue: bytesize(this.seg_arr) }segment seg_arr[this.seg] { parser: 'uint8' }}协议段的引用即协议段的长度可以设置为不定长,获取seg协议段的字节数,实现可变字段长度的协议解析。
[0043]
计算表达式示例:protocol prot_1 {segment seg { parser: 'int32',autovalue: bytesize(this.seg_arr) }segment seg_arr[this.seg-3] { parser: 'uint8' }}可以在协议段引用的基础上增加计算表达式,实现可变字段长度的协议解析,使通信协议的定义更加充分灵活。
[0044]
校验函数中sum_8表示8位校验、xor_8表示8位异或值、sum_16表示16位校验和,低字节在前,高字节在后、sum_16_false表示16位校验和,高字节在前,低字节在后、xor_16表示16位异或值,低字节在前,高字节在后、xor_16_false表示16位异或值,高字节在前,低字节在后、sum_32表示32位校验和,低字节在前,高字节在后、sum_32_false表示32位校验和,高字节在前,低字节在后、xor_32表示32位异或值,低字节在前,高字节在后。
[0045]
基于此,本发明的有益效果在于,本发明在嵌入式系统自动测试过程中使用etl描述文件取代了word形式描述文件,通过在etl文件描述中规定了协议段数组,协议段数组长度表示为协议段引用或计算表达式的方式,从而实现可变字段长度的协议解析,使通信协议的定义更加充分灵活。
[0046]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
[0047]
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置
和设备的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0048]
在本技术所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0049]
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明实施例方案的目的。
[0050]
另外,在本发明实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。
[0051]
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例节能信号发送/接收的方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。
[0052]
以上描述仅为本技术的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本技术中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本技术中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
[0053]
应理解,本发明的发明内容及实施例中各步骤的序号的大小并不绝对意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本发明实施例的实施过程构成任何限定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献