一种用于精确估计嵌入式系统中堆栈需求量的方法

文档序号:6584970阅读:489来源:国知局
专利名称:一种用于精确估计嵌入式系统中堆栈需求量的方法
技术领域
本发明涉及一种用于分析嵌入式系统中堆栈使用的方法,具体说,本发明涉及一 种用于精确估计嵌入式系统中堆栈需求量的方法。
背景技术
堆栈内存由程序开发人员静态进行分配。如果低估了堆栈的使用量,将会导致程 序运行出错;而过高的估计了堆栈的使用又将造成系统内存资源的浪费。堆栈分析器不仅 可以降低程序员开发程序的难度,还可以减少很多隐晦的错误。本发明全面分析了本领域内相关研究的进展情况,例如专利申请号 200810061578. 2设计了堆栈使用分析的一种方法。在该专利中,以可执行文件作为输入,进 行反汇编,基本块的堆栈分析,函数内的堆栈分析后,以程序的调用关系图为基础计算多线 程中的堆栈使用情况,专利申请号200810061578. 2还考虑了中断处理函数对堆栈大小的 影响,是一种实用的堆栈分析方法。然而在该专利中,并未考虑实时操作系统RT0S对堆栈 大小的影响,未考虑程序中可能调用的动态库和标准库对堆栈的影响。

发明内容
本发明的目的在于,为克服在嵌入式系统中对所用堆栈需求估计不准导致的系统 不稳定问题,从而提出一种用于精确估计嵌入式系统中堆栈需求量的方法。为了达到本发明提供一种用于精确估算最大堆栈使用量的堆栈方法,该发明详细 分析了程序运行时每个函数的堆栈使用量,统计了程序所调用的运行时库和标准库的堆栈 使用信息,同时还考虑了操作系统本身的运行对堆栈的影响,从而使得对程序最大堆栈使 用量的计算更为精确。一种用于估计嵌入式系统中堆栈需求量的方法,该方法用于精确估计嵌入式系统 程序运行过程中对堆栈空间的最大需求量,所述的方法包含如下步骤1)对目标二进制文件进行反汇编得到源汇编文件;2)对汇编文件进行分析得到完整的函数调用关系图;3)根据步骤2得到的完整的函数调用关系图进行本地函数的堆栈需求量分析,并 求和;4)根据步骤2得到的完整的函数调用关系图,统计每棵调用树所调用的运行时库 的堆栈需求和标准库的堆栈需求量并求和;5)按照优先级进行中断函数的堆栈需求进行分析,确定每个优先级内各个中断程 序的最大堆栈需求量并求和,再加上中断发生时,保存处理器状态而增加的额外堆栈需求 量;6)对3、4和5步骤中的堆栈需求求和,统计出单线程程序的嵌入式系统的最大堆 栈需求量;其中,步骤2)所述的完整的函数关系图步骤,具体包含
3
首先用控制流分析得到初步的函数关系图,然后针对间接调用函数和递归调用函 数采取抽象解释算法的值分析方法进一步分析,对于无法分析的函数调用需要用户进行注 释,得到完整的函数调用关系图。所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,所述的运行 时库函数的堆栈需求,直接对源代码进行堆栈需求分析;所述的标准库函数,查询编译器厂 商提供的堆栈信息表格得到堆栈需求。所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,步骤3)所述 的本地函数堆栈需求分析需要确定函数调用深度,针对在同一棵调用树上的函数堆栈大小 进行累加,对于复杂递归函数的深度通过值分析得到数据,否则需要用户进行注释。所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,如果程序以 多线程方式运行,为每个线程建立调用树,并重复步骤3)至6),得到多线程时系统的最大 堆栈需求量。所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,所述的最大 堆栈需求量与操作系统本身运行时的堆栈最大需求量求和,得到整个嵌入式系统程序运行 时最大堆栈需求量。本发明的优点在于,除了可以静态的计算多线程程序的堆栈大小,还可以分析运 行时库、标准库和操作系统的堆栈使用情况,使得计算结果更加精确,用于指导程序员合理 的分配内存资源,从而保证嵌入式系统的安全性可靠性。


