一种嵌入式系统内存越界错误快速定位方法_第1页
一种嵌入式系统内存越界错误快速定位方法_第2页
一种嵌入式系统内存越界错误快速定位方法_第3页
一种嵌入式系统内存越界错误快速定位方法_第4页
一种嵌入式系统内存越界错误快速定位方法_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、说 明 书 摘 要发明名称一种嵌入式系统内存越界错误快速定位方法申请人 武汉烽火网络有限责任公司 地址 430074 湖北省武汉市发明人 戴锦友, 余少华,汪学舜,刘志炉摘要本发明涉及一种嵌入式系统中的内存越界错误快速定位方法,具体涉及一种借助于可编程逻辑器件,结合硬件和软件,快速确定引起内存越界错误的任务/进程以及该任务/进程调用的直接引起内存越界错误的具体函数。该方法的目标是:通过可编程器件监视被越界使用的内存区域,当该内存区域被访问时,可编程逻辑器件向CPU产生中断,中断服务程序查询在发生本次中断前,当前正在执行的任务A,并借助于可编程逻辑器件上存储的任务信息,判断任务A是否是该内存区域

2、的合法访问任务,如果不是,则将任务A的信息告知检测任务/进程M,任务/进程M通过任务A的控制块得到当前该任务执行的指令计数器,基于指令计数器的值得到访问该内存区域的函数,如果该函数是该内存区域合法的访问函数,则系统恢复继续运行,否则确定该函数是直接引起内存越界的函数。摘 要 附 图采样地址总线,得到当前访问内存的地址将得到的地址与设定的内存监视范围进行比较,确定它是否在监视的内存范围内,并标记是否在监视范围内“启动/停止”置“停止”向CPU产生中断是否是A. 可编程逻辑器件的功能设定合法访问该内存范围的任务集+函数集信息设定监视的内存范围集 设定采样周期“启动/停止”=“启动”?否BCPU的功

3、能B.1 中断服务程序的功能得到当前被中断的任务或进程A标识存储A标识,并通知监测任务/进程结束有中断事件?是否B.2 管理任务/进程的功能获取A标识,并基于A标识得到任务/进程控制块,进一步得到当前执行的指令地址,并判断该任务是否合法访问任务,该地址对应函数是否合法访问函数输出该任务/进程名、任务进程标识以及指令地址是否是合法访问函数否是否是是否合法访问任务“启动/停止”置“启动”6权 利 要 求 书1. 一种嵌入式系统内存越界的快速检测方法,包括如下特征:(1)嵌入式系统使用一片可编程逻辑器件,将嵌入式系统内CPU的地址总线作为可编程逻辑器件的输入,将可编程逻辑器件的1路信号设计为输出,并

4、将它与CPU的外部中断请求信号相连接。(2)通过CPU设置可编程器件的内存监视范围M和可以合法访问该内存区域的任务信息及函数信息。(3)当嵌入式系统正常工作时,可编程器件周期性的对地址总线采样,如果当前采样的地址在监视的内存范围内,则可编程器件通过输出信号向CPU发出中断请求。(4)系统软件中,有一个中断服务程序S对应上述的中断,同时有一个检测任务/进程C用于对中断服务程序S得到的信息作进一步处理。(5)CPU收到中断请求时,执行中断服务程序,中断服务程序获取当前执行的任务/进程A,并基于可编程逻辑器件存储的任务信息判断任务/进程A是否为监视的内存区域M的合法访问任务,如是,则中断处理结束;如

5、不是,则向任务/进程C通告任务/进程A的相关信息。(6)任务/进程C根据得到的任务/进程A相关信息,得到访问内存区域M的指令地址,结合可编程逻辑器件中存储的任务集、函数集信息,确定上述指令地址对应的函数是否为内存区域M的合法访问函数,如果不是,则输出任务/进程A及指令地址。2. 如权利要求1所述的嵌入式系统,其特征在于:该嵌入式系统的软件基于实时多任务操作系统,该实时多任务操作系统可以是VXWORKS、LINUX、OS II、ECOS等嵌入式操作系统中的一种。 3. 如权利要求1所述的嵌入式系统,其特征在于:可编程逻辑器件可以是GAL、CPLD或FPGA等器件,如系统内已有此类器件,可直接与其

6、它功能模块复用此器件,而不需专门增加一片此类器件;如系统内没有此类器件,则可视具体情况选用合适的器件。4. 如权利要求1所述的嵌入式系统,其特征在于:配置到可编程逻辑器件中的内存范围信息包含最低内存地址和最高内存地址,可同时配置一条或多条内存范围信息。5. 如权利要求1所述的嵌入式系统,其特征在于:配置到可编程逻辑器件中的任务信息包含任务标识和任务名,函数信息包含函数名、函数起始地址和函数结束地址,任务信息和函数信息都可以配置一条或多条,函数信息必需与某任务信息关联。说 明 书一种嵌入式系统内存越界错误快速定位方法技术领域本发明涉及一种嵌入式系统中的内存越界错误快速定位方法,具体涉及一种借助于

