一种跨平台的MCU调试装置的制作方法

文档序号:19155177发布日期:2019-11-16 00:39阅读:257来源:国知局
一种跨平台的MCU调试装置的制作方法

本发明涉及微处理控制器(microcontrollerunit,mcu)领域,尤其涉及一种对汽车mcu开发过程中或已开发完成的mcu故障进行调试的装置。



背景技术:

随着汽车的普及,越来越多的汽车进入千家万户,现在信息技术的飞速发展使得人们对汽车智能化提出了更高的要求,希望智能化汽车能够给人们的实用带来便利。智能车辆是一个集环境感知、规划决策、多等级辅助驾驶等功能于一体的综合系统,它集中运用了计算机、现代传感、信息融合、通讯、人工智能及自动控制等技术,是典型的高新技术综合体。目前对智能车辆的研究主要致力于提高汽车的安全性、舒适性,以及提供优良的人车交互界面。近年来,智能车辆己经成为世界车辆工程领域研究的热点和汽车工业增长的新动力,很多发达国家都将其纳入到各自重点发展的智能交通系统当中。智能汽车的发展对车身控制系统各个方面提出了严格的要求,包括软件和硬件,而软件和硬件的处理都离不开mcu。而功能强大的mcu开发周期较长,在开发过程中需要不断的对mcu进行调试,传统的调试方法如图1所示,其包括上位机、调试工具、mcu,mcu调试需要专门的调试工具,其调试过程中,通过上位机控制调试工具进而对mcu进行调试,一方面,需要专门的调试工具,而调试工具一旦完成,其很难进行更改,只能应用于特定型号的mcu调试,不够灵活,具有较大的局限性。只能获取到mcu的内部信息,比如寄存器,变量,内存区域的数值。但现阶段的mcu集成较多的功能,仅知道寄存器,变量,内存区域的数值是远远不够的,从这几个数据无法获取系统的运行状态,也无法获取系统运行流程和各模块之间的相互依赖关系。

为了方便开发人员的调试,及时对mcu开发过程中的各个功能模块以及与mcu相关的相匹配的功能进行调试,需要开发一种新的mcu调试装置对mcu进行调试。



技术实现要素:

基于现有技术中存在的缺陷,本发明要解决的技术问题在于一种跨平台的mcu调试装置,包括mcu,mcu包括cpu,调试功能模块,通信模块,存储模块,封装解包模块,cpu分别与调试功能模块、通信模块、存储模块、封装解包模块电连接;

cpu,被配置为用于负责系统各模块之间的调用以及运算;

调试功能模块,被配置为根据接收到的调试指令启动相应的特定功能模块对mcu进行调试,调试功能模块能够根据调试需求进行增加或者减少调试功能;

存储模块,被配置为用于存储调试过程中所需要用到的数据、产生的数据以及调试功能程序或者缓存数据;

通信模块,被配置为用于mcu与外部设备进行通信;

封装解包模块,被配置为用于根据解包指令或封装指令进行相应的解包或封装。

本发明提供了一种跨平台的mcu调试装置,进一步地,还包括上位机,上位机至少包括cpu,存储模块,调试指令模块,通信模块,封装解包模块,cpu分别与存储模块、调试指令模块、通信模块、封装解包模块进行电连接;

所述上位机的通信模块与mcu中的通信模块连接,其中,上位机的通信模块与mcu中的通信模块采用无线通信或有线通信进行通信连接;

cpu,被配置为用于负责系统各模块之间的调用以及运算;

存储模块,被配置为用于存储调试过程中所需要用到的数据以及调试指令程序;

调试指令模块,被配置为于根据调试需求调用相应的调试指令程序对mcu进行调试;

封装解包模块,被配置为用于根据解包指令或封装指令进行相应的解包或封装;

通信模块,被配置为用于上位机与外部设备进行通信。

本发明提供了一种跨平台的mcu调试装置,进一步地,所述调试功能模块至少包括日志打印模块、日志等级过滤模块、进程交互模块、固件获取模块、内容写入模块、内容读取模块、在线升级模块、工具自适应识别模块、应用层功能定制模块中的一种;

所述调试指令模块至少包括日志打印指令模块、日志等级过滤指令模块、进程交互指令模块、固件获取指令模块、内容写入指令模块、内容读取指令模块、在线升级指令模块、工具自适应识别指令模块、应用层指令模块中的一种或多种;

日志打印模块,被配置为实现日志打印,其根据日志打印指令模块的指令将日志消息通过进行打印输出,用来告知开发人员程序的运行状态;日志等级过滤模块,被配置为实现日志等级过滤,其根据日志等级过滤指令模块的指令,有选择的实现动态过滤不同等级的日志能力;进程交互模块,被配置为实时记录多个任务之间的信息传递,其根据进程交互指令启动多个任务之间的信息传递记录;固件获取模块,被配置为获取固件的信息,其根据固件获取指令获取固件信息;内容写入模块,被配置为对接收到需要写入存储器的信息进行写入,其根据内容写入指令将相应的数据写入mcu的存储器中;内容读取模块,被配置为对需要读取的信息进行读取,其根据内容读取指令对相应的内容进行读取;在线升级模块,被配置为对mcu进行升级,其根据接收到来自上位机的升级指令对mcu进行升级;工具自适应识别模块,被配置为根据上位机的工具自适应识别指令对上位机是否具有配套的串口工具进行识别;应用层功能定制模块,被配置为根据上位机的应用层指令对应用程序的功能进行定制。

