堆栈测试方法技术

技术编号:2866930 阅读:275 留言:0更新日期:2012-04-11 18:40
一种堆栈测试方法,包括以下步骤:    a.检测循环压栈,从堆栈的顶部开始压栈,一直压栈到堆栈的尾部,再压栈一次,判断堆栈的指针是否回到所述堆栈的顶部,如果指针回到所述堆栈的顶部,则继续下一步骤,否则测试失败,结束测试;    b.检测压入栈的数据的正确性,根据所述堆栈在内存中所占据的地址,读取内存中相应地址所对应的数据,与压入堆栈的数据进行比较,如果相同,则继续下一步骤,否则测试失败,结束测试;    c.检测循环弹栈,从所述堆栈的尾部开始弹栈,一直弹栈到所述堆栈的顶部,在弹栈一次,判断所述堆栈的指针是否会回到所述堆栈的尾部,如果回到所述堆栈的尾部,则继续下一步骤,否则测试失败,结束测试;    d.检测弹出栈的数据的正确性,在所述步骤c中,将堆栈中的弹出的数据与压入堆栈的数据进行比较,如果压入的数据与弹出的数据相同,则测试成功,否则测试失败,步骤d完成后,对堆栈的测试结束。(*该技术在2023年保护过期,可自由使用*)

【技术实现步骤摘要】

本专利技术涉及一种,尤其涉及一种能够测试循环压栈、循环弹栈、修改堆栈指针操作以及调用子程序时堆栈正确性的。
技术介绍
近年来,随着计算机技术、网络管理技术等信息技术的不断发展,大规模集成电路的发展也日新月异。而与此相匹配的半导体芯片验证和测试技术却不能跟上芯片发展的速度。堆栈技术是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.如果子程序返回了正确的位置,则说明堆栈能在调用子程序时正常本文档来自技高网...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:李炜
申请(专利权)人:上海华虹集成电路有限责任公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利