7、可编程逻辑器件,结合硬件和软件,快速确定引起内存越界错误的任务/进程以及该任务/进程调用的直接引起内存越界错误的具体函数的方法。 背景技术内存越界错误是软件中比较常见的错误,也是非常致命的错误。C语言的广泛应用是一把双刃剑,好处是:它使大量的没受过专业教育的人员能够较快的具备程序设计能力,也使软件编码过程大大缩短,坏处是:或者由于项目进度的压力,或者由于程序员的责任心不强,很多应该在编译阶段就排除的软件错误,最后演变成严重甚至致命的运行时错误,内存越界错误多数就由此产生,如附图4.a、4.b、4.c和4.d这几种情况,错误的根源都很微小,或掉了各“*”号,或循环变量数值多了1,看起来只是个简单

8、笔误,但引起了内存越界错误。内存越界错误由于对内存的不合法使用,产生的后果非常严重,轻者由于使用的数据并非正确数据,导致系统输出错误的结果,如附图4.a 和4.c的情形,虽然软件读越界或写越界,但由于误读的数据或误修改的数据未进一步使用,而是直接输出了,在这种情况下,系统仍健壮,但输出结果错误;重者由于越界错误破坏了系统核心,导致系统崩溃,如附图4.b 和4.d的情形,前者将一个非预期的数据当作一个函数执行,后果可想而知,后者则直接清除了中断向量表,系统产生中断时系统将崩溃。而且,随着系统趋于庞大,内存越界错误越来越难找到直接原因,尤其是在引起内存越界的执行路径执行的概率非常低时。一个模块引起

9、的内存越界错误,排查时间有时甚至超过设计该模块的时间。嵌入式系统由于它本身的固有特性,调试往往采用结合主机和目标机的远程调试,每一步调试都需要主机和目标机的多次交互,调试效率极低,排查内存错误的困难远比单纯调试主机软件大。因此,调试主机软件的有效手段:“设断点“、“单步”、“在断点处检查变量和内存”等等,基本不能在嵌入式系统中运用,排查嵌入式系统的隐蔽错误常常通过代码检查和在可疑代码内部插入打印某些重要变量的方式完成,而这些,也需要在花费大量的时间的基础上才能实现,并且,这些调试手段是否有效很大程度上依赖于编程人员的能力和经验。因此,如果能够找到一种更高效的内存错误定位方法对嵌入式系统开发是大

10、有裨益的。发明内容本发明的目的是为尽快排除嵌入式系统已经发现的内存错误,提出了一种借助于可编程逻辑器件,结合硬件和软件的快速定位引起内存越界的原因的方法。该方法的基本思路是:首先,该方法需要硬件和软件一起配合实现,硬件是可编程逻辑器件,软件是一个中断服务程序和一个检测任务。在可编程逻辑器件上配置一个或多个需监测的内存范围,同时将系统正常运行时可能合法访问这些内存区域的任务及函数信息存储在可编程逻辑器件中,利用可编程逻辑器件监测嵌入式系统的地址总线,并周期性的对地址总线采样,得到当前系统的内存访问地址,如果该内存访问地址落在可编程器件监测的一个内存区域内,则标记该内存区域为活跃,同时可编程逻辑器

11、件则向CPU产生一次中断,对应的中断服务程序查询在发生本次中断前,当前正在执行的任务A,并借助于可编程逻辑器件上存储的任务信息,判断任务A是否是该活跃内存区域的合法访问任务,如果不是,则将任务A的信息告知检测任务/进程M,任务/进程M通过任务A的控制块得到当前该任务执行的指令计数器,基于指令计数器的值得到访问该内存区域的函数,如果该函数是该内存区域合法的访问函数,则系统恢复继续运行,否则确定该函数是直接引起内存越界的函数。该方法的功能结构如图1所示。在图1中,左边的流程图表示是可编程逻辑器件实现的功能,右边上半部分表示的是中断服务程序实现的功能,右边下半部分表示的是检测任务/进程实现的功能。附

