堆栈测试方法

文档序号:5887341阅读:1284来源:国知局
专利名称:堆栈测试方法
技术领域
本发明涉及一种堆栈测试方法,尤其涉及一种能够测试循环压栈、循环弹栈、修改堆栈指针操作以及调用子程序时堆栈正确性的堆栈测试方法。
背景技术
近年来,随着计算机技术、网络管理技术等信息技术的不断发展,大规模集成电路的发展也日新月异。而与此相匹配的半导体芯片验证和测试技术却不能跟上芯片发展的速度。堆栈技术是CPU及DSP技术中的核心技术,堆栈的性能关系到整个CPU产品是否能正常工作。现有的堆栈测试方法只是测试了堆栈功能中是否能正确压栈和弹栈,并没有测试循环压栈、循环弹栈、修改堆栈指针对堆栈操作的影响以及调用子程序时堆栈的正确性这几个方面。造成的后果是,堆栈存在上述缺陷时,由于现有的测试方法不对这些方面进行测试,所以这些堆栈仍然被认为是好的,这往往会造成整个程序运行过程中的差错。

发明内容
本发明的目的是提供一种堆栈测试方法,除了具有基本的压栈,弹栈测试功能外,还提供堆栈的循环压栈、循环弹栈的测试功能。
本发明的另一目的是该堆栈测试方法还能提供修改堆栈指针操作时对堆栈的影响的测试。
本发明的又一目的是该堆栈测试方法还能提供调用子程序时堆栈的正确性的测试。
为了实现上述目的,本发明采用如下技术方案一种堆栈测试方法,包括以下步骤a.检测循环压栈,从堆栈的顶部开始压栈,一直压栈到堆栈的尾部,再压栈一次,判断堆栈的指针是否回到所述堆栈的顶部,如果指针回到所述堆栈的顶部,则继续下一步骤,否则测试失败,结束测试;
b.检测压入栈的数据的正确性,根据所述堆栈在内存中所占据的地址,读取内存中相应地址所对应的数据,与压入堆栈的数据进行比较,如果相同,则继续下一步骤,否则测试失败,结束测试;c.检测循环弹栈,从所述堆栈的尾部开始弹栈,一直弹栈到所述堆栈的顶部,在弹栈一次,判断所述堆栈的指针是否会回到所述堆栈的尾部,如果回到所述堆栈的尾部,则继续下一步骤,否则测试失败,结束测试;d.检测弹出栈的数据的正确性,在所述步骤c中,将堆栈中的弹出的数据与压入堆栈的数据进行比较,如果压入的数据与弹出的数据相同,则测试成功,否则测试失败,步骤d完成后,对堆栈的测试结束。
该堆栈测试方法还包括以下步骤以检查修改堆栈指针操作对堆栈的影响,在完成所述步骤a-d后,e.检查修改指针操作,进行数次压栈操作,然后对所述堆栈指针进行修改,从修改后指针所指的位置开始进行数次弹栈操作,将弹出的数据与压入堆栈的数据进行比较,如果相同,则再次压栈、修改指针、弹栈,重复上述操作;经过数次压栈、修改指针以及弹栈操作后,如果弹出的数据与压入堆栈的数据相比都相同,则测试成功,否则测试失败,完成步骤e后对堆栈的测试结束。
该堆栈测试方法还包括以下步骤以检查调用子程序时堆栈的正确性,在完成所述步骤a-d或所述步骤a-e后,f.检查调用子程序时堆栈的正确性,连续调用子程序并在返回前修改所述堆栈指针的大小以及所述堆栈指针中的内容,如果子程序返回正确,说明修改所述堆栈指针不影响堆栈内的数据,堆栈仍可正常工作,测试成功;如果所述子程序返回不正确,则测试失败,步骤f完成后,对堆栈的测试结束。
由于采用了上述技术方案,本发明的堆栈测试方法除了具有基本的压栈,弹栈测试功能外,还提供堆栈的循环压栈、循环弹栈的测试功能、修改堆栈指针操作时对堆栈的影响的测试以及供调用子程序时堆栈的正确性的测试。


