一种调试嵌入式系统多中断的方法和装置与流程

文档序号:12824528阅读:383来源:国知局
一种调试嵌入式系统多中断的方法和装置与流程

本发明属于嵌入式软件领域,尤其涉及一种调试嵌入式系统多中断的方法和装置。



背景技术:

在嵌入式系统软件的运行中,经常出现多个中断交错产生即同时、嵌套或串行发生,并因此发生异常的情况,因而需要跟踪定位多中断情况下发生异常的根本原因并加以解决。

现有的一种调试多中断的方法是在中断服务程序中将当前中断的断点信息采集后,立即从某个可输出模块输出。现有的调试方法存在的问题包括:

1)若输出过程采用中断方式来进行,则使系统中断增多,也打乱了系统原本的中断发生次序,若输出过程采用非中断方式来进行,则加大了对应中断服务程序的执行时间,会引起中断响应不及时的其它系统问题;

3)数据量往往非常巨大,查找数据非常麻烦和困难;

4)被聚焦调试的模块无法被用来进行调试输出,例如,通讯端口自身中断的调试无法采用本端口来即时输出调试信息,屏幕自身中断的调试无法采用屏幕来即时输出,打印机自身中断的调试无法采用打印机来即时输出。

综上,上述现有的调试多中断的方法会对系统本身的中断造成不良影响,常常难以跟踪定位出发生异常的原因。



技术实现要素:

本发明的目的在于提供一种调试嵌入式系统多中断的方法和装置,以避免对嵌入式系统本身的中断造成不良影响,并提高调试的效率。

本发明第一方面提供一种调试嵌入式系统多中断的方法,所述方法包括:

为包括n个元素的环形结构数组分配内存,所述n为大于2的整数;

按照一个元素写入一个系统中断的中断运行状态信息的方式,向所述环形结构数组循环写入系统中断的中断运行状态信息;

当有输出要求时,输出所述环形结构数组中写入的中断运行状态信息。

本发明第二方面提供一种调试嵌入式系统多中断的装置,所述装置包括:

内存分配模块,用于为包括n个元素的环形结构数组分配内存,所述n为大于2的整数;

写入模块,用于按照一个元素写入一个系统中断的中断运行状态信息的方式,向所述环形结构数组循环写入系统中断的中断运行状态信息;

输出模块,用于当有输出要求时,输出所述环形结构数组中写入的中断运行状态信息。

从上述本发明技术方案可知,由于保存中断运行状态信息的数组是环形结构,因此,一方面,既避免了中断数据较多时缓存不足导致数据溢出的问题,又可提供最近的一段中断发生情况的流水,这些流水有利于快速、有效地定位出异常;另一方面,输出中断运行状态信息时不会打乱系统原本的中断发生次序,不会对系统原本的中断产生影响,而且,输出中断运行状态信息的通道可控可选。

附图说明

图1是本发明实施例一提供的调试嵌入式系统多中断的方法的实现流程示意图;

图2是本发明实施例二提供的调试嵌入式系统多中断的装置的结构示意图;

图3是本发明实施例三提供的调试嵌入式系统多中断的装置的结构示意图;

图4是本发明实施例四提供的调试嵌入式系统多中断的装置的结构示意图;

图5-a是本发明实施例五提供的调试嵌入式系统多中断的装置的结构示意图;

图5-b是本发明实施例六提供的调试嵌入式系统多中断的装置的结构示意图;

图5-c是本发明实施例七提供的调试嵌入式系统多中断的装置的结构示意图;

图6-a是本发明实施例八提供的调试嵌入式系统多中断的装置的结构示意图;

图6-b是本发明实施例九提供的调试嵌入式系统多中断的装置的结构示意图;

图6-c是本发明实施例十提供的调试嵌入式系统多中断的装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例提供一种调试嵌入式系统多中断的方法,所述方法包括:为包括n个元素的环形结构数组分配内存,所述n为大于2的整数;按照一个元素写入一个系统中断的中断运行状态信息的方式,向所述环形结构数组循环写入系统中断的中断运行状态信息;当有输出要求时,输出所述环形结构数组中写入的中断运行状态信息。本发明实施例还提供相应的一种调试嵌入式系统多中断的装置。以下分别进行详细说明。

请参阅附图1,是本发明实施例一提供的调试嵌入式系统多中断的方法的实现流程示意图,主要包括以下步骤s101至步骤s103,详细说明如下:

s101,为包括n个元素的环形结构数组分配内存,其中,n为大于2的整数。

在本发明实施例中,环形结构数组是具有环形结构且包含n个元素的数组,其主要包含中断发生前的运行模式、被中断的地址、当前所服务的中断号、尚未处理中断的标识寄存器、当前系统计时滴答数和关键寄存器列表等字段;可在系统内存空间中为环形结构数组分配适当的内存。需要说明的是,上述环形结构数组的元素个数n可根据系统内存容量和中断发生的频率等实际情况来灵活确定,典型地,n可取值为100、200等,环形结构数组的元素包含的字段可根据所采用的具体cpu和所发生异常的具体情况进行调整,并不限于所述这些字段;原则上,凡是根据当前实际情况认为有利于问题准确定位的信息,均可作为字段包含至环形结构数组的元素。