12、图说明图1 为电信级以太网系统中的虚拟硬件方法功能结构示意图。图2 为可编程逻辑器件与CPU的连接关系图。图3 为可编程逻辑器件内配置信息示意图。图4.a 为内存读越界对系统的轻度影响示意图。图4.b 为内存读越界对系统的崩溃性影响示意图。图4.c 为内存写越界对系统的轻度影响示意图。图4.d 为内存读越界对系统的崩溃性影响示意图。图5 为实时多任务操作系统任务控制块实例。具体实施方式下面结合附图对本发明进行详细的描述。l 可编程逻辑器件关联功能的实现图2是可编程器件和CPU的连接关系简图,这里只给出了为实现地址总线检测采样部分的连接关系图,而CPU管理和控制可编程器件的接口连接关系这里从略。

13、CPU管理和控制可编程逻辑器件的接口用来实现CPU和可编程逻辑器件之间的信息交互,与系统使用可编程逻辑器件的一般情况相同,即可编程逻辑器件的内部存储作为CPU可访问的存储器或寄存器使用。系统使用SRAM 或DRAM(包括SDRAM和DDR等),地址总线检测的连接关系和逻辑是有很大差别的,图2实际给出了包括SRAM 或DRAM的一个总的连接关系,实际应用中视具体情况而定。如果使用DRAM类,则只使用地址线“A0.A31”中的一个子集作为行地址和列地址输入, 行选“RAS”、列选“CAS”必须使用,使用SDRAM的系统,“SDRAM_CLK”也需采用。如果使用SRAM类,则地址线“A0.A31”视

14、SRAM器件的情况选用,“RAS”、“CAS”和“SDRAM_CLK”则不采用。“INTR”是中断请求信号,当可编程逻辑器件判断地址总线采样命中某个配置的内存区域范围内,则使“INTR”有效。本方法中,可编程逻辑器件部分的功能如附图1左子图所示。首先,是CPU通过管理控制接口向可编程逻辑器件写入监视内存区域范围信息(可以是一条或多条)、合法任务信息和合法访问函数信息(可以是一条或多条)。内存区域范围信息、合法任务信息和合法访问函数信息在可编程逻辑器件内部存储的结构如附图3所示,每条内存区域范围包括“起始地址”、“结束地址”、“活跃标记”信息,活跃标记表示本内存区域范围包含最近采样得到的地址,如

15、果只配置一个内存区域范围,则活跃标记可不是用。任务信息包含“任务标识”和“任务名”,函数信息包含“函数名”、“函数起始地址”和“函数结束地址”信息,值得注意的是,函数信息一定与某个具体任务关联。上述内存区域范围信息、任务信息和函数信息可存储的条目数多少使可编程逻辑器件的容量和实际应用需要确定。在配置信息设置好后,CPU可设定可编程逻辑器件的采样频率、并置“启动/停止”标志位为“启动”(“启动/停止”标志位为“启动”时,可编程逻辑器件开始周期性的对地址线采样等操作,否则不做任何操作),则可编程逻辑器件开始工作。值得注意的是,采样频率不应低于存储器的访问频率,否则,有可能一些重要的内存访问没有被监

16、测到。当某次采样确定得到的地址落在某条配置好的内置区域范围内,而且配置的内存区域范围多于一条,则置位该内存区域范围的“活跃标记”,清除其它内存区域范围的“活跃标记”,并在中断请求信号“INTR”上输出一个脉冲。同时,置“启动/停止”标志位为“停止”。上述功能中,除配置信息通过CPU和可编程逻辑器件共同完成外,其它功能由可编程逻辑器件自动完成。l 中断服务程序关联的功能实现 本方法中,中断服务程序的功能如附图1右上子图所示。中断服务程序的设计随着CPU和实时多任务操作系统的不同可能存在较大的差异,但主要机制和原理是相似的。大多数情况下如下:初始化中断服务程序时将中断服务程序和一个中断向量相连,中

17、断服务程序的起始关中断,中断服务程序结束时开中断。值得注意的是,在嵌入式系统中,中断服务程序不适宜占用太多得CPU时间,一般情况下,中断服务程序仅仅响应产生中断的时间,记录一些信息,然后通知关联的任务,大部分任务都交给关联的任务去完成。因此,本中断服务程序同样设计只做较少的工作,如附图1右上子图,中断服务程序响应中断后,仅仅做合法任务过滤工作和可编程器件中“启动/停止”标志位修改工作。合法任务过滤工作放在中断服务程序中实现的原因是防止系统发生过多得任务调度,因为当前活跃任务不是监测任务,那么从当前活跃任务切换到监测任务系统需要重新调度。如果活跃任务信息过多,合法任务过滤工作也可从中断服务程序中