本发明提供了一种跨平台的mcu调试装置,进一步地,日志打印指令模块,被配置为根据调试需求启动日志打印指令并下发给mcu中的日志打印模块;日志等级过滤指令模块,被配置为根据调试需求启动日志等级过滤指令并下发给mcu中的日志等级过滤模块;进程交互指令模块,被配置为根据调试需求启动各个进程之间的进程交互指令并下发给mcu的进程交互模块;固件获取指令模块,被配置为根据调试需求启动获取固件的指令下发给mcu中的固件获取模块;内容写入指令模块,被配置为根据调试需求启动内容写入的指令下发给mcu中的内容写入模块;内容读取指令模块,被配置为根据调试需求启动内容读取的指令下发给mcu中的内容读取模块;在线升级指令模块,被配置为根据调试需求启动在线升级的指令下发给mcu中的在线升级模块。工具自适应识别指令模块,被配置为根据需求启动工具自适应指令并下发给mcu中的工具自适应识别模块;应用层指令模块,被配置为根据需求启动应用层指令下发给mcu中的应用层定制功能模块。

本发明提供了一种跨平台的mcu调试装置,进一步地,所述封装解包模块用于根据解包指令或封装指令进行相应的解包或封装,所述封装包括以下步骤:

步骤s701,获取需要封包的有效载荷并从中获取有效载荷的地址、长度、数据包类型;

步骤s702,判断地址是否有效,若地址无效,则执行步骤s707,结束封包过程;若地址有效,则执行步骤s703;

步骤s703,判断有效载荷命令类型,若有效载荷的命令类型有效,则执行步骤s704,若有效载荷的命令类型无效,则执行步骤s707,结束封包过程;

步骤s704,判断有效载荷的数据长度是否有效,若数据长度无效,则执行步骤s707,结束封包过程,若数据长度有效,则执行步骤s705;

步骤s705,给有效载荷进行赋值;

步骤s706,步骤s706,将封包好的数据存入待发送的数据区。

本发明还提供了一种跨平台的mcu调试装置,进一步地,所述解包包括以下步骤:

步骤s800,检测帧字头是否为包含高字节,若含有高字节,则执行步骤s801,若没有高字节,回到步骤s800,对下一帧进行检测;

步骤s801,检测帧字头时有包含低字节,若包含低字节,则执行步骤s802;若不包含低字节,则回到步骤s800,对下一帧数据进行检测;

步骤s802,获取数据包的长度;

步骤s803,解析包类型,判断数据包是属于哪一类。

步骤s804,获取解包后有效载荷。

本发明还提供了一种跨平台的mcu调试装置,进一步地,日志打印模块用于对调试过程中产生日志进行打印,日志打印包括以下步骤:

步骤s901,判断日志等级是否匹配,若匹配,则执行步骤s902,若不匹配,则执行步骤s912;

步骤s902,读取需要打印调试数据包中的字符串首地址的字符;

步骤s903,判断该地址的首字符是否是“结束符”,若是地址首字符是结束符,则结束该过程;若首字符不是结束符,则继续下一步动作;

步骤s904,判断字符是否为‘%’,若字符不是‘%’,则执行步骤s910,保存该字符;若字符是‘%’,则获取下一个字符;

步骤s905,判断下一个字符是否为x或d,若为d,则执行步骤s906,若为x,则执行步骤s908;

步骤s906,获取下一个参数;

步骤s907,将获取的参数转化为十进制字符并执行步骤s910;

步骤s908,获取下一个参数;

步骤s909,将获取的参数转为十六进制字符并执行步骤s910;

步骤s910,保存该字符;

步骤s911,指向下一个字节,跳转重复步骤s903,直至所有的字符打印结束;

或所述日志等级过滤模块用于实现打印日志等级过滤,日志等级过滤包括以下步骤:

步骤s601,接收上位机端的数据;

步骤s602,检验数据包的完整性,若数据包是完整的,则执行步骤s603,若数据包不完整时,则结束该过程;

步骤s603,对数据包的类型进行解析并将数据包依据类型放入相应的等级内;

步骤s604,对需要显示的日志选on,不需要显示的日志选择off,然后进行打印。

本发明还提供了一种跨平台的mcu调试装置,进一步地,所述mcu还包括至少一个外设接口,外设接口被配置为用于mcu与外部测设备进行通信连接,所述外设接口类型包括spi接口,usb接口,i2c接口、can接口、doip接口、rs232接口、uart接口中的一种或多种。

本发明提供的一种跨平台的mcu调试装置,进一步地,在对mcu调试过程中,将需要输出的数据暂存于存储模块(24)中,等待系统空闲时候对外输出。

本发明提供的一种跨平台的mcu调试装置,进一步地,当发现mcu中的调试功能模块没有内置预设的功能模块或根据调试需求,需要增加额外的调试功能时,通过配套的上位机直接将含有所需的特殊功能模块写入mcu中。

本发明提供的一种跨平台的mcu调试装置,进一步地,日志等级至少包括debug日志、info日志、osmsg日志、warn日志、error日志、fatal日志中的任意二种;