还需说明的是,为包括n个元素的环形结构数组分配内存这一操作只需执行一次,可在编译期间静态分配或在系统初始化时动态分配,分配时并将该环形结构数组及其读出序号、写入序号清零;读出序号或写入序号与该环形结构数组的元素一一对应。

s102,按照一个元素写入一个系统中断的中断运行状态信息的方式,向环形结构数组循环写入系统中断的中断运行状态信息。

作为本发明一个实施例,按照一个元素写入一个系统中断的中断运行状态信息的方式,向所述环形结构数组循环写入系统中断的中断运行状态信息可通过如下步骤s1021至s1024实现:

s1021,在中断服务子程序的入口处调用数据采集函数,以执行步骤s1022至s1024的操作。

需要说明的是,在本发明实施例中,若尚不确定某一个中断是否会引起问题,或不确定是哪几个中断交错而引起问题,可在每一处中断服务子程序的入口处均调用数据数据采集函数,以避免遗漏关键信息而导致后续无法定位问题根本原因。若可以十分确定某个中断不会引起问题,则在该中断对应的中断服务子程序的入口处也可以不调用数据采集函数。

s1022,关闭系统总中断。

一般地,在中断服务子程序的入口处,cpu会自动关闭中断,如此,数据采集函数不用进行原子化操作。然而,若在中断服务子程序的入口处,cpu并不自动关闭中断,则应关闭系统总中断,以避免中断嵌套时写入该环形结构数组的动作被另一个中断所中止和/或打乱,具体方式是可以在数据数据采集函数中进行原子化处理,即,在数据采集函数的最开始处,执行关闭系统总中断。

s1023,执行数据采集函数的数据采集功能,将系统当前中断的中断运行状态信息写入环形结构数组对应于当前写入序号的元素中。

在本发明实施例中,中断运行状态信息来源于cpu的相关寄存器或者是相关系统全局变量,实际上是环形结构数组包含的字段的具体内容,即,中断发生前的运行模式、被中断的地址、当前所服务的中断号、尚未处理中断的标识寄存器、当前系统计时滴答数和关键寄存器列表等具体信息。

如前所述,环形结构数组的一个元素对应于一个写入序号。在本发明实施例中,执行数据采集函数的数据采集功能时,是将系统当前中断的中断运行状态信息写入环形结构数组对应于当前写入序号的元素中,在此之后,将当前写入序号的值增1,将值增1后的写入序号与n进行模运算,将模运算的结果重新赋值给写入序号,以便下次执行写入操作时写入当前写入序号的元素之后的一个元素中;若模运算后的结果为0,则写入序号回绕到0,以便下次向环形结构数组写入中断运行状态信息时从环形队列的头部开始重新写入。

s1024,开启系统总中断。

当执行过关闭系统总中断时,相应地,在执行数据采集函数的数据采集功能完成之后,应将系统总中断开启。

s103,当有输出要求时,输出环形结构数组中写入的中断运行状态信息。

作为本发明一个实施例,当有输出要求时,输出环形结构数组中写入的中断运行状态信息可通过如下步骤s1031至s1035实现:

s1031,当有输出要求时,调用输出函数,以执行步骤s1032至s1035的操作。

在本发明实施例中,当有输出要求时,例如,发生总线异常中断、按指定按键或通讯口收到特定指令等,可在对应的中断服务子程序的入口处调用输出函数,此处,对应的中断服务子程序可以是总线异常中断服务子程序、按键中断服务子程序或通讯口接收中断服务子程序,具体说明如下:

1)总线异常中断服务子程序是指发生取指令、非法地址访问等错误时的系统保护性中断所对应的服务子程序,该中断往往是因为个别中断服务子程序中的问题代码运行而被触发,在该子程序中输出环形结构数组的元素中的内容,可以让调试者正好看到出错之前最紧邻的一段中断发生情况;

2)按键中断服务子程序,对于异常发生却不产生上述总线异常中断的情况(例如:系统被不间歇的中断所挂死),可以将输出过程放在按键中断服务子程序中,同时,在必要和可能的情况下,可将按键中断的优先级调高,以确保异常发生时按键中断能被触发和响应,在按键中断服务子程序中,当检测到某个特定的按键被按下时,即输出环形结构数组中元素的内容,其中,该特定按键可以根据实际情况自行指定;当异常发生且不产生上述总线异常中断时,即可按下指定按键来输出环形结构数组元素中的内容;

3)通讯口接收中断服务子程序,对于异常发生却不产生上述总线异常中断、且系统无键盘的情况,可以将输出过程放在某个通讯口的接收中断服务子程序中,同时,在必要和可能的情况下,可将对应通讯口的中断优先级调高,以确保异常发生时该通讯口接收中断能被触发和响应;在该通讯口接收中断服务子程序中,当接收到某个特定的字符串时,即输出环形结构数组元素中的内容,该特定字符串可以根据实际情况自行指定,以尽量减小对该通讯口接收通道的影响;当异常发生且不产生上述总线异常中断时,即可通过外部设备向该通讯口发出指定的字符串来输出环形结构数组元素中的内容;在本发明实施例中,通讯口可以是是指串口、usb口、以太网口等系统所配置的外部接口中的任意一种。

