本发明专利技术公开了一种嵌入式系统内存越界错误快速定位方法,包括以下步骤:通过可编程逻辑器件监视其上配置的若干越界使用内存区域,当所述越界使用内存区域被访问时产生中断;CPU查询中断前正在执行的当前任务,并获得访问所述越界使用内存区域的函数;根据所述可编程逻辑器件上配置的合法访问任务集和合法访问函数集,确定所述函数是否为引起内存越界的函数,并输出引起内存越界的函数的任务及指令地址。本发明专利技术,能够快速确定引起内存越界错误的任务以及该任务调用的直接引起内存越界错误的具体函数,减少了排查嵌入式系统隐蔽错误的时间,提高系统调试的效率。
【技术实现步骤摘要】
本专利技术涉及嵌入式系统,具体涉及。
技术介绍
内存越界错误是软件中比较常见的错误,也是非常致命的错误。C语言的广泛应用是一把双刃剑,好处是它使大量的没受过专业教育的人员能够较快的掌握程序设计,具备一定软件设计能力,也使软件编码过程大大缩短,坏处是或者是由于项目进度的压力,或者是由于程序员的失误,很多应该在编译阶段就排除的软件错误,没有被编译系统发现;或者已被发现并有警告信息输出,但是被程序员忽略;最后演变成严重的运行错误,内存越界错误多数就由此产生,如图4、图5、图6和图7这几种情况,错误的根源都很微小,或掉了个“ ”号,或循环变量数值仅仅多了 I,看起来只是个简单笔误,但引起了内存越界错误。内存越界错误由于对内存的不合法使用,产生的后果非常严重,轻者由于使用的数据并非正确数据,导致系统输出错误的结果,如图4和图6的情形,虽然软件读越界或写越界,但由于误读的数据或误修改的数据未进一步使用,而是直接输出了,在这种情况下,系统仍健壮,但输出结果错误;重者由于越界错误破坏了系统核心,导致系统崩溃,如图5和图7的情形,前者将一个非预期的数据当作一个函数执行,后果可想而知,后者则直接清除了中断向量表,当有中断产生时系统将崩溃。而且,随着系统趋于庞大,内存越界错误越来越难找到直接原因,尤其是在引起内存越界的执行路径执行的概率非常低时。一个模块引起的内存越界错误,排查时间有时甚至远远超过设计该模块的时间。嵌入式系统由于它本身的固有特性,调试往往采用结合主机和目标机的远程调试,每一步调试都需要主机和目标机的多次交互,调试效率极低,排查内存错误的困难远比单纯调试主机软件大。因此,调试主机软件的有效手段“设断点“、“单步”、“在断点处检查变量和内存”等等,基本不能在嵌入式系统中运用,排查嵌入式系统的隐蔽错误常常通过代码检查和在可疑代码内部插入打印某些重要变量的语句然后基于打印的信息进行分析的方式完成,而这些,需要在花费大量的时间的基础上才能实现,并且,这些调试手段是否有效很大程度上依赖于编程人员的能力和经验。由此可见,急需一种,以减少排查嵌入式系统隐蔽错误的时间,提闻系统调试的效率。
技术实现思路
本专利技术所要解决的技术问题是解决嵌入式系统在调试过程中,对于内存越界错误排查时间长的问题。为了解决上述技术问题,本专利技术所采用的技术方案是提供一种,包括以下步骤通过可编程逻辑器件监视其上配置的若干越界使用内存区域,当任何一个所述越界使用内存区域被访问时产生中断; CPU查询中断前正在执行的当前任务,并根据当前任务的指令计数器得到访问所述越界使用内存区域的函数; 根据所述可编程逻辑器件上配置的合法访问任务集和合法访问函数合,确定所述函数是否为引起内存越界的函数,并输出引起内存越界的函数的任务名及指令地址。在上述方法中,所述越界使用内存区域包括起始地址、结束地址和活跃标志区,当越界使用内存区域被访问时,其标志区设定为“活跃”,并清除其它越界使用内存区域的“活跃”标志; 所述合法访问任务信息包括任务标识和任务名; 所述合法访问函数信息包括函数名、函数起始地址和函数结束地址; 所述任务名与所述函数名相关联。在上述方法中,所述可编程逻辑器件周期性地对CPU地址总线采样,获得当前任务使用的内存地址。在上述方法中,根据所述当前任务的任务控制块信息得到访问所述越界使用内存区域的指令地址,并根据可编程逻辑器件中配置的任务集和函数集,判断所述当前任务是否为访问所述越界使用内存区域的合法访问任务,同时判断上述指令地址对应的函数是否为访问所述越界使用内存区域的合法访问函数,如果上述两个判断结果中至少有一个为否,则输出当前任务名及指令地址。本专利技术,借助于可编程逻辑器件,结合硬件和软件,快速确定引起内存越界错误的任务(或进程,以下都以任务表示)以及该任务调用的直接引起内存越界错误的具体函数,以减少了排查嵌入式系统隐蔽错误的时间,提高系统调试的效率。附图说明图I为本专利技术的流程 图2为可编程逻辑器件与CPU的连接关系示意 图3为可编程逻辑器件的配置信息示意 图4为内存读越界对系统的轻度影响示意图; 图5为内存读越界对系统的崩溃性影响示意 图6为内存写越界对系统的轻度影响示意 图7为内存写越界对系统的崩溃性影响示意 图8为实时多任务操作系统的任务控制块实例。具体实施例方式本专利技术提供的,通过可编程逻辑器件监视其上配置的若干越界使用内存区域,并在任何一个越界使用内存区域被访问时产生中断,(PU根据中断判断当前任务及访问越界使用内存区域的函数是否合法,并输出引起内存越界的函数及指令地址。下面结合附图对本专利技术作出详细的说明。图I为本专利技术的流程图,如图I所示,包括以下步骤。步骤I :在可编程逻辑器件上设定若干越界使用内存区域以及合法访问上述内存区域的任务集和函数集,简称为合法访问任务集和合法访问函数集。如图3所示,每一个越界使用内存区域包括起始地址、结束地址和活跃标志区,当多个越界使用内存区域中的某一个被访问时,其标志区设定为“活跃”;标志位“活跃”目的是区分越界使用内存区域中哪一个当前在被访问,以方便软件处理。每一个合法访问任务包括任务标识和任务名;每一个合法访问函数包括函数名、函数起始地址和函数结束地址;任务名与函数名相关联。步骤2、通过CPU设定可编程逻辑器件的采样频率,通过可编程逻辑器件上的监视任务监视其上配置的若干越界使用内存区域,当任何一个越界使用内存区域被访问时产生中断。监视任务的启动和停止由CPU发出的启动或停止命令控制。具体说明如下 图2是可编程逻辑器件与CPU的连接示意图,这里只给出了为实现地址总线监测采样 部分的连接关系图,而CPU管理和控制可编程器件的接口连接关系具有一般性,在此不再赘述。CPU管理和控制可编程逻辑器件的接口用来实现CPU和可编程逻辑器件之间的信息交互,与系统使用可编程逻辑器件的一般情况相同,即可编程逻辑器件的内部存储作为(PU可访问的地址空间直接使用,也可以将可编程逻辑器件视作CPU的外围设备管理和访问。嵌入式系统的主存储器可以是SRAM或DRAM (包括SDRAM和DDR等),对于SRAM和DRAM,地址总线检测的连接关系和逻辑是有很大差别的,图2实际给出了包括SRAM或DRAM的一个总的连接关系,实际应用中视具体情况而定。如果使用DRAM类存储器件,则只使用地址线“AO. . A31”中的一个子集作为行地址和列地址输入,行选“RAS”、列选“CAS”必须使用,使用SDRAM的系统,“SDRAM_CLK”也需采用。如果使用SRAM类存储器件,则地址线“AO. . A31 ”视SRAM器件的情况选用,“RAS”、“CAS”和“SDRAM_CLK”则不采用。“INTR”是中断请求信号,当可编程逻辑器件判断地址总线采样命中某个已配置好的内存区域范围,则在“ INTR”输出一个脉冲以向CPU请求中断。CPU通过管理控制接口向可编程逻辑器件写入越界使用内存区域(可以是一条或多条)以及合法访问上述内存区域的任务集和函数集,监视内存区域范围信息(可以是一条或多条)、合法任务信息和合法访问函数信息(每个任务集可以包括一条任务,也可以包括多条任务;每个函数集同样可以包括一条函数或多条函数)。如图3所示,越界使用本文档来自技高网...
【技术保护点】
嵌入式系统内存越界错误快速定位方法,其特征在于,包括以下步骤:通过可编程逻辑器件监视其上配置的若干越界使用内存区域,当任何一个所述越界使用内存区域被访问时产生中断;?CPU查询中断前正在执行的当前任务,并根据当前任务的指令计数器得到访问所述越界使用内存区域的函数;根据所述可编程逻辑器件上配置的合法访问任务集和合法访问函数合,确定所述函数是否为引起内存越界的函数,并输出引起内存越界的函数的任务名及指令地址。
【技术特征摘要】
【专利技术属性】
技术研发人员:戴锦友,余少华,汪学舜,刘志炉,黄婷熙,朱国胜,
申请(专利权)人:武汉烽火网络有限责任公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。