debug日志:用来记录系统调试过程中命令状态;

info日志:用来记录当前系统的一个运行状态;

osmsg日志:用来记录进程之间的一个交互过程,只要是进程发出去的消息队列,都被打上osmsg的标签,对外输出,能够根据源进程,目标进程,命令类型来过滤出关注的消息;

warn日志:用来警告开发人员,有可能发生了错误,或者进行了非法操作;

error日志:告知开发人员程序运行过程中遇到了错误,但是这类错误在程序中已经做了相关的处理,对于功能可能失效了,但是系统运行不会受到影响;

fatal日志:用来告知开发人员,系统遇到了严重的错误,导致的结果是程序崩溃,软件重启等严重的后果。

本发明还提供一种跨平台的mcu调试方法,应用包括上位机和mcu的调试系统,其特征在于,至少包括以下步骤:

上位机根据调试需求启动调试指令模块发送调试指令给mcu,mcu接收到调试指令后启动相应的调试功能模块对mcu进行调试;

调试指令模块,被配置为根据调试需求调用相应的调试指令程序对mcu进行调试;

调试功能模块,被配置为与调试指令模块相对应并根据调试指令模块下发的调试指令启动相应的特定功能模块对mcu进行调试。

本发明提供一种跨平台的mcu调试方法,进一步地,还包括:mcu调试产生的数据发送给上位机进行显示,所述mcu调试产生的数据包括日志,日志根据类型划分为多个日志等级;在对mcu调试过程中,将需要输出的数据暂存于存储器中,等待系统空闲时候对外输出;或包括当发现mcu中调试功能模块没有内置预设的功能模块或根据调试结果,需要增加额外的功能模块,此时通过上位机直接将含有所需的功能模块写入mcu中。

本发明提供一种跨平台的mcu调试方法,进一步地,所述调制指令发给mcu之前需要将调试指令进行封装,所述mcu需要对接收到的封装数据包进行解包后获得调制指令;

所述mcu调试产生的数据发送给上位机之前需要将数据进行封装,所述上位机需要对接收到的封装数据包进行解包后获得调试产生的数据包。

本发明提供一种跨平台的mcu调试方法,进一步地,所述数据进行封装至少包括以下步骤:

步骤s701,获取需要封包的有效载荷(payload)并从中获取有效载荷的地址、长度、数据包类型;

步骤s702,判断地址是否有效,若地址无效,则执行步骤s707,结束封包过程;若地址有效,则执行步骤s703;

步骤s703,判断有效载荷命令类型,若有效载荷的命令类型有效,则执行步骤s704,若有效载荷的命令类型无效,则执行步骤s707,结束封包过程;

步骤s704,判断有效载荷的数据长度是否有效,若数据长度无效,则执行步骤s707,结束封包过程,若数据长度有效,则执行步骤s705;

步骤s705,给有效载荷进行赋值;

步骤s706,将封包好的数据存入待发送的数据区。

本发明提供一种跨平台的mcu调试方法,进一步地,所述对封装数据包进行解包包括以下步骤:

步骤s800,检测帧字头是否包含高字节,若含有高字节,则执行步骤s801,若没有高字节,回到步骤s800,对下一帧进行检测;

步骤s801,检测帧字头是否包含低字节,若包含低字节,则执行步骤s802;若不包含低字节,则回到步骤s800,对下一帧数据进行检测;

步骤s802,获取数据包的长度;

步骤s803,解析包类型,判断数据包是属于哪一类;

步骤s804,获取解包后有效载荷;

本发明提供一种跨平台的mcu调试方法,进一步地,所述调试指令模块至少包括日志打印指令模块、日志等级过滤指令模块、进程交互指令模块、固件获取指令模块、内容写入指令模块、内容读取指令模块、在线升级指令模块、工具自适应识别指令模块中的一种或多种;

调试功能模块至少包括日志打印模块、日志等级过滤模块、进程交互模块、固件获取模块、内容写入模块、内容读取模块、在线升级模块、工具自适应识别模块中的一种或多种

进一步地,日志打印指令模块,被配置为根据调试需求启动日志打印指令并下发给mcu中的日志打印模块;

日志等级过滤指令模块,被配置为根据调试需求启动日志等级过滤指令并下发给mcu中的日志等级过滤模块;

进程交互指令模块,被配置为根据调试需求启动各个进程之间的进程交互指令并下发给mcu的进程交互模块;

固件获取指令模块,被配置为根据调试需求启动获取固件的指令下发给mcu中的固件获取模块;

内容写入指令模块,被配置为根据调试需求启动内容写入的指令下发给mcu中的内容写入模块;

内容读取指令模块,被配置为根据调试需求启动内容读取的指令下发给mcu中的内容读取模块;

在线升级指令模块,被配置为根据调试需求启动在线升级的指令下发给mcu中的在线升级模块。

工具自适应识别指令模块,被配置为根据需求启动工具自适应指令并下发给mcu中的工具自适应识别模块;

应用层指令模块,被配置为根据需求启动应用层指令下发给mcu中的应用层功能定制模块。

本发明提供一种跨平台的mcu调试方法,进一步地,所述调试功能模块至少包括日志打印模块、日志等级过滤模块、进程交互模块、固件获取模块、内容写入模块、内容读取模块、在线升级模块、工具自适应识别模块中的一种或多种;