s1032,关闭系统总中断。

s1033,将环形结构数组对应于当前读出序号的元素中的内容输出至输出通道。

在本发明实施中,当前读出序号与当前写入序号的数值是相等的,并且对应于环形结构数组的一个元素。至于输出通道,可以根据实际情况选择通讯口、打印机或屏幕中的任意一种或多种。

s1034,判断环形结构数组的所有元素中的内容是否读完。

本发明实施例中,判断环形结构数组的所有元素中的内容是否读完具体可以是:将环形结构数组对应于当前读出序号的元素中的内容输出至输出通道后,对当前读出序号的值执行增1操作,将值执行增1操作后的读出序号的值与环形结构数组包含的元素个数n进行模运算,将模运算的结果重新赋值给读出序号,以便后续将当前读出序号对应的元素之后的一个元素读出,若已读取元素的总个数达到n,则确定环形结构数组的所有元素中的内容已经读完。

s1035,若环形结构数组的所有元素中的内容已经读完,则开启系统总中断,否则,重复步骤s1033和s1034,继续输出环形结构数组元素中的内容。

从上述附图1示例的调试嵌入式系统多中断的方法可知,由于保存中断运行状态信息的数组是环形结构,因此,一方面,既避免了中断数据较多时缓存不足导致数据溢出的问题,又可提供最近的一段中断发生情况的流水,这些流水有利于快速、有效地定位出异常;另一方面,输出中断运行状态信息时不会打乱系统原本的中断发生次序,不会对系统原本的中断产生影响,而且,输出中断运行状态信息的通道可控可选。

请参阅附图2,是本发明实施例二提供的调试嵌入式系统多中断的装置的结构示意图。为了便于说明,附图2仅示出了与本发明实施例相关的部分。附图2示例的调试嵌入式系统多中断的装置可以是附图1示例的调试嵌入式系统多中断的方法的执行主体,其主要包括内存分配模块201、写入模块202和输出模块203,详细说明如下:

内存分配模块201,用于为包括n个元素的环形结构数组分配内存,其中,n为大于2的整数;

写入模块202,用于按照一个元素写入一个系统中断的中断运行状态信息的方式,向环形结构数组循环写入系统中断的中断运行状态信息;

输出模块203,用于当有输出要求时,输出环形结构数组中写入的中断运行状态信息。

附图2示例的写入模块202可以包括第一调用单元301、第一关闭单元302、信息写入单元303和第一开启单元304,如附图3所示本发明实施例三提供的调试嵌入式系统多中断的装置,其中:

第一调用单元301,用于在中断服务子程序的入口处调用数据采集函数;

第一关闭单元302,用于关闭系统总中断;

信息写入单元303,用于执行数据采集函数的数据采集功能,将系统当前中断的中断运行状态信息写入环形结构数组对应于当前写入序号的元素中;

第一开启单元304,用于开启系统总中断。

附图3示例的装置还包括第一自增模块401、第一模运算模块402和赋值模块403,如附图4所示本发明实施例四提供的调试嵌入式系统多中断的装置,其中:

第一自增模块401,用于信息写入单元303执行数据采集函数的数据采集功能,将系统当前中断的中断运行状态信息写入环形结构数组对应于当前写入序号的元素中之后,将当前写入序号的值增1;

第一模运算模块402,用于将值增1后的写入序号与n进行模运算;

赋值模块403,用于将第一模运算模块402模运算后的新结果重新赋值给写入序号。

附图2至附图4任一示例的输出模块203可以包括第二调用单元501、第二关闭单元502、输出单元503、判断单元504和第二开启单元505,如附图5-a至附图5-c所示本发明实施例五至七提供的调试嵌入式系统多中断的装置,其中:

第二调用单元501,用于当有输出要求时,调用输出函数;

第二关闭单元502,用于关闭系统总中断;

输出单元503,用于将环形结构数组对应于当前读出序号的元素中的内容输出至输出通道;

判断单元504,用于判断环形结构数组的所有元素中的内容是否读完;

第二开启单元505,用于若环形结构数组的所有元素中的内容已经读完,则开启系统总中断,否则,输出单元503继续输出环形结构数组元素中的内容。

附图5-a至附图5-c示例的判断单元504可以包括第二自增模块601、第二模运算模块602和确定模块603,如附图6-a至附图6-c所示本发明实施例八至十提供的调试嵌入式系统多中断的装置,其中:

第二自增模块601,用于输出单元503将环形结构数组对应于当前读出序号的元素中的内容输出至输出通道后,对当前读出序号的值执行增1操作;

第二模运算模块602,用于将值执行增1操作后的读出序号的值与环形结构数组包含的元素个数n进行模运算并赋值给读出序号;

确定模块603,用于若已读取元素的总个数达到n,则确定环形结构数组的所有元素中的内容已经读完。

需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁盘或光盘等。

以上对本发明实施例所提供的一种调试嵌入式系统多中断的方法和装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

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