一种调试嵌入式系统多中断的方法和装置.pdf

上传人:a1 文档编号:6062221 上传时间:2019-04-05 格式:PDF 页数:14 大小:819.95KB
返回 下载 相关 举报
摘要
申请专利号:

CN201710110051.3

申请日:

2017.02.27

公开号:

CN106933661A

公开日:

2017.07.07

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效 IPC(主分类):G06F 9/48申请日:20170227|||公开

IPC分类号:

G06F9/48

主分类号:

G06F9/48

申请人:

百富计算机技术(深圳)有限公司

发明人:

董时舫; 赵谊科

地址:

518057 广东省深圳市南山区高新区科技中二路软件园3栋401、402

优先权:

专利代理机构:

深圳中一专利商标事务所 44237

代理人:

彭海民

PDF下载: PDF下载
内容摘要

本发明属于嵌入式软件领域,提供了一种调试嵌入式系统多中断的方法和装置,以便快速、准确地定位出多中断交错产生情况下发生异常的根本原因。该方法包括:为包括N个元素的环形结构数组分配内存;按照一个元素写入一个系统中断的中断运行状态信息的方式,向环形结构数组循环写入系统中断的中断运行状态信息;当有输出要求时,输出环形结构数组中写入的中断运行状态信息。本发明提供的技术方案一方面既避免了中断数据较多时缓存不足导致数据溢出的问题,又可提供最近的有利于快速、有效地复现出异常的流水;另一方面,输出中断运行状态信息时不会打乱系统原本的中断发生次序,不会对系统原本的中断产生影响,输出中断运行状态信息的通道可控可选。

权利要求书

1.一种调试嵌入式系统多中断的方法,其特征在于,所述方法包括:
为包括N个元素的环形结构数组分配内存,所述N为大于2的整数;
按照一个元素写入一个系统中断的中断运行状态信息的方式,向所述环形结构数组循
环写入系统中断的中断运行状态信息;
当有输出要求时,输出所述环形结构数组中写入的中断运行状态信息。
2.如权利要求1所述的方法,其特征在于,所述按照一个元素写入一个系统中断的中断
运行状态信息的方式,向所述环形结构数组循环写入系统中断的中断运行状态信息,包括:
在中断服务子程序的入口处调用数据采集函数,以执行下述操作:
关闭系统总中断;
执行所述数据采集函数的数据采集功能,将系统当前中断的中断运行状态信息写入所
述环形结构数组对应于当前写入序号的元素中;
开启所述系统总中断。
3.如权利要求2所述的方法,其特征在于,所述将系统当前中断的中断运行状态信息写
入所述环形结构数组对应于当前写入序号的元素中之后,所述方法还包括:
将所述当前写入序号的值增1;
将值增1后的写入序号与所述N进行模运算;
将所述模运算后的结果重新赋值给所述写入序号。
4.如权利要求1至3任意一项所述的方法,其特征在于,所述当有输出要求时,输出所述
环形结构数组中写入的中断运行状态信息,包括:
当有输出要求时,调用输出函数,以执行下述操作:
关闭系统总中断;
将所述环形结构数组对应于当前读出序号的元素中的内容输出至输出通道;
判断所述环形结构数组的所有元素中的内容是否读完;
若所述环形结构数组的所有元素中的内容已经读完,则开启所述系统总中断,否则继
续输出所述环形结构数组元素中的内容。
5.如权利要求4所述的方法,其特征在于,所述判断所述环形结构数组的所有元素中的
内容是否读完,包括:
将所述环形结构数组对应于当前读出序号的元素中的内容输出至输出通道后,对所述
当前读出序号的值执行增1操作;
将值执行增1操作后的读出序号的值与所述N进行模运算并赋值给所述读出序号;
若已读取元素的总个数达到N,则确定所述环形结构数组的所有元素中的内容已经读
完。
6.一种调试嵌入式系统多中断的装置,其特征在于,所述装置包括:
内存分配模块,用于为包括N个元素的环形结构数组分配内存,所述N为大于2的整数;
写入模块,用于按照一个元素写入一个系统中断的中断运行状态信息的方式,向所述
环形结构数组循环写入系统中断的中断运行状态信息;
输出模块,用于当有输出要求时,输出所述环形结构数组中写入的中断运行状态信息。
7.如权利要求6所述的装置,其特征在于,所述写入模块包括:
第一调用单元,用于在中断服务子程序的入口处调用数据采集函数;
第一关闭单元,用于关闭系统总中断;
信息写入单元,用于执行所述数据采集函数的数据采集功能,将系统当前中断的中断
运行状态信息写入所述环形结构数组对应于当前写入序号的元素中;
第一开启单元,用于开启所述系统总中断。
8.如权利要求7所述的装置,其特征在于,所述装置还包括:
第一自增模块,用于所述信息写入单元执行所述数据采集函数的数据采集功能,将系
统当前中断的中断运行状态信息写入所述环形结构数组对应于当前写入序号的元素中之
后,将所述当前写入序号的值增1;
第一模运算模块,用于将值增1后的写入序号与所述N进行模运算;
赋值模块,用于将所述模运算后的结果重新赋值给所述写入序号。
9.如权利要求6至8任意一项所述的装置,其特征在于,所述输出模块包括:
第二调用单元,用于当有输出要求时,调用输出函数;
第二关闭单元,用于关闭系统总中断;
输出单元,用于将所述环形结构数组对应于当前读出序号的元素中的内容输出至输出
通道;
判断单元,用于判断所述环形结构数组的所有元素中的内容是否读完;
第二开启单元,用于若所述环形结构数组的所有元素中的内容已经读完,则开启所述
系统总中断,否则所述输出单元继续输出所述环形结构数组元素中的内容。
10.如权利要求9所述的装置,其特征在于,所述判断单元包括:
第二自增模块,用于所述输出单元将所述环形结构数组对应于当前读出序号的元素中
的内容输出至输出通道后,对所述当前读出序号的值执行增1操作;
第二模运算模块,用于将值执行增1操作后的读出序号的值与所述N进行模运算并赋值
给所述读出序号;
确定模块,用于若已读取元素的总个数达到N,则确定所述环形结构数组的所有元素中
的内容已经读完。

说明书

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

技术领域

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

背景技术

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

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

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,Read Only Memory)、随机存取存储器(RAM,Random
Access Memory)、磁盘或光盘等。

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

一种调试嵌入式系统多中断的方法和装置.pdf_第1页
第1页 / 共14页
一种调试嵌入式系统多中断的方法和装置.pdf_第2页
第2页 / 共14页
一种调试嵌入式系统多中断的方法和装置.pdf_第3页
第3页 / 共14页
点击查看更多>>
资源描述

《一种调试嵌入式系统多中断的方法和装置.pdf》由会员分享,可在线阅读,更多相关《一种调试嵌入式系统多中断的方法和装置.pdf(14页珍藏版)》请在专利查询网上搜索。

本发明属于嵌入式软件领域,提供了一种调试嵌入式系统多中断的方法和装置,以便快速、准确地定位出多中断交错产生情况下发生异常的根本原因。该方法包括:为包括N个元素的环形结构数组分配内存;按照一个元素写入一个系统中断的中断运行状态信息的方式,向环形结构数组循环写入系统中断的中断运行状态信息;当有输出要求时,输出环形结构数组中写入的中断运行状态信息。本发明提供的技术方案一方面既避免了中断数据较多时缓存不足。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1