进一步地,日志打印模块,被配置为实现日志打印,其根据日志打印指令模块的指令将日志(log)消息通过进行打印输出,用来告知开发人员程序的运行状态;

日志等级过滤模块,被配置为实现日志等级过滤,其根据日志等级过滤指令模块的指令,有选择的实现动态过滤不同等级的日志能力;

进程交互模块,被配置为实时记录多个任务之间的信息传递,其根据进程交互指令启动多个任务之间的信息传递记录;

固件获取模块,被配置为获取固件的信息,其根据固件获取指令获取固件信息;

内容写入模块,被配置为对接收到需要写入存储器的信息进行写入,其根据内容写入指令将相应的数据写入mcu的存储器中;

内容读取模块,被配置为对需要读取的信息进行读取,其根据内容读取指令对相应的内容进行读取;

在线升级模块,被配置为对mcu进行升级,其根据接收到来自上位机的升级指令对mcu进行升级;

工具自适应识别模块,被配置为根据上位机的工具自适应识别指令对上位机是否具有配套的串口工具进行识别;

应用层功能定制模块,被配置为根据上位机的应用层指令对应用程序的功能进行定制。

本发明提供一种跨平台的mcu调试方法,进一步地,调试过程中的日志是通过日志打印指令模块通过下发指令控制日志打印模块进行打印的,日志打印包括以下步骤:

步骤s901,判断日志等级是否匹配,若匹配,则执行步骤s902,若不匹配,则执行步骤s912;

步骤s902,读取需要打印调试数据包中的字符串首地址的字符;

步骤s903,判断该地址的首字符是否是“结束符”,若是地址首字符是结束符,则结束该过程。若首字符不是结束符,则继续下一步动作;

步骤s904,判断字符是否为‘%’,若字符不是‘%’,则执行步骤s910,保存该字符;若字符是‘%’,则获取下一个字符;

步骤s905,判断下一个字符是否为x或d,若为d,则执行步骤s906,若为x,则执行步骤s908;

步骤s906,获取下一个参数;

步骤s907,将获取的参数转化为十进制字符并执行步骤s910;

步骤s908,获取下一个参数;

步骤s909,将获取的参数转为十六进制字符并执行步骤s910;

步骤s910,保存该字符;

步骤s911,指向下一个字节,跳转重复步骤s903,直至所有的字符打印结束。

本发明提供一种跨平台的mcu调试方法,进一步地,实现打印日志等级过滤通过日志等级过滤模块来完成,

步骤s601,接收上位机端的数据;

步骤s602,检验数据包的完整性,若数据包是完整的,则执行步骤s603,若数据包不完整时,则结束该过程;

步骤s603,对数据包的类型进行解析并将数据包依据类型放入相应的等级内;

步骤s604,对需要显示的日志选on,不需要显示的日志选择off,然后进行打印;

日志模块的等级显示on时,则表示需要打印该等级出来,若日志模块的等级显示off时,则表示无须打印出该日志等级。

本发明提供一种跨平台的mcu调试方法,进一步地,所述日志等级至少包括debug日志、info日志、osmsg日志、warn日志、error日志、fatal日志中的任意二种;

debug日志:用来记录系统调试过程中命令状态;

info日志:用来记录当前系统的一个运行状态;

osmsg日志:用来记录进程之间的一个交互过程,只要是进程发出去的消息队列,都被打上osmsg的标签,对外输出,能够根据源进程,目标进程,命令类型来过滤出关注的消息;

warn日志:用来警告开发人员,有可能发生了错误,或者进行了非法操作;

error日志:告知开发人员程序运行过程中遇到了错误,但是这类错误在程序中已经做了相关的处理,对于功能可能失效了,但是系统运行不会受到影响;

fatal日志:用来告知开发人员,系统遇到了严重的错误,导致的结果是程序崩溃,软件重启。

本发明有益技术效果:

1.本发明的调试装置相比现有技术,直接采用mcu与上位机进行组装调试,而不采用专门的调试工具作为中间介质,这样使得调试成本降低,调试方法灵活可变。使上位机与待调试的mcu直接通信,使得数据传输更可靠。而且可以根据调试需求随时的对mcu增加具有特殊调试需求的功能模块,从而实现不同平台的mcu调试。

2.本发明的调试装置将所有的需要输出的信息放在存储器(缓存)中,等待系统空闲时候对外输出,这样避免了与其他高优先级的任务争夺时间,也充分利用了mcu资源。现有的调试工具,在调试过程中调用函数或者命令时产生的数据是不保存的,当函数调用完成后,其产生的数据在进行下一个函数调用时会将上一个函数产生的数据进行覆盖。本发明通过需要对外输出的数据存入缓存中,具有节省资源的效果,避免函数再次被调用。

3.划分了日志等级,并设置日志等级过滤模块对日志进行过滤。因此本发明具备强大的过滤功能,支持log记录。当产品交付于测试之后,测试时是需要断开仿真器的。也就是说传统的调试方式只适用于功能开发的时候使用。在测试阶段就无法知道程序的运行情况了。该工具添加的log追踪和过滤功能可以很好的解决这一问题。开发人员可以选择性过滤掉与bug不相干的log消息,快速追踪定位bug的位置。

