CN101876923A - 一种用于精确估计嵌入式系统中堆栈需求量的方法 - Google Patents
一种用于精确估计嵌入式系统中堆栈需求量的方法 Download PDFInfo
- Publication number
- CN101876923A CN101876923A CN2009102412537A CN200910241253A CN101876923A CN 101876923 A CN101876923 A CN 101876923A CN 2009102412537 A CN2009102412537 A CN 2009102412537A CN 200910241253 A CN200910241253 A CN 200910241253A CN 101876923 A CN101876923 A CN 101876923A
- Authority
- CN
- China
- Prior art keywords
- demand
- function
- stack
- storehouse
- call
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提出一种用于精确估计嵌入式系统中堆栈需求量的方法,所述的方法包含如下步骤:用完整的函数调用关系图进行本地函数和每棵调用树运行时库和标准库的堆栈需求的堆栈需求量分析,并求和;确定每个优先级内各个中断程序的最大堆栈需求量并求和,并加上保存处理器状态而增加的额外堆栈需求;对以上结果求和得到单线程的最大堆栈需求;所述的完整的函数关系图,首先用控制流分析得到初步的函数关系图,然后针对间接调用函数和递归调用函数采取抽象解释算法的值分析方法进一步分析,得到完整的函数调用关系图,对于无法分析的函数调用需要用户进行注释。针对多线程重复单线程步骤并将所有求和,最后在加上操作系统的堆栈需求量即系统总堆栈需求。
Description
技术领域
本发明涉及一种用于分析嵌入式系统中堆栈使用的方法,具体说,本发明涉及一种用于精确估计嵌入式系统中堆栈需求量的方法。
背景技术
堆栈内存由程序开发人员静态进行分配。如果低估了堆栈的使用量,将会导致程序运行出错;而过高的估计了堆栈的使用又将造成系统内存资源的浪费。堆栈分析器不仅可以降低程序员开发程序的难度,还可以减少很多隐晦的错误。
本发明全面分析了本领域内相关研究的进展情况,例如专利申请号200810061578.2设计了堆栈使用分析的一种方法。在该专利中,以可执行文件作为输入,进行反汇编,基本块的堆栈分析,函数内的堆栈分析后,以程序的调用关系图为基础计算多线程中的堆栈使用情况,专利申请号200810061578.2还考虑了中断处理函数对堆栈大小的影响,是一种实用的堆栈分析方法。然而在该专利中,并未考虑实时操作系统RTOS对堆栈大小的影响,未考虑程序中可能调用的动态库和标准库对堆栈的影响。
发明内容
本发明的目的在于,为克服在嵌入式系统中对所用堆栈需求估计不准导致的系统不稳定问题,从而提出一种用于精确估计嵌入式系统中堆栈需求量的方法。
为了达到本发明提供一种用于精确估算最大堆栈使用量的堆栈方法,该发明详细分析了程序运行时每个函数的堆栈使用量,统计了程序所调用的运行时库和标准库的堆栈使用信息,同时还考虑了操作系统本身的运行对堆栈的影响,从而使得对程序最大堆栈使用量的计算更为精确。
一种用于估计嵌入式系统中堆栈需求量的方法,该方法用于精确估计嵌入式系统程序运行过程中对堆栈空间的最大需求量,所述的方法包含如下步骤:
1)对目标二进制文件进行反汇编得到源汇编文件;
2)对汇编文件进行分析得到完整的函数调用关系图;
3)根据步骤2得到的完整的函数调用关系图进行本地函数的堆栈需求量分析,并求和;
4)根据步骤2得到的完整的函数调用关系图,统计每棵调用树所调用的运行时库的堆栈需求和标准库的堆栈需求量并求和;
5)按照优先级进行中断函数的堆栈需求进行分析,确定每个优先级内各个中断程序的最大堆栈需求量并求和,再加上中断发生时,保存处理器状态而增加的额外堆栈需求量;
6)对3、4和5步骤中的堆栈需求求和,统计出单线程程序的嵌入式系统的最大堆栈需求量;
其中,步骤2)所述的完整的函数关系图步骤,具体包含:
首先用控制流分析得到初步的函数关系图,然后针对间接调用函数和递归调用函数采取抽象解释算法的值分析方法进一步分析,对于无法分析的函数调用需要用户进行注释,得到完整的函数调用关系图。
所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,所述的运行时库函数的堆栈需求,直接对源代码进行堆栈需求分析;所述的标准库函数,查询编译器厂商提供的堆栈信息表格得到堆栈需求。
所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,步骤3)所述的本地函数堆栈需求分析需要确定函数调用深度,针对在同一棵调用树上的函数堆栈大小进行累加,对于复杂递归函数的深度通过值分析得到数据,否则需要用户进行注释。
所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,如果程序以多线程方式运行,为每个线程建立调用树,并重复步骤3)至6),得到多线程时系统的最大堆栈需求量。
所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,所述的最大堆栈需求量与操作系统本身运行时的堆栈最大需求量求和,得到整个嵌入式系统程序运行时最大堆栈需求量。
本发明的优点在于,除了可以静态的计算多线程程序的堆栈大小,还可以分析运行时库、标准库和操作系统的堆栈使用情况,使得计算结果更加精确,用于指导程序员合理的分配内存资源,从而保证嵌入式系统的安全性可靠性。
附图说明
图1给出了本发明的详细流程图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细的说明。
下面结合附图和具体实施方式对本发明做进一步说明。该方法具体工作步骤如图1所示:
1.对二进制文件进行反汇编得到汇编文件。不同的硬件平台需要不同的反汇编工具;
2.对汇编文件进行控制流分析得到函数调用关系图,这里的函数调用图可能因为间接调用的存在无法明确反映出函数关系,因此需要进一步流分析;
3.对汇编文件进行值分析,得到完整的函数调用关系图。值分析采取抽象解释算法。对于无法分析的函数调用需要用户进行注释。以下步骤以单线程为模型进行分析,对于多线程分析,步骤7给出方案;
4.进行本地函数的堆栈使用分析。本地函数分析需要明确函数调用深度,在同一棵调用树上的函数堆栈大小需要进行累加。对于复杂递归函数的深度通过值分析得到数据,否则需要用户进行注释;
5.按照优先级进行中断函数的堆栈使用分析,确定每个优先级内各个中断程序的最大堆栈用量并进行求和。还需计算中断发生时,用来保存处理器中间状态的堆栈使用空间;
6.统计每棵调用树所调用的运行时库和标准库的堆栈使用信息。对于运行时库函数的堆栈使用,可以对源代码进行堆栈分析;对于标准库函数,可以通过查询编译器厂商提供的堆栈信息表格得到数据;
7.对4,5,6步骤中的最大堆栈使用求和,统计出程序的最坏堆栈使用量。如果程序以多线程方式运行,为每个线程建立调用树,重复步骤4至7,最后求和;
8.计算操作系统RTOS本身运行时的堆栈最大需求量;
9.对7和8计算结果求和,得到多线程程序运行时对系统的最大堆栈需求量;
10.反标调用关系图,并使用图形化界面输出
通过以上步骤,本发明可以对多线程程序的堆栈空间使用量进行精确的估算,可以应用在程序的安全性检查步骤中。
最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (5)
1.一种用于精确估计嵌入式系统中堆栈需求量的方法,该方法用于精确估计嵌入式系统程序运行过程中对堆栈空间的最大需求量,所述的方法包含如下步骤:
1)对目标二进制文件进行反汇编得到源汇编文件;
2)对汇编文件进行分析得到完整的函数调用关系图;
3)根据步骤2得到的完整的函数调用关系图进行本地函数的堆栈需求量分析,并求和;
4)根据步骤2得到的完整的函数调用关系图,统计每棵调用树所调用的运行时库的堆栈需求和标准库的堆栈需求量并求和;
5)按照优先级进行中断函数的堆栈需求进行分析,确定每个优先级内各个中断程序的最大堆栈需求量并求和,再加上中断发生时,保存处理器状态而增加的额外堆栈需求量;
6)对3、4和5步骤中的堆栈需求求和,统计出单线程程序的嵌入式系统的最大堆栈需求量;
其中,步骤2)所述的完整的函数关系图步骤,具体包含:
首先用控制流分析得到初步的函数关系图,然后针对间接调用函数和递归调用函数采取抽象解释算法的值分析方法进一步分析,对于无法分析的函数调用需要用户进行注释,得到完整的函数调用关系图。
2.根据权利要求1所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,所述的运行时库函数的堆栈需求,直接对源代码进行堆栈需求分析;所述的标准库函数,查询编译器厂商提供的堆栈信息表格得到堆栈需求。
3.根据权利要求1所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,步骤3)所述的本地函数堆栈需求分析需要确定函数调用深度,针对在同一棵调用树上的函数堆栈大小进行累加,对于复杂递归函数的深度通过值分析得到数据,否则需要用户进行注释。
4.根据权利要求1所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,如果程序以多线程方式运行,为每个线程建立调用树,并重复步骤3)至6),得到多线程时系统的最大堆栈需求量。
5.根据权利要求1或4所述的用于精确估计嵌入式系统中堆栈需求量的方法,其特征在于,所述的最大堆栈需求量与操作系统本身运行时的堆栈最大需求量求和,得到整个嵌入式系统程序运行时最大堆栈需求量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102412537A CN101876923A (zh) | 2009-11-27 | 2009-11-27 | 一种用于精确估计嵌入式系统中堆栈需求量的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009102412537A CN101876923A (zh) | 2009-11-27 | 2009-11-27 | 一种用于精确估计嵌入式系统中堆栈需求量的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101876923A true CN101876923A (zh) | 2010-11-03 |
Family
ID=43019484
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009102412537A Pending CN101876923A (zh) | 2009-11-27 | 2009-11-27 | 一种用于精确估计嵌入式系统中堆栈需求量的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101876923A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012833A (zh) * | 2010-11-09 | 2011-04-13 | 北京神舟航天软件技术有限公司 | 基于编译过程中间结果的静态堆栈检测方法 |
CN102063325A (zh) * | 2011-01-06 | 2011-05-18 | 哈尔滨工业大学 | 一种嵌入51系列单片机的多任务实时操作系统的实现方法 |
CN103678137A (zh) * | 2013-12-30 | 2014-03-26 | 北京控制工程研究所 | 一种基于list文件任务最大堆栈深度的检测方法 |
WO2017128952A1 (zh) * | 2016-01-28 | 2017-08-03 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN107045478A (zh) * | 2017-04-28 | 2017-08-15 | 福建星瑞格软件有限公司 | 一种轻量级线程分析与运行可视化方法 |
CN107402759A (zh) * | 2017-07-20 | 2017-11-28 | 北京计算机技术及应用研究所 | 基于aadl扩展附件的软件系统堆栈分析方法 |
TWI647565B (zh) * | 2016-03-31 | 2019-01-11 | 物聯智慧科技(深圳)有限公司 | 計算堆疊大小之計算系統及方法 |
CN110084042A (zh) * | 2019-05-11 | 2019-08-02 | 肖银皓 | 一种应用程序堆栈静态分析方法及系统 |
CN113312054A (zh) * | 2021-05-27 | 2021-08-27 | 长沙海格北斗信息技术有限公司 | 针对嵌入式软件架构的软件栈消耗分析方法及分析装置 |
CN116382879A (zh) * | 2023-06-06 | 2023-07-04 | 北京理工大学出版社有限责任公司 | 一种具备通用性的耦合数据交换技术架构 |
-
2009
- 2009-11-27 CN CN2009102412537A patent/CN101876923A/zh active Pending
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102012833A (zh) * | 2010-11-09 | 2011-04-13 | 北京神舟航天软件技术有限公司 | 基于编译过程中间结果的静态堆栈检测方法 |
CN102063325A (zh) * | 2011-01-06 | 2011-05-18 | 哈尔滨工业大学 | 一种嵌入51系列单片机的多任务实时操作系统的实现方法 |
CN102063325B (zh) * | 2011-01-06 | 2013-04-03 | 哈尔滨工业大学 | 一种嵌入51系列单片机的多任务实时操作系统的实现方法 |
CN103678137A (zh) * | 2013-12-30 | 2014-03-26 | 北京控制工程研究所 | 一种基于list文件任务最大堆栈深度的检测方法 |
WO2017128952A1 (zh) * | 2016-01-28 | 2017-08-03 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN107015904A (zh) * | 2016-01-28 | 2017-08-04 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
CN107015904B (zh) * | 2016-01-28 | 2022-04-19 | 中兴通讯股份有限公司 | 堆栈的保护方法及装置 |
TWI647565B (zh) * | 2016-03-31 | 2019-01-11 | 物聯智慧科技(深圳)有限公司 | 計算堆疊大小之計算系統及方法 |
CN107045478B (zh) * | 2017-04-28 | 2019-12-13 | 福建星瑞格软件有限公司 | 一种轻量级线程分析与运行可视化方法 |
CN107045478A (zh) * | 2017-04-28 | 2017-08-15 | 福建星瑞格软件有限公司 | 一种轻量级线程分析与运行可视化方法 |
CN107402759A (zh) * | 2017-07-20 | 2017-11-28 | 北京计算机技术及应用研究所 | 基于aadl扩展附件的软件系统堆栈分析方法 |
CN107402759B (zh) * | 2017-07-20 | 2020-07-17 | 北京计算机技术及应用研究所 | 基于aadl扩展附件的软件系统堆栈分析方法 |
CN110084042A (zh) * | 2019-05-11 | 2019-08-02 | 肖银皓 | 一种应用程序堆栈静态分析方法及系统 |
CN113312054A (zh) * | 2021-05-27 | 2021-08-27 | 长沙海格北斗信息技术有限公司 | 针对嵌入式软件架构的软件栈消耗分析方法及分析装置 |
CN116382879A (zh) * | 2023-06-06 | 2023-07-04 | 北京理工大学出版社有限责任公司 | 一种具备通用性的耦合数据交换技术架构 |
CN116382879B (zh) * | 2023-06-06 | 2023-08-29 | 北京理工大学出版社有限责任公司 | 一种具备通用性的耦合数据交换技术架构 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101876923A (zh) | 一种用于精确估计嵌入式系统中堆栈需求量的方法 | |
Blackham et al. | Timing analysis of a protected operating system kernel | |
Chen et al. | Robust benchmarking in noisy environments | |
EP1331565B1 (en) | Application execution profiling in conjunction with a virtual machine | |
Dastgeer et al. | Auto-tuning SkePU: a multi-backend skeleton programming framework for multi-GPU systems | |
US11068393B2 (en) | Enhanced concurrency garbage collection stack scanning | |
US10007495B2 (en) | Code generation method for scheduling processors using hook function and exception handling function | |
US8881125B2 (en) | Indirect software performance analysis | |
Kwon et al. | Precise execution offloading for applications with dynamic behavior in mobile cloud computing | |
US8122454B2 (en) | Managing memory resources in a shared memory system | |
Maleki et al. | Understanding the impact of object oriented programming and design patterns on energy efficiency | |
Wang et al. | Automatic partitioning of object-oriented programs for resource-constrained mobile devices with multiple distribution objectives | |
Albert et al. | Termination and cost analysis of loops with concurrent interleavings | |
CN108139929B (zh) | 用于调度多个任务的任务调度装置和方法 | |
CN104239055A (zh) | 检测软件代码复杂度的方法 | |
Metz et al. | Hybrid PTX analysis for GPU accelerated CNN inferencing aiding computer architecture design | |
Harmon et al. | A modular worst-case execution time analysis tool for Java processors | |
CN116113927A (zh) | 用于函数调用中可重复使用和相对索引的寄存器资源分配的方法和装置 | |
Barbosa et al. | Sabo: Dynamic mpi+ openmp resource balancer | |
Badr et al. | A high-level model for exploring multi-core architectures | |
Binder et al. | Cross-profiling for embedded Java processors | |
Qin et al. | Characterizing WebAssembly Bytecode | |
Umar et al. | A study of power-performance modeling using a domain-specific language | |
Liu et al. | Heuristic optimisation algorithm for Java dynamic compilation | |
Bertels et al. | Efficient memory management for hardware accelerated java virtual machines |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20101103 |