一种内存测试方法及嵌入式设备的制作方法

文档序号:6384819阅读:158来源:国知局
专利名称:一种内存测试方法及嵌入式设备的制作方法
技术领域
本发明属于网络通信领域,具体涉及一种网络通信设备的嵌入式系统中的内存测试方法。
背景技术
内存是网络通信设备中重要的部件之一,它是与处理器进行沟通的桥梁,通信设备中所有程序的运行都是在内存中进行的,因此内存的性能对通信设备的影响非常大。内存测试的主要目标是验证内存上的每一个存储位置都能够可能的储存数据。本申请人在CN101211291A中提出了 “一种在嵌入式系统中测试内存的方法”,具体使用处理器在ROM中运行内存测试代码对内存进行完全测试的方法,本方法使用软件方法进入内存测试模式,不需要硬件提供任何信息,简化了硬件设计和成本,但该方法存在如下问题内存测试代码在ROM中运行不能使用堆栈,只能使用寄存器,代码较为复杂,且ROM中的汇编指令和处理器相关,通用性不强;由于从ROM中读取指令的速度和在内存中读取指令的速度不是一个数量级,ROM中执行内存测试代码执行速度会受到ROM的读写速度、指令cache大小等影响,测试速度低于内存测试代码在内存中运行。

发明内容
本发明的目的是解决现有技术存在的上述问题,提出了一种内存测试方法,具体包括如下步骤A、嵌入式设备启动后,首先读取内存测试参数,再对系统进行硬件初始化;B、对读取的内存测试参数进行判断,如为第一测试参数,则利用转换后援缓冲区TLB映射将内存空间的第一部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存,进入步骤C ;如为第二测试参数,则利用TLB映射将内存空间的第二部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存,进入步骤C ;如为第三测试参数,则利用TLB映射将所有内存空间映射为系统应用程序使用的内存空间,内存测试结束;C、加载测试程序到对应的内存空间,并执行内存测试程序,启动对待测试内存的测试;D、内存测试程序完成对当前待测试内存的测试后,对内存测试参数进行判断,如为第一测试参数,则设置内存测试参数为第二测试参数,并重新启动嵌入式设备,进入步骤A ;如为第二测试参数,则设置内存测试参数为第三测试参数,并重新启动嵌入式设备,进入步骤A。进一步的,步骤B中,所述第一测试参数、第二参数和第三测试参数在系统中预先定义。具体的,步骤B中,所述内存空间的第一部分为内存空间的前半部分,所述内存空间的第二部分为内存空间的后半部分;或者所述内存空间的第一部分为内存空间的后半部分,所述内存空间的第二部分为内存空间的前半部分。更进一步的,步骤C中,所述启动对待测试内存的测试,还包括在测试过程中输出测试结果的步骤。更进一步的,在步骤A之前,还包括初始化步骤:A0、设置内存测试参数为第一测试参数,并重新启动嵌入式设备。具体的,在步骤AO或步骤D中,所述设置内存测试参数的方法为将内存测试参数设置在嵌入式设备处理器的非易失性寄存器中;或者将内存测试参数设置在嵌入式设备的外部存储器中。本发明的另一个目的是,提供一种嵌入式设备,包括启动程序模块、TLB映射模块和测试程序模块;所述启动程序模块,运行在ROM中,用于在嵌入式设备启动时,首先读取参数存储单元中的内存测试参数,再对系统进行硬件初始化,将读取的内存测试参数通知给TLB映射模块;并在接收到TLB映射模块的通知后,加载测试程序模块到内存;所述TLB映射模块,用于对读取的内存测试参数进行判断,如为第一测试参数,则利用转换后援缓冲区TLB将内存空间的第一部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存,通知所述启动程序模块加载内存测试程序;如为第二测试参数,则利用TLB映射将内存空间的第二部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存;通知所述启动程序模块加载内存测试程序;如为第三测试参数,则利用TLB映射将所有内存空间映射为系统应用程序使用的内存空间,通知所述启动程序模块内存测试结束;所述测试程序模块,用于在被所述启动程序模块加载到内存后,启动对待测试内存的测试;并在完成对当前待测试内存的测试后,对内存测试参数进行判断,如为第一测试参数,则设置参数存储单元中的内存测试参数为第二测试参数,并重新启动嵌入式设备;如为第二测试参数,则设置参数存储单元中的内存测试参数为第三测试参数,并重新启动嵌入式设备。更进一步的,所述嵌入式设备还包括初始设置模块,用于在内存测试开始前,设置参数存储单元中的内存测试参数为第一测试参数,并重新启动嵌入式设备。具体的,所述参数存储单元是指嵌入式设备处理器的非易失性寄存器或者外部存储器。具体的,所述内存空间的第一部分为内存空间的前半部分,所述的内存空间的第二部分为内存空间的后半部分;或者所述内存空间的第一部分为内存空间的后半部分,所述的内存空间的第二部分为内存空间的前半部分。本发明的有益效果本发明的方法在不增加硬件成本的情况下,提供一种通过TLB映射进行内存全面测试的方法,测试程序实现简单,并且内存测试程序在内存中运行,测试速度快,测试结果同步输出。