4.程序方便移植,不同的厂家的mcu需要的调试器,和编译器是不同的,无法做到兼容。通过本发明提供的调试装置,仅需要将调试功能模块写入调试的mcu即可进行调试。因此,本发明的调试工具解除了平台的限制,解除的编译器的库限制,解除了对调试器的限制。

5.本发明能够实时打印调试日志,当对mcu进行调试时,可以通过日志打印模块对mcu调试后产生的日志进行打印。

附图说明

以下附图仅对本发明做示意性说明和解释,并不限定本发明的范围。

图1为现有技术中对mcu的调试流程示意图。

图2为本发明实施例中,mcu调试系统结构示意图。

图3为本发明实施例中调试指令模块包括具体的指令功能模块结构示意图。

图4为本发明实施例中调试功能模块包括具体的功能模块结构示意图。

图5为本发明实施例中上位机根据调试需求启动调试指令下发给mcu并对mcu进行调试的流程图。

图6为本发明实施例中mcu调试产生的数据发送给上位机进行显示的流程图。

图7为本发明实施例中数据包的封装方法示意图。

图8为本发明实施例中数据包的解包方法示意图。

图9为本发明实施例中日志打印方法示意图。

图10为本发明实施例中日志等级过滤模块中日志等级过滤的流程图。

具体实施方式

为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图2-10说明本发明的具体实施方式,在各图中相同的标号表示相同的部分。为使图面简洁,各图中的只示意性地表示出了与本发明相关部分,而并不代表其作为产品的实际结构。另外,以使图面简洁便于理解,在有些图中具有相同结构或功能的部件,仅示意性地绘示了其中的一个,或仅标出了其中的一个。

关于控制系统,本领域技术人员熟知的是,其可以采用任何适当的形式,既可以是硬件也可以是软件,既可以是离散设置的多个功能模块,也可以是集成到一个硬件上的多个功能单元。作为最简单的形式,所述控制系统可以是控制器,例如组合逻辑控制器、微程序控制器等,只要能够实现本申请描述的操作即可。当然,控制系统也可以作为不同的模块集成到一个物理设备上,这些都不偏离本发明的基本原理和保护范围。

实施例1:

本实施例提供一种跨平台的mcu调试装置,参见图2至图4,包括上位机1,mcu2,上位机1包括cpu11,存储模块12,调试指令模块13,通信模块14,封装解包模块15,cpu11分别与存储模块12、调试模块13、通信模块14、封装解包模块15进行电连接,mcu2包括cpu21,调试功能模块22,通信模块24,存储模块23,封装解包模块25,至少一个外设接口26。

上位机1的通信模块14与mcu中的通信模块24连接,其中通信模块14与通信模块24都可以采用无线通信或有线通信方式,若采用无线通信方式,无线通信方式可以wifi、蓝牙、超宽带、4g、5g通信等方式,或无线通信为t-box。也可以采用有线的通信方式,如上位机1和mcu2相互有匹配的接口,可以为以太网接口、i2c接口、usb接口、rs232接口、can接口、doip接口、uart接口等。如:上位机1的通信模块14具有i2c接口,mcu2的通信模块24具有i2c接口,则上位机1与mcu2通过i2c数据线进行有线连接。当采用无线通信时,上位机1的通信模块14含有无线通信组件,如具有wifi,mcu2的通信模块24具有含有无线通信组件,为wifi,上位机1可以通过wifi与mcu2进行连接。或者当上位机1为远程计算机或者服务器时,可以通过t-box与mcu2进行连接。

上位机1中,cpu11主要用于负责系统各模块之间的调用以及运算;

存储模块12,被配置为用于存储调试过程中所需要用到的数据以及调试指令程序;

调试指令模块13,被配置为根据调试需求调用相应的调试指令程序对mcu进行调试;

封装解包模块15,被配置为用于根据解包指令或封装指令进行相应的解包或封装;

通信模块14,被配置为用于上位机与外部设备进行通信;

mcu2中,mcu2可以为正在开发中的mcu,也可以为已经完成的mcu。

cpu21,被配置为用于负责系统各模块之间的调用以及运算;

存储模块23,被配置为用于存储调试过程中所需要用到的数据、产生的数据以及调试功能程序或者缓存数据等;

调试功能模块22,被配置为根据调试指令模块下发的调试指令启动相应的特定功能模块对mcu进行调试,调试功能模块22能够根据调试需求进行增加或者减少调试功能;

通信模块24,被配置为用于mcu与上位机进行通信;

封装解包模块25,被配置为用于根据解包指令或封装指令进行相应的解包或封装;

外设接口26,被配置为用于mcu与外部测设备进行通信连接;

具体地,外设接口包括多个不同的接口,如spi接口、usb,i2c接口、can接口、rs232接口,doip接口、uart接口,通过不同类型的接口,可以将不同的外接设备连接到mcu中,通过上位机的调试模块经mcu对外界设备进行调试。

具体地,需要说明的是本发明中的电连接可以为直接电连接或者间接电连接。

参见图3,调试指令模块包括:

日志打印指令模块,被配置为根据调试需求启动日志打印指令并下发给mcu中的日志打印模块;

日志等级过滤指令模块,被配置为根据调试需求启动日志等级过滤指令并下发给mcu中的日志等级过滤模块;

