检测未初始化的存储器读取的方法

文档序号:6522422阅读:321来源:国知局
检测未初始化的存储器读取的方法
【专利摘要】本发明展示一种检测未初始化的存储器读取的方法,其中将随机存取存储器系统的全部或一子组初始化为已知值。实施一个或一个以上观察点,其中在检测到存储器读取之后,将所读取的值与在初始化期间写入的所述值进行比较。如果所述值匹配,那么捕获调试信息并采取适当校正行动。
【专利说明】检测未初始化的存储器读取的方法
【技术领域】
[0001]本发明的【技术领域】为嵌入式存储器调试测试。
【背景技术】
[0002]未初始化的存储器读取(UMR)为软件程序员所遇到的常见问题且往往难以追捕到。存在其中可能遇到UMR的许多情况,但最终UMR被定义为从存储器中的尚未初始化的位置的读取。
[0003]可能导致UMR的一些情境为以下各项的读取请求:
[0004].存取已分配但尚未初始化的存储器位置。
[0005].存取超出存储器的经分配块的端的位置。
[0006].尝试存取尚未分配的位置。
[0007].存取存储器中的先前分配但随后释放(或重新分配并移动)的位置。
[0008]?存取存储器中的随机位置。
[0009]“存取已分配但尚未初始化的存储器位置”中的上文所描述的情境的C中的实例
为:
[0010]
Sirucl umr_lcsl {
ini clcmcnl;

}
void main ()
{

slrucl umr_icst ;:;pinst;
pinsl = (sirucl umr_lcsl:::)malloc(sizcof(slrucl umr_lcsl));
primlV‘pinsl->clcmciU = %d\n'\ pinsl->clcmciU); //此处发,1-: UMR
return;

}
[0011]通常,当想到UMR如何发生时,想到执行指令序列的处理器。注意UMR可为系统中的任何主机(包含DMA及外围装置)的读取请求的结果为重要的。
[0012]现有技术中的一种方法为在存储器中的各个位置处建立‘观察区(watch) ’。一旦建立观察区,即假设其正监视的存储器位置未初始化。借助‘写入’监视对所观察存储器位置的后续存取,从而致使将相关联地址视为经初始化的。如果观察区检测到对未初始化的位置的读取存取,那么触发UMR的等效物。
[0013]此方法的缺点为依赖于硬件追踪特定存储器地址或存储器区域的状态。此可导致观察大量额外硬件,通常为大约每地址I个寄存器。
[0014]现有技术中已知的另一方法为其中使用存储器的ECC(误差校正码)的经保留/未使用的编码来检测UMR。通过内建自测试(BIST)逻辑将存储器内的ECC初始化为定义为意指‘未初始化’的状态。当向存储器写入时,将用不同于‘未初始化’编码的设定覆写ECC0如果用指示尚未向存储器写入的ECC值读取存储器,那么将产生断点或中断。此方法的缺点为其仅借助支持ECC的存储器具功能性。

【发明内容】

[0015]所提出的发明使用数据观察点来监视通过调试工具设定的特定值的所有读取数据循环。所观察的所述值为预定的且表示未初始化的存储器。此后此值称为UMR_DATA_VALUE。
[0016]在UMR调试会话开始时,将用UMR_DATA_VALUE初始化系统中的所有存储器。在其中此方法不实际的系统中,用UMR_DATA_VALUE初始化由于需要检测UMR而定义为调试会话的一部分的某一子组的存储器。
[0017]作为程序执行的一部分,每当释放经分配存储器时,将需要用UMR_DATA_VALUE初始化所述经释放存储器的内容。
[0018]需要将数据观察点策略性地部署为系统的总线拓扑中的关键监视点。数据观察点监视其附加到的总线基础设施的读取数据循环。当数据观察点检测到在读取数据循环期间观察的值与UMR_DATA_VALUE之间的匹配时,其触发调试序列。在调试序列期间,捕获与读取数据循环相关联的信息且接着采取某一行动。
【专利附图】