图1给出了本发明的详细流程图。
具体实施例方式下面结合附图和具体实施例对本发明进行详细的说明。下面结合附图和具体实施方式
对本发明做进一步说明。该方法具体工作步骤如图 1所示1.对二进制文件进行反汇编得到汇编文件。不同的硬件平台需要不同的反汇编工且.
Z、 92.对汇编文件进行控制流分析得到函数调用关系图,这里的函数调用图可能因为 间接调用的存在无法明确反映出函数关系,因此需要进一步流分析;3.对汇编文件进行值分析,得到完整的函数调用关系图。值分析采取抽象解释算 法。对于无法分析的函数调用需要用户进行注释。以下步骤以单线程为模型进行分析,对 于多线程分析,步骤7给出方案;4.进行本地函数的堆栈使用分析。本地函数分析需要明确函数调用深度,在同一 棵调用树上的函数堆栈大小需要进行累加。对于复杂递归函数的深度通过值分析得到数 据,否则需要用户进行注释;5.按照优先级进行中断函数的堆栈使用分析,确定每个优先级内各个中断程序的 最大堆栈用量并进行求和。还需计算中断发生时,用来保存处理器中间状态的堆栈使用空 间;
6.统计每棵调用树所调用的运行时库和标准库的堆栈使用信息。对于运行时库函 数的堆栈使用,可以对源代码进行堆栈分析;对于标准库函数,可以通过查询编译器厂商提 供的堆栈信息表格得到数据;7.对4,5,6步骤中的最大堆栈使用求和,统计出程序的最坏堆栈使用量。如果程 序以多线程方式运行,为每个线程建立调用树,重复步骤4至7,最后求和;8.计算操作系统RT0S本身运行时的堆栈最大需求量;9.对7和8计算结果求和,得到多线程程序运行时对系统的最大堆栈需求量;10.反标调用关系图,并使用图形化界面输出通过以上步骤,本发明可以对多线程程序的堆栈空间使用量进行精确的估算,可 以应用在程序的安全性检查步骤中。最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参 照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方 案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明 的权利要求范围当中。
权利要求
一种用于精确估计嵌入式系统中堆栈需求量的方法,该方法用于精确估计嵌入式系统程序运行过程中对堆栈空间的最大需求量,所述的方法包含如下步骤1)对目标二进制文件进行反汇编得到源汇编文件;2)对汇编文件进行分析得到完整的函数调用关系图;3)根据步骤2得到的完整的函数调用关系图进行本地函数的堆栈需求量分析,并求和;4)根据步骤2得到的完整的函数调用关系图,统计每棵调用树所调用的运行时库的堆栈需求和标准库的堆栈需求量并求和;5)按照优先级进行中断函数的堆栈需求进行分析,确定每个优先级内各个中断程序的最大堆栈需求量并求和,再加上中断发生时,保存处理器状态而增加的额外堆栈需求量;6)对3、4和5步骤中的堆栈需求求和,统计出单线程程序的嵌入式系统的最大堆栈需求量;其中,步骤2)所述的完整的函数关系图步骤,具体包含首先用控制流分析得到初步的函数关系图,然后针对间接调用函数和递归调用函数采取抽象解释算法的值分析方法进一步分析,对于无法分析的函数调用需要用户进行注释,得到完整的函数调用关系图。
2.根据权利要求1所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在 于,所述的运行时库函数的堆栈需求,直接对源代码进行堆栈需求分析;所述的标准库函 数,查询编译器厂商提供的堆栈信息表格得到堆栈需求。
3.根据权利要求1所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在 于,步骤3)所述的本地函数堆栈需求分析需要确定函数调用深度,针对在同一棵调用树上 的函数堆栈大小进行累加,对于复杂递归函数的深度通过值分析得到数据,否则需要用户 进行注释。
4.根据权利要求1所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在 于,如果程序以多线程方式运行,为每个线程建立调用树,并重复步骤3)至6),得到多线程 时系统的最大堆栈需求量。
5.根据权利要求1或4所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征 在于,所述的最大堆栈需求量与操作系统本身运行时的堆栈最大需求量求和,得到整个嵌 入式系统程序运行时最大堆栈需求量。
全文摘要
本发明提出一种用于精确估计嵌入式系统中堆栈需求量的方法,所述的方法包含如下步骤用完整的函数调用关系图进行本地函数和每棵调用树运行时库和标准库的堆栈需求的堆栈需求量分析,并求和;确定每个优先级内各个中断程序的最大堆栈需求量并求和,并加上保存处理器状态而增加的额外堆栈需求;对以上结果求和得到单线程的最大堆栈需求;所述的完整的函数关系图,首先用控制流分析得到初步的函数关系图,然后针对间接调用函数和递归调用函数采取抽象解释算法的值分析方法进一步分析,得到完整的函数调用关系图,对于无法分析的函数调用需要用户进行注释。针对多线程重复单线程步骤并将所有求和,最后在加上操作系统的堆栈需求量即系统总堆栈需求。
文档编号G06F9/50GK101876923SQ20091024125
公开日2010年11月3日 申请日期2009年11月27日 优先权日2009年11月27日
发明者张铁军, 时磊, 王东辉, 王红梅 申请人:中国科学院声学研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1