进程交互指令模块,被配置为根据调试需求启动各个进程之间的进程交互指令并下发给mcu的进程交互模块;

固件获取指令模块,被配置为根据调试需求启动获取固件的指令下发给mcu中的固件获取模块;

内容写入指令模块,被配置为根据调试需求启动内容写入的指令下发给mcu中的内容写入模块;

内容读取指令模块,被配置为根据调试需求启动内容读取的指令下发给mcu中的内容读取模块;

在线升级指令模块,被配置为根据调试需求启动在线升级的指令下发给mcu中的在线升级模块。

工具自适应识别指令模块,被配置为根据需求启动工具自适应指令并下发给mcu中的工具自适应识别模块;

应用层指令模块,被配置为根据需求启动应用层指令下发给mcu中的应用层功能定制模块;

参见图4,调试功能模块包括

日志打印模块,被配置为实现日志打印,其根据日志打印指令模块的指令将日志(log)消息进行打印输出,用来告知开发人员程序的运行状态;

日志等级过滤模块,被配置为实现日志等级过滤,其根据日志等级过滤指令模块的指令,有选择的实现动态过滤不同等级的日志能力。具体的,日志分为六个等级;

进程交互模块,被配置为实时记录多个任务之间的信息传递,其根据进程交互指令启动多个任务之间的信息传递记录;

固件获取模块,被配置为获取固件的信息,其根据固件获取指令获取固件信息;

内容写入模块,被配置为对接收到需要写入存储器的信息进行写入,其根据内容写入指令将相应的数据写入mcu的存储器中;

内容读取模块,被配置为对需要读取的信息进行读取,其根据内容读取指令对相应的内容进行读取;

在线升级模块,被配置为对mcu进行升级,其根据接收到来自上位机的升级指令对mcu进行升级;

工具自适应识别模块,被配置为根据上位机的工具自适应识别指令对上位机是否具有配套的串口工具进行识别;

应用层功能定制模块,被配置为根据上位机的应用层指令对应用程序的功能进行定制。

实施例2:

本实施提供了一种对跨平台的mcu调试方法,参见图5和图6,其包括两个阶段,第一阶段包括上位机根据调试需求启动调试指令下发给mcu,mcu接收到调试指令后启动相应的调试功能模块对mcu进行调试;

第二阶段包括mcu调试产生的数据发送给上位机进行显示,mcu调试产生的数据至少包括日志,日志根据类型划分为多个日志等级。在对mcu调试过程中,将需要输出的数据暂存于存储器中,等待系统空闲时候对外输出。或包括当发现mcu中调试功能模块没有内置预设的功能模块或根据调试需求,需要增加特殊功能模块式,通过上位机直接将含有所需的功能模块写入mcu中。具体地如:如需要对mcu进行还原,现有的功能模块不具备这个功能,此时,可以通过上位机将该功能程序直接写入mcu中。

调试指令模块,被配置为根据调试需求调用相应的调试指令程序对mcu进行调试;

调试功能模块,被配置为与调试指令模块相对应并根据调试指令模块下发的调试指令启动相应的功能模块对mcu进行调试。

第一阶段包括以下步骤:

步骤s101:根据调试需求通过上位机启动调试指令模块发送指令;

具体地,调试需求是根据工程师制定的调试方案来进行,调试指令模块集成了常见的mcu调试指令,还可以根据需求自动通过上位机通过添加或删除具体的调试指令。调制指令是事先定义好的,当mcu端接收到相应的调试指令时,其调试功能模块会根据调试指令执行相应的动作。

步骤s102,上位机的封装解包模块对接收到指令进行封装并形成数据包;

具体地,需要传送的数据包都需要进行封包,使其满足传输的标准协议才能够进行传输。此处,封装解包模块会对需要传输的指令按照预先定义的协议要求进行封包。

步骤s103,上位机中的通信模块将封装好的数据包发送给mcu;

具体地,上位机中的通信模块发送数据包给mcu的过程是mcu的通信模块对上位机的发送的数据包进行接收。

步骤s104,mcu的通信模块将接收到的数据包存入存储器中;

步骤s105,mcu中的封装解包模块对接收到的数据包进行解包并获得指令;

步骤s106,mcu中的调试功能模块根据指令调用相应的功能程序执行mcu的调试。

具体地,调试功能模块是预先写入mcu中的,调试功能模块与上位机中的调试指令模块相对应,其可以根据调试指令进行相应的调试动作。若mcu中无相应的调试功能模块,其可以通过上位机将调试功能模块写入到mcu中在进行调试。

调试功能模块包括封装好的程序,其可以直接将封装的程序直接写入到mcu即可,结果方便快捷。

mcu调试产生的数据发送给上位机进行显示至少包括以下步骤:

步骤s201:根据调试需求将对mcu调试产生的数据进行发送;

具体地,调试需求是根据根据第一阶段中下发的指令通过mcu中的调试功能启动相应的调试功能模块进行对mcu进行调试,调试过程会产生一系统的日志、调试结果、mcu运行状态等数据,需要将这些数据发送给上位机进行显示,从而工程师能够查看这些数据进而对mcu的调试结果进行分析。

步骤s202,判断数据类型;