【附图说明】
[0019]在图式中图解说明本发明的这些及其它方面,其中:
[0020]图1图解说明UMR初始化流程;
[0021]图2图解说明UMR观察点流程。
【具体实施方式】
[0022]所提出的发明使用数据观察点来监视通过调试工具设定的特定值的所有读取数据循环。所观察的所述值为预定的且表示未初始化的存储器。此后此值称为UMR_DATA_VALUE。
[0023]由于本发明依赖于用以表示未初始化的存储器的特定数据值,因此存在此数据观察点解决方案将检测碰巧已用匹配UMR_DATA_VALUE的值初始化的位置处的UMR的可能性。在统计上,在8位读取事务的情况下,此将在256次读取中发生I次。在32位的情况下,概率以在40亿次中发生I次而小得多。
[0024]图1展示在UMR调试会话的开始时的存储器的初始化。将用UMR_DATA_VALUE初始化系统中的所有存储器。在其中此方法不实际的系统中,用UMR_DATA_VALUE初始化由于需要检测UMR而定义为调试会话的一部分的某一子组的存储器。
[0025]作为程序执行的一部分,每当释放经分配存储器时,还将需要用UMR_DATA_VALUE初始化所述经释放存储器的内容。
[0026]在本发明的情况下,将需要将数据观察点策略性地放置为系统的总线拓扑中的关键监视点。数据观察点监视其附加到的总线基础设施的读取数据循环。当数据观察点检测到在读取数据循环期间观察的值与UMR_DATA_VALUE之间的匹配时,其触发调试序列。在调试序列期间,捕获与读取数据循环相关联的信息且接着采取某一行动。
[0027]在触发调试序列时捕获的数据类型包含:读取地址、起始器ID及时间戳。还可能捕获仅与观察点的特定例子相关的额外数据。举例来说,部署于DSP内的数据观察点可能包含PC及任务ID。
[0028]借助将UMR发信号的调试行动完成调试序列。所采取的调试行动取决于所触发的数据观察点的上下文或调试会话的本质。调试行动的实例包含:停止一个或一个以上CPU、产生对处理器的中断及产生追踪消息。
[0029]许多系统支持具有不同对准的读取事务的多个大小。在此些系统中使用其中每一字节通道相同的UMR_DATA_VALUE为合意的。举例来说,在需要支持8位、16位、32位及64位数据读取的系统中,UMR_DATA_VALUE 可为 CCCC_CCCC_CCCC_CCCCh。
[0030]图2展示UMR观察点操作的流程图。UMR逻辑201检测存储器读取数据循环,且在202中将数据值与UMR_DATA_VALUE进行比较。在203中检测可能匹配。如果不存在匹配,那么在208中不需要采取任何行动。在于204中捕获到匹配调试信息的情形中,在框205、206或207中采取选定行动。
【权利要求】
1.一种检测从随机存取存储器系统中的未初始化的位置的CPU存储器读取请求的方法,其包括以下步骤: 将预定数据值写入到所述受测试随机存取存储器系统的每一存储器位置中; 检测从所述随机存取存储器系统的每一数据读取请求操作; 将在所述存储器读取操作期间读取的数据与先前写入到所述受测试随机存取存储器系统的所有位置中的所述预定数据值进行比较; 如果在所述读取操作期间读取的所述数据匹配先前写入到所述受测试随机存取存储器系统的所有位置中的所述预定数据值,那么捕获调试信息; 如果在所述读取操作期间读取的所述数据匹配先前写入到所述受测试随机存取存储器系统的所有位置中的所述预定数据值,那么采取校正行动。
2.根据权利要求1所述的方法,其中: 将所述预定数据值写入到所述受测试随机存取存储器系统的仅一子组中。
3.根据权利要求1所述的方法,其中: 作为所述校正行动的一部分,停止一个或一个以上CPU。
4.根据权利要求1所述的方法,其中: 作为所述校正行动的一部分,产生中断。
5.根据权利要求1所述的方法,其中: 作为所述校正行动的一部分,产生追踪消息。
6.根据权利要求1所述的方法,其中: 所捕获的所述调试信息包含读取地址、起始器的ID及时间戳。
7.根据权利要求1所述的方法,其中: 所捕获的所述调试信息包含程序计数器及相关任务ID。
8.根据权利要求1所述的方法,其进一步包括以下步骤: 将所述预定数据值写入到所述受测试随机存取存储器的在程序执行期间释放的每一位置中。
【文档编号】G06F9/44GK103853551SQ201310651942
【公开日】2014年6月11日 申请日期:2013年12月4日 优先权日:2012年12月4日
【发明者】杰森·L·佩克 申请人:德州仪器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1