图1是本发明实施例的内存测试方法流程图;图2是本发明实施例的嵌入式设备结构框图。
具体实施例方式为了使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。本发明中针对嵌入式设备的内存测试效率低下问题进行改进,通过TLB映射改变待测试内存对应的物理内存空间,可以做到待测试内存区域的虚拟地址不变,而实际测试内存不同,通过两次内存测试可以覆盖全部内存空间。本发明实施例的内存测试方法流程图如图1所示,包括以下步骤步骤101,嵌入式设备启动后,首先读取内存测试参数,再对系统进行硬件初始化。本步骤中,嵌入式设备重新启动后,启动程序BootRom启动,先读取内存测试参数,再实施对系统硬件驱动程序引导即对硬件进行初始化。 步骤102,对读取的内存测试参数进行判断,如为第一测试参数,则利用转换后援缓冲区TLB映射将内存空间的第一部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存,进入步骤103 ;如为第二测试参数,则利用TLB映射将内存的第二部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存,进入步骤103 ;如为第三测试参数,则利用TLB映射将所有内存空间映射为系统应用程序使用的内存空间,内存测试结束。本步骤中,所述第一测试参数、第二参数和第三测试参数在系统中预先定义,例如可以进行如下定义第一测试参数,参数值预先定义为1,表示利用TLB映射将内存空间的第一部分映射为测试程序使用的内存空间,对内存空间的第二部分进行测试;第二测试参数,参数值预先定义为2,表示利用TLB映射将内存的第二部分映射为测试程序使用的内存空间,对内存空间的第一部分进行测试;第三测试参数,参数值预先定义为0,表示内存测试完成,系统启动程序可以加载系统应用程序到内存,系统将执行内存中的应用程序。这里的,1,2,0分别预先设置为第一测试参数、第二测试参数和第三测试参数,在具体应用中也可以设置其它参数,只要唯一识别对内存的哪部分进行测试即可。当把内存空间的前半部分定义为内存空间的第一部分时,则内存空间的第二部分为内存空间的后半部分;当把内存空间的后半部定义为内存空间的第一部分时,则内存空间的第二部分为内存空间的前半部分。为了操作方便,本发明实施例的测试是将内存分为两部分,内存空间的第一部分和第二部分组成了完整的内存空间,本领域的技术人员很容易想到,这里可以根据实际需要进行设置,当把内存空间分为两部分时,并不限于前半部分、后半部分。为了方便理解,举例说明本发明实施例的TLB映射过程A.当完整待测试内存的物理地址内存的物理地址空间为0x80000000-------0x9fffffffB.当系统用于执行应用程序的内存的虚拟地址空间为0x00000000-------OxlfffffffC.当定义内存测试程序使用的虚拟内存空间0x00000000-------OxOfffffff ;
虽然本实施例定义内存测试程序占用一半的地址空间,实际上内存测试程序一般用不完这么大的空间。D.当内存测试第一次映射为虚拟地址空间为0x00000000-------OxOfffffff对应物理地址的
0x90000000-------0x9fffffff(将内存空间的后半部分映射为测试程序使用的内存空间)虚拟地址空间为0x10000000-------Oxlfffffff对应物理地址的
0x80000000-------0x8fffffff (此时内存空间的前半部分为待测试内存空间)E.内存测试第二次映射虚拟地址空间为0x00000000-------OxOfffffff对应物理地址的
0x80000000-------0x8fffffff(将内存空间的前半部分映射为测试程序使用的内存空间)虚拟地址空间为0x10000000-------Oxlfffffff对应物理地址的
0x90000000-------0x9fffffff(此时内存空间的后半部分为待测试内存空间)通过上述映射过程的例子可以看出,利用TLB映射时,通过改变待测试内存对应的物理内存空间,可以做到待测试内存区域的虚拟地址不变(例如一直是
0x10000000-------Oxlfffffff),而实际测试内存不同。全部映射时实际就是上面的某一
种方式,只是执行的是应用程序的映射,此时内存测试结束,应用测试会使用全部内存而已。步骤103,加载测试程序到对应的内存空间,并执行内存测试程序,启动对待测试内存的测试。本步骤中,可以在测试过程中输出测试结果;例如通过嵌入式设备通过串口(CONSOLE) 口输出实时的测试结果。步骤104、内存测试程序完成对当前待测试内存的测试后,对内存测试参数进行判断,如为第一测试参数,则设置内存测试参数为第二测试参数,并重新启动嵌入式设备,进入步骤101 ;如为第二测试参数,则设置内存测试参数为第三测试参数,并重新启动嵌入式设备,进入步骤101。本发明另一实施例的内存测试方法除了包括上述步骤101-103外,在步骤101之前,还包括初始化步骤100,设置内存测试参数为第一测试参数,并重新启动嵌入式设备。即本发明实施例在开始内存测试之前,需要预先设置内存测试测试,该设置可以通过程序预先写入也可以通过用户命令进行设置,所述设置内存测试参数的方法为可以将内存测试参数设置在嵌入式设备处理器的非易失性寄存器中;或者将内存测试参数设置在嵌入式设备的外部存储器中,该外部存储器可以是下列存储部件的任何一种,如EEPROM、FLASH、CPLD、FPGA等。等设置完第一测试参数后,热启动嵌入式设备,即可实施如图1所示的内存测试方法。参见图2,本发明实施例还提供一种实施上述图1所示内存测试方法的嵌入式设备,所述嵌入式设备包括初始设置模块、启动程序模块、TLB映射模块和测试程序模块。具体的,所述初始设置模块,用于在内存测试开始前,设置参数存储单元中的内存测试参数为第一测试参数,并重新启动嵌入式设备。
所述启动程序模块,运行在ROM中,用于在嵌入式设备启动时,首先读取参数存储单元中的内存测试参数,再对系统进行硬件初始化,将读取的内存测试参数通知给TLB映射模块;并在接收到TLB映射模块的通知后,加载测试程序模块到内存。所述TLB映射模块,用于对读取的内存测试参数进行判断,如为第一测试参数,则利用转换后援缓冲区TLB将内存空间的第一部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存,通知所述启动程序模块加载内存测试程序;如为第二测试参数,则利用TLB映射将内存的第二部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存;通知所述启动程序模块加载内存测试程序;如为第三测试参数,则利用TLB映射将所有内存空间映射为系统应用程序使用的内存空间,通知所述启动程序模块内存测试结束。所述测试程序模块,用于在被所述启动程序模块加载到内存后,启动对待测试内存的测试;并在完成对当前待测试内存的测试后,对内存测试参数进行判断,如为第一测试参数,则设置参数存储单元中的内存测试参数为第二测试参数,并重新启动嵌入式设备;如为第二测试参数,则设置参数存储单元中的内存测试参数为第三测试参数,并重新启动嵌入式设备。综上所述,本发明的内存测试方法通过映射的进行内存全面测试的方法,测试实现简单,并且内存测试程序在内存中运行,实现简单,测试速度快,测试结果同步输出。本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
权利要求
1.一种内存测试方法,其特征在于,具体包括如下步骤A、嵌入式设备启动后,首先读取内存测试参数,再对系统进行硬件初始化;B、对读取的内存测试参数进行判断,如为第一测试参数,则利用转换后援缓冲区TLB 映射将内存空间的第一部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存,进入步骤C ;如为第二测试参数,则利用TLB映射将内存空间的第二部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存,进入步骤C ;如为第三测试参数, 则利用TLB映射将所有内存空间映射为系统应用程序使用的内存空间,内存测试结束;C、加载测试程序到对应的内存空间,并执行内存测试程序,启动对待测试内存的测试;D、内存测试程序完成对当前待测试内存的测试后,对内存测试参数进行判断,如为第一测试参数,则设置内存测试参数为第二测试参数,并重新启动嵌入式设备,进入步骤A ; 如为第二测试参数,则设置内存测试参数为第三测试参数,并重新启动嵌入式设备,进入步骤A。
2.根据权利要求1所述的内存测试方法,其特征在于,步骤B中,所述第一测试参数、第二参数和第三测试参数在系统中预先定义。
3.根据权利要求1所述的内存测试方法,其特征在于,步骤B中,所述内存空间的第一部分为内存空间的前半部分,所述内存空间的第二部分为内存空间的后半部分;或者,所述内存空间的第一部分为内存空间的后半部分,所述内存空间的第二部分为内存空间的前半部分。
4.根据权利要求1所述的内存测试方法,其特征在于,步骤C中,所述启动对待测试内存的测试,还包括在测试过程中输出测试结果的步骤。
5.根据权利要求1-4任一项权利要求所述的内存测试方法,其特征在于,在步骤A之前,还包括初始化步骤A0、设置内存测试参数为第一测试参数,并重新启动嵌入式设备。
6.根据权利要求5所述的内存测试方法,其特征在于,在步骤AO或步骤D中,所述设置内存测试参数的方法为将内存测试参数设置在嵌入式设备处理器的非易失性寄存器中;或者,将内存测试参数设置在嵌入式设备的外部存储器中。
7.嵌入式设备,其特征在于,包括启动程序模块、TLB映射模块和测试程序模块; 所述启动程序模块,运行在ROM中,用于在嵌入式设备启动时,首先读取参数存储单元中的内存测试参数,再对系统进行硬件初始化,将读取的内存测试参数通知给TLB映射模块;并在接收到TLB映射模块的通知后,加载测试程序模块到内存;所述TLB映射模块,用于对读取的内存测试参数进行判断,如为第一测试参数,则利用转换后援缓冲区TLB将内存空间的第一部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存,通知所述启动程序模块加载内存测试程序;如为第二测试参数,则利用TLB映射将内存空间的第二部分映射为测试程序使用的内存空间,将剩余内存空间作为待测试内存;通知所述启动程序模块加载内存测试程序;如为第三测试参数,则利用TLB映射将所有内存空间映射为系统应用程序使用的内存空间,通知所述启动程序模块内存测试结束;所述测试程序模块,用于在被所述启动程序模块加载到内存后,启动对待测试内存的测试;并在完成对当前待测试内存的测试后,对内存测试参数进行判断,如为第一测试参数,则设置参数存储单元中的内存测试参数为第二测试参数,并重新启动嵌入式设备;如为第二测试参数,则设置参数存储单元中的内存测试参数为第三测试参数,并重新启动嵌入式设备。
8.根据权利要求7所述的嵌入式设备,其特征在于,所述嵌入式设备还包括初始设置模块,用于在内存测试开始前,设置参数存储单元中的内存测试参数为第一测试参数,并重新启动嵌入式设备。
9.根据权利要求7或8所述的嵌入式设备,其特征在于,所述参数存储单元是指嵌入式设备处理器的非易失性寄存器或者外部存储器。
10.根据权利要求9所述的嵌入式设备,其特征在于,所述内存空间的第一部分为内存空间的前半部分,所述的内存空间的第二部分为内存空间的后半部分;或者所述内存空间的第一部分为内存空间的后半部分,所述的内存空间的第二部分为内存空间的前半部分。
全文摘要
本发明公开了一种内存测试方法及嵌入式设备,针对现有的内存测试代码在ROM中运行不能使用堆栈,只能使用寄存器,测试程序较为复杂,通用性不强的问题,本发明具体通过TLB映射改变待测试内存对应的物理内存空间,可以做到待测试内存区域的虚拟地址不变,而实际测试内存不同,通过两次内存测试可以覆盖全部内存空间。本发明的测试方法在不增加硬件成本的情况下,通过映射进行内存全面测试,测试程序实现简单,能够提升测试速度,并且内存测试程序在内存中运行,速度快,实现测试结果同步输出。
文档编号G06F11/22GK102999409SQ20121055825
公开日2013年3月27日 申请日期2012年12月20日 优先权日2012年12月20日
发明者陈小松 申请人:迈普通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1