具体地,调试过程中会产生数据包,也可以产生命令包,因此数据传送过程中需要判断数据包的类型。

步骤s203,mcu中的封装解包模块根据需求进行封包并将数据包存入存储器中;

具体地,需要传送的数据包都需要进行封包,使其满足传输的标准协议才能够进行传输。此处,封装解包模块会对需要传输的指令按照预先定义的协议要求进行封包。

步骤s204,mcu中的通信模块将存储器中的数据包发送给上位机;

具体地,mcu中发送数据给上位机是通过通信模块进行的。

步骤s205,上位机中的封装解包模块对接收的数据包进行解包;

步骤s206,上位机将解包的数据进行显示。

具体地,将mcu调试产生的数据在上位机上进行显示,工程是可以显示的内容检查mcu是否存在问题,若存在问题,数据会显示出产生问题的原因,然后工程能够比较方便地对数据进行修改。

调试功能模块包括封装好的程序,其可以直接将封装的程序直接写入到mcu,结果方便快捷。

实施例3

本实施例提供了数据封装以及数据解包的方法,其通过封装解包模块完成,具体参见图7和图8。

数据封装方法参见图7,包括以下步骤:

步骤s701,获取需要封包的有效载荷(payload)并从中获取有效载荷的地址、长度、数据包类型;

具体地,需要传送的有效载荷已经存在了,在传送的时候需要进行封包,依据数据包的类型将有效载荷加上报头才能进行传送;

步骤s702,判断地址是否有效,若地址无效,则执行步骤s707,结束封包过程;若地址有效,则执行步骤s703;

具体地,由于载荷数据存储是分段,根据获得的地址在存储区域进行查找是否存在该地址,若存在该地址,则说明该地址有效。若不存在该地址,则地址无效。

步骤s703,判断有效载荷命令类型,若有效载荷的命令类型有效,则执行步骤s704,若有效载荷的命令类型无效,则执行步骤s707,结束封包过程;

具体地,有效载荷的类型需要进行判断,本发明中的有效载荷包括四种类型,分别定义如下:第一类:0x01:logmessagepacket.第二类:0x02:cmdmessagepacket。第三类:0x03:firmwarepacket。第四类:0x04:osmsgpacket。若有效载荷是上述四种类型,则认为有效,若有效载荷不是上述四种类型,则认为无效。

步骤s704,判断有效载荷的数据长度是否有效,若数据长度无效,则执行步骤s807,结束封包过程,若数据长度有效,则执行步骤s705;

步骤s705,给有效载荷进行赋值;

具体地,赋值包括对有效载荷根据判断的数据包类型,数据包长度,再加上校验信息、加密信息等等。

步骤s706,将封包好的数据存入待发送的数据区。

数据解包方法参见图7,至少包括以下步骤:

步骤s800,检测帧字头是否为包含高字节,若含有高字节,则执行步骤s801,若没有高字节,回到步骤s800,对下一帧进行检测;

具体地,通过封装的数据包通过包括帧字头(head)和有效载荷(payload),帧字头(即报头)定义了一些规则,若可以用两个字节作为这个数据包的开始标志,一个就是帧头高字节,一个是帧头低字节。解包时,首要就是要对帧字头进行分析,数据是以帧进行传送,因此对帧字头进行检测,查看是否包含高字节。

步骤s801,检测帧字头时有包含低字节,若包含低字节,则执行步骤s802;若不包含低字节,则回到步骤s800,对下一帧数据进行检测;

具体地,通过封装的数据包通过包括帧字头(head)和有效载荷(payload),帧字头(即报头)定义了一些规则,若可以用两个字节作为这个数据包的开始标志,一个就是帧头高字节,一个是帧头低字节。解包时,首要就是要对帧字头进行分析,数据是以帧进行传送,因此对帧字头进行检测,查看是否包含低字节。

步骤s802,获取数据包的长度;

具体地,数据传送过来,一帧数据总体上分为两段,分别为帧头(head)和payload(有效载荷),数据包长度信息放在帧头中,因此通过分析帧子头,就能够知晓数据包的长度。

步骤s803,解析包类型,判断数据包是属于哪一类。

在本发明中的有效载荷包括四种类型,分别定义如下:第一类:0x01:logmessagepacket.第二类:0x02:cmdmessagepacket.第三类:0x03:firmwarepacket.第四类:0x04:osmsgpacket。在数据封包过程中,已经对数据类型进行了定义,因此通过对帧字头进行分析,就能够知晓数据包的类型。

步骤s804,获取解包后有效载荷;

具体地,通过分析数据包的帧字头后,获取相关信息,将帧字头去掉,剩下有效载荷。

实施例4:

开发人员在开发程序的过程中,可以调用log接口,将log分布在自己编写的程序的任何位置。用来离线的检测系统的运行状态。在调试过程中也可以将程序员关心的一些变量,按照各种格式打印出来,log可以理解为脱机之后的唯一一个检测系统的窗口。调试过程中的日志是通过日志打印指令模块通过下发指令控制日志打印模块进行打印的,具体的日志打印流程参见图9。

步骤s901,判断日志等级是否匹配,若匹配,则执行步骤s902,若不匹配,则执行步骤s912;