图1是本发明的堆栈测试方法的一个实施例的流程图。
图2是本发明的堆栈测试方法的另一个实施例的流程图;
图3是本发明的堆栈测试方法的又一个实施例的流程图。
具体实施例方式
下面结合实施例和附图来进一步说明本发明的技术方案。
图1是本发明的堆栈测试方法的一个实施例,如图1所示,该实施例包括以下步骤a.检测循环压栈,从堆栈的顶部开始压栈,一直压栈到堆栈的尾部,再压栈一次,判断堆栈的指针是否回到堆栈的顶部,如果指针回到堆栈的顶部,则继续下一步骤,否则测试失败,结束测试;具体可分为以下步骤a1.从栈顶开始压栈;a2.判断是否已到栈尾,如果已到栈尾,则进行步骤a3,否则回到步骤a1继续压栈;a3.再压栈一次;a4.判断堆栈指针是否回到栈顶,如果回到栈顶,则说明该堆栈的循环压栈功能是好的,否则说明该堆栈的循环压栈功能有问题,结束测试,测试失败,堆栈有差错。
b.检测压入栈的数据的正确性,根据堆栈在内存中所占据的地址,读取内存中相应地址所对应的数据,与压入堆栈的数据进行比较,如果相同,则继续下一步骤,否则测试失败,结束测试,堆栈在数据压入的过程中有差错。
c.检测循环弹栈,从堆栈的尾部开始弹栈,一直弹栈到堆栈的顶部,在弹栈一次,判断堆栈的指针是否会回到堆栈的尾部,如果回到堆栈的尾部,则继续下一步骤,否则测试失败,结束测试,具体包括以下步骤c1.由于在前面的步骤中,堆栈中已压入数据,先将堆栈的指针移到栈尾,从栈尾开始弹栈;c2.判断是否已到栈顶,如果已到栈顶,则进入步骤c3,否则回到步骤c1;c3.再弹栈一次;c4.判断指针是否回到堆栈的尾部,如果回到栈尾,则说明该堆栈的循环弹栈功能是好的,否则说明该堆栈的循环弹栈功能有问题,结束测试,测试失败,堆栈有差错。
d.检测弹出栈的数据的正确性,在所述步骤c中,将堆栈中的弹出的数据与压入堆栈的数据进行比较,如果压入的数据与弹出的数据相同,则测试成功,否则测试失败,说明堆栈在将数据弹出的过程中有差错,该实施例在完成步骤d后,结束对堆栈的测试。
图2是本发明的堆栈测试方法的另一个实施例,如图2所示,该实施例在图1所示的实施例的基础上,还包括以下步骤e.检查修改指针操作,进行数次压栈操作,然后对堆栈指针进行修改,从修改后指针所指的位置开始进行数次弹栈操作,将弹出的数据与压入堆栈的数据进行比较,如果相同,则再次压栈、修改指针、弹栈,重复上述操作;经过数次压栈、修改指针以及弹栈操作后,如果弹出的数据与压入堆栈的数据相比都相同,则测试成功,否则测试失败,完成步骤e后该实施例对堆栈的测试结束,具体包括以下步骤e1.由于在前面的步骤中,已将堆栈内的数据都弹出,故现在堆栈内已没有数据,所以首先进行数次压栈,是堆栈有数据;e2.修改对栈的指针;e3.进行数次弹栈;e4.检查弹出的数据,是否与压入的数据相同,由于堆栈先进后出的特性,修改堆栈指针应该不影响堆栈的正常压栈、弹栈操作;e5.如果弹出的数据与压入的相同,则说明修改堆栈指针不影响堆栈的正常工作,否则说明该堆栈在修改指针后会出差错;e6.如果测试次数达到预先设定的值,则结束该次测试,否则回到步骤e1重复上述过程。
图3是本发明的堆栈测试方法的另一个实施例,如图3所示,该实施例在图1或者图2所示的实施例的基础上,还包括以下步骤f.检查调用子程序时堆栈的正确性,连续调用子程序并在返回前修改堆栈指针的大小以及堆栈指针中的内容,如果子程序返回正确,说明修改堆栈指针不影响堆栈内的数据,堆栈仍可正常工作,测试成功;如果子程序返回不正确,则测试失败,步骤f完成后,该实施例对堆栈的测试结束,具体包括以下步骤f1.调用子程序;
f2.在子程序返回前修改堆栈的指针;f3.子程序返回;f4.检验子程序是否返回正确的地方,调用子程序时,当前各项参数将被压入堆栈,对于最近一次调用的子程序,其各项参数将处在最靠近栈顶的位置,故在子程序返回时这些参数将被弹出,子程序将返回正确的位置,修改堆栈的指针应该不会影响堆栈正常的压栈、弹栈操作,所以如果子程序不能返回正确的位置,说明堆栈在这种情况下会出现差错;f5.如果子程序返回了正确的位置,则说明堆栈能在调用子程序时正常工作,否则说明该堆栈有差错;f6.如果测试次数达到预先设定的值,则结束该次测试,否则回到步骤f1重复上述过程。
由于采用了上述技术方案,本发明的堆栈测试方法除了具有基本的压栈,弹栈测试功能外,还提供堆栈的循环压栈、循环弹栈的测试功能、修改堆栈指针操作时对堆栈的影响的测试以及供调用子程序时堆栈的正确性的测试。
权利要求
1.一种堆栈测试方法,包括以下步骤a.检测循环压栈,从堆栈的顶部开始压栈,一直压栈到堆栈的尾部,再压栈一次,判断堆栈的指针是否回到所述堆栈的顶部,如果指针回到所述堆栈的顶部,则继续下一步骤,否则测试失败,结束测试;b.检测压入栈的数据的正确性,根据所述堆栈在内存中所占据的地址,读取内存中相应地址所对应的数据,与压入堆栈的数据进行比较,如果相同,则继续下一步骤,否则测试失败,结束测试;c.检测循环弹栈,从所述堆栈的尾部开始弹栈,一直弹栈到所述堆栈的顶部,在弹栈一次,判断所述堆栈的指针是否会回到所述堆栈的尾部,如果回到所述堆栈的尾部,则继续下一步骤,否则测试失败,结束测试;d.检测弹出栈的数据的正确性,在所述步骤c中,将堆栈中的弹出的数据与压入堆栈的数据进行比较,如果压入的数据与弹出的数据相同,则测试成功,否则测试失败,步骤d完成后,对堆栈的测试结束。
2.如权利要求1所述的堆栈测试方法,其特征在于,还包括以下步骤以检查修改堆栈指针操作对堆栈的影响,在完成所述步骤a-d后,e.检查修改指针操作,进行数次压栈操作,然后对所述堆栈指针进行修改,从修改后指针所指的位置开始进行数次弹栈操作,将弹出的数据与压入堆栈的数据进行比较,如果相同,则再次压栈、修改指针、弹栈,重复上述操作;经过数次压栈、修改指针以及弹栈操作后,如果弹出的数据与压入堆栈的数据相比都相同,则测试成功,否则测试失败,完成步骤e后对堆栈的测试结束。
3.如权利要求1或2所述的堆栈测试方法,其特征在于,还包括以下步骤以检查调用子程序时堆栈的正确性,在完成所述步骤a-d或所述步骤a-e后,f.检查调用子程序时堆栈的正确性,连续调用子程序并在返回前修改所述堆栈指针的大小以及所述堆栈指针中的内容,如果子程序返回正确,说明修改所述堆栈指针不影响堆栈内的数据,堆栈仍可正常工作,测试成功;如果所述子程序返回不正确,则测试失败,步骤f完成后,对堆栈的测试结束。
全文摘要
一种堆栈测试方法,包括以下步骤a.检测循环压栈;b.检测压入栈的数据的正确性;c.检测循环弹栈d.检测弹出栈的数据的正确性;在完成步骤a-d后,还可以包括e.检查修改指针操作;在完成步骤a-d或步骤a-e后,还可以包括f.检查调用子程序时堆栈的正确性;本发明的堆栈测试方法除了具有基本的压栈,弹栈测试功能外,还提供堆栈的循环压栈、循环弹栈的测试功能、修改堆栈指针操作时对堆栈的影响的测试以及供调用子程序时堆栈的正确性的测试。
文档编号G01R31/28GK1567558SQ0314148
公开日2005年1月19日 申请日期2003年7月9日 优先权日2003年7月9日
发明者李炜 申请人:上海华虹集成电路有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1