18、移出到监测任务/进程中实现。中断服务程序修改“启动/停止”标志位的操作仅当当前活跃任务是命中的内存区域的合法访问任务时执行。l 检测任务/进程关联的功能实现本方法中,监测任务/进程的功能如附图1右下子图所示。监测任务/进程是配合中断服务程序而设置的,从技术上来讲,监测任务/进程所做得工作在中断服务程序里都可以实现,但嵌入式系统中,中断服务程序是不适合占用太多CPU时间,因此,大部分工作都移到任务中完成。首先,监测任务/进程需从中断服务程序得到通知(通常是以信号量传递的方式),然后开始执行自己的任务(如得不到中断服务程序通知,监测任务/进程则处于阻塞状态)。然后,监测任务/进程需从中断服务程序得

19、到该内存区域的当前访问任务,如果设计的合法访问任务过滤功能不是由中断服务程序完成,那么监测任务/进程需完成此功能。如果合法访问任务过滤功能由监测任务/进程实现,且过滤结果接着,监测任务/进程还需完成合法访问过滤功能,如果采样地址总线,得到当前访问内存的地址将得到的地址与设定的内存监视范围进行比较,确定它是否在监视的内存范围内,并标记是否在监视范围内“启动/停止”置“停止”向CPU产生中断是否是B. 可编程逻辑器件的功能设定合法访问该内存范围的任务集+函数集信息设定监视的内存范围集 设定采样周期“启动/停止”=“启动”?否BCPU的功能B.1 中断服务程序的功能得到当前被中断的任务或进程A标识存

20、储A标识,并通知监测任务/进程结束有中断事件?是否B.2 管理任务/进程的功能获取A标识,并基于A标识得到任务/进程控制块,进一步得到当前执行的指令地址,并判断该任务是否合法访问任务,该地址对应函数是否合法访问函数输出该任务/进程名、任务进程标识以及指令地址是否是合法访问函数否是否是是否合法访问任务“启动/停止”置“启动”说 明 书 附 图图 1 可编程逻辑器件CPUINTR SDRAM CLKRASWECASA0A31图2 可编程器件与CPU连接关系图 内存区域1起始地址内存区域1结束地址活跃标记内存区域2起始地址内存区域2结束地址活跃标记 . . .内存区域n起始地址内存区域n结束地址活跃

21、标记任务1标识任务1名函数1.1名函数1.1起始地址函数1.1结束地址任务1标识任务1名函数1.2名函数1.2起始地址函数1.2结束地址任务1标识任务1名函数1.n名函数1.n起始地址函数1.n结束地址任务2标识任务2名函数2.1名函数2.1起始地址函数2.1结束地址任务2标识任务2名函数2.2名函数2.2起始地址函数2.2结束地址任务2标识任务2名函数2.m名函数2.m起始地址函数2.m结束地址任务k标识任务k名函数k.1名函数k.1起始地址函数k.1结束地址任务k标识任务k名函数k.2名函数k.2起始地址函数k.2结束地址任务k标识任务k名函数k.l名函数k.l起始地址函数k.l结束地址图

22、3 可编程器件内配置信息示意图Task1() int i, func *Functions4 = A,B,C ,D; int *pFun = NULL;pFun = & Functions 0;for (i = 4; i >0; i -) *pFun(); 地址值Funcctions0AFuncctions1BFuncctions2CFuncctions3DZ程序数据图4.b内存读越界对系统的崩溃性影响示意图Task1() int i, iValue4 = A,B,C ,D; int *p = NULL;p = & iValue0;for (i = 4; i >0;

23、 i -) output(pi); 地址值iValue0AiValue1BiValue2CiValue3DZ程序数据图4.a内存读越界对系统的轻度影响示意图Task1() int iValue256 = 0,1,2 ,3,; int *p = NULL;p = iValue0;memset(p,0,256);地址值iValue00iValue11iValue22iValue33程序数据图4.d 内存写越界对系统的崩溃性影响示意图Task1() int iValue4 = A,B,C ,D; int *p = NULL;p = iValue0;*p = Y;Task2() int j, jVal

24、ue4 = 1,2,3,4; for (j = 0; j < 4; j+) output(jValuei); 地址值iValue0AiValue1BiValue2CiValue3DiValue0 = A1iValue12iValue23iValue34程序数据图4.c 内存写越界对系统的轻度影响示意图图5 任务控制块实例示意图wdb_info intwdbState; REG_SET *wdbRegisters; struct void *wdb1;void *wdb2; wdbEvtList; intbpAddr; inttaskBpAddr; inttaskPc;inttaskFp;

25、inttaskSp; VOIDFUNCPTRwdbExitHook; WDB_INFO;typedef struct/* REG_SET */ _RType gprGREG_NUM;/* general pourpose registers */ _RType msr;/* machine state register */ _RType lr;/* link register */ _RType ctr;/* count register */ _RType pc;/* program counter */ UINT32 cr;/* condition register */ UINT32 xer;/* fixed-point exc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论