具体地,本发明将日志等级划分为多个等级,若打印的等级为已定义的等级中的内容以及过滤模块中时打开的,则认为是匹配的,若打印的内容并不在预定义的等级范围内或者过滤模块中等级范围是关闭状态,则为不匹配。

步骤s902,读取需要打印调试数据包中的字符串首地址的字符;

步骤s903,判断该地址的首字符是否是“结束符”,若是地址首字符是结束符,则结束该过程。若首字符不是结束符,则继续下一步动作。

具体地,结束符可以自己定义,通常为“\0”。

步骤s904,判断字符是否为‘%’,若字符不是‘%’,则执行步骤s910,保存该字符;若字符是‘%’,则获取下一个字符;

步骤s905,判断下一个字符是否为x或d,若为d,则执行步骤s906,若为x,则执行步骤s908;

步骤s906,获取下一个参数;

步骤s907,将获取的参数转化为十进制字符并执行步骤s910;

步骤s908,获取下一个参数;

步骤s909,将获取的参数转为十六进制字符并执行步骤s910;

步骤s910,保存该字符;

步骤s911,指向下一个字节,跳转重复步骤s903,直至所有的字符打印结束。

例如:打印一行调试日志,logpintf(log_info,“thisistest%d\0”,cnt1,cnt2,cnt3),

log_info为预先定义的多个等级中一个,若log_info的打印中,日志等级过滤模块,如果打开状态,则log_info等级是匹配的。若不是定义的等级类型或日志等级过滤模块时关闭的,则不匹配。

若匹配,显示字符“t”并不是“%”,则保存“t”,直至保存thisistest,此时程序执行到%,该字符为%,查看下一步字符,为d,获取下一个参数cnt1,将cnt1转为十进制数显示。需要说明的是“\0”是系统自动加载的,实际上并不显示。因此,默认“%”的内容是不显示的,认为“%”之后的字符是cnt1。

图10为日志等级过滤模块的日志等级过滤的具体流程图,在日志打印过程中,可以通过日志等级过滤指令下发给日志等级过滤模块进行执行等级过滤,日志等级过滤模块会将日志分为多个等级,本实施例中,等级包括6个,配合上位机实现动态过滤不同等级log的能力。

log模块定义了6个等级,分别为debug(调试消息),info(信息),osmsg(类型消息),warn(警告),error(错误),fatal(致命),每一个等级日志都设置有显示(on)或关闭(off),通过选择显示或关闭选型,可以将需要的日志快速的查找出来,过滤掉相关的模块。例如:如果我们需要显示debug日志,则debug需要选择ondebug消息,如果要过滤掉debug日志,则debug需要选择offdebug消息,其它依次类推。

实现打印日志等级过滤通过日志等级过滤模块来完成,具体包括以下步骤:

步骤s601,接收上位机端的数据;

步骤s602,检验数据包的完整性,若数据包是完整的,则执行步骤s603,若数据包是不完整的,则结束该过程;

步骤s603,对数据包的类型进行解析并将数据包依据类型放入相应的等级内;

步骤s604对需要显示的日志选on,不需要显示的日志选择off,然后进行打印;

具体地,日志模块的等级显示on时,则表示需要打印该等级出来,若日志模块的等级显示off时,则表示无须打印出该日志等级;

debug日志用来记录系统调试过程中命令状态,主要是在某个单一功能调试的时候使用,可以不用考虑整个系统。因为在软件释放的时候,这个等级的log默认是关闭的。当这个程序开发完毕之后,debug类型的log会被删除。比如我们在调试车速的时候,可以实时的将当前从can网络上采集的车速值打印出来。等待此功能完全做好了,再把这段log删除。因为这种等级的log对系统而言没有太大意义,但是对于当前功能的开发和调试非常有用。

info日志类型的log主要是用来记录当前系统的一个运行状态。阶段性,标志性的动作已经执行之后会使用这一类型的消息。比如外设上电完成,外设初始化成功。这些消息可以监控系统的运行状态,告知调试人员有当前程序运行到哪一阶段。如果发现本该打印的info消息却没有打印出来,则说明对应区域的功能可能出现故障。

osmsg日志类型的消息是用来记录进程之间的一个交互过程。只要是进程发出去的消息队列,都被打上osmsg的标签,对外输出。可以根据源进程,目标进程,命令类型来过滤出关注的消息。一方面可以检测负担重的进程,可以给这一类进程分配更多的资源用来保障其正常运行。也可以过滤出一些关键性的命令来更加深入的了解系统的运行过程。

warn日志类型主要是用来警告开发人员,有可能发生了错误,或者进行了非法操作。

error日志类型的消息主要告知开发人员程序运行过程中遇到了错误,但是这类错误在程序中已经做了相关的处理,对于功能可能失效了,但是系统运行不会受到影响。

fata日志类型的消息用来告知开发人员,系统遇到了严重的错误,导致的结果是程序崩溃,软件重启等严重的后果。

实施例5:

开发人员在对mcu进行调试的过程中,通过上位机中调试指令模块,如日志打印、进程交互、内容读取等指令,将这些指令下发到mcu中调试功能模块,通过启动相应的功能模块产生的调试数据,将这些数据存储于存储器中,优选的,存储于缓存中,而不立即清除等待系统空闲时候对外输出,这样避免了与其他高优先级的任务争夺时间,也充分利用了mcu资源。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1