[发明专利]一种基于list文件任务最大堆栈深度的检测方法有效
申请号: | 201310746685.X | 申请日: | 2013-12-30 |
公开(公告)号: | CN103678137A | 公开(公告)日: | 2014-03-26 |
发明(设计)人: | 万丽景;杨孟飞;党纪红;董晓刚;关小川;陈尧;綦艳霞;顾斌;王政 | 申请(专利权)人: | 北京控制工程研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 中国航天科技专利中心 11009 | 代理人: | 安丽 |
地址: | 100080 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 list 文件 任务 最大 堆栈 深度 检测 方法 | ||
技术领域
本发明涉及一种基于list文件任务最大堆栈深度的检测方法,尤其涉及一种航天嵌入式软件的任务最大堆栈深度的检测方法,属于嵌入式软件可靠性验证技术领域。
背景技术
嵌入式软件最大堆栈深度(worst-case-stack depth,WCSD)是指导硬件设计和软件开发的重要指标,然而它的测量却极其困难。当前人们通常使用动态方法或者静态方法来检测WCSD。动态方法是运行被测软件,测得的最大堆栈深度通常小于软件的实际最大堆栈深度。静态方法是通过分析程序代码或编译后的相关文件来计算WCSD。
如发表在《计算机工程与设计》2012年7月第7期上的“WCSD动态检测方法”和发表在《计算机工程与应用》第2012,48(36)期上的“基于遗传算法的嵌入式软件WCSD检测方法”均属于动态检测方法。动态方法测得的最大堆栈深度通常小于软件的实际最大堆栈深度,软件依据该过程进行预设堆栈大小存在堆栈溢出的隐患。
如发表在《空间控制技术与应用》第36卷第2期上的“一种用于分析MCS51目标码堆栈深度的方法”是一种静态的分析方法。然而该方法仅适用MC51处理器,对sparc处理器嵌入式软件并不适用。
发明内容
本发明解决的技术问题是:克服现有技术的不足,提供一种基于list文件任务最大堆栈深度的检测方法,解决了动态分析方法往往检测不到最大堆栈深度的问题,提出了一种通用的新的检测最大堆栈深度静态分析方法。
本发明包括如下技术方案:一种基于list文件任务最大堆栈深度的检测方法,步骤如下:
1)分析list文件,获得所有函数及函数使用堆栈的大小;
11)识别list文件中的代码段的范围;
12)在代码段的起始和结束范围内,提取list文件包含的所有函数,并记录每个函数的名称及地址;
13)在步骤12)提取的各函数包含的代码段范围内,查找改变寄存器窗口指令、弹出堆栈指令、预留堆栈指令;根据上述三个指令后的立即数,获得并记录各函数分配堆栈的大小;
2)找出步骤12)提取的各函数中所有的任务入口函数及中断入口函数;
3)创建任务入口函数的函数调用关系树;
31)以步骤2)提取出的每个任务入口函数作为该函数调用关系树的顶层节点,在该任务入口函数包含的代码段范围内,查找list文件中的函数调用指令、跳转指令以及陷阱指令,得到该任务入口函数的下层调用函数作为顶层节点的子节点,生成新的函数调用关系树;
32)在新的函数调用关系树的最底层子节点的代码段范围内,查找list文件中的函数调用指令、跳转指令以及陷阱指令,得到新的函数调用关系树的最底层子节点的下层调用函数;
33)重复步骤32)直至当新的函数调用关系树的最底层子节点无函数调用指令、跳转指令以及陷阱指令,并建立任务入口函数的最终函数调用关系树;
4)创建中断入口函数的函数调用关系树;
41)以步骤12)提取出的每个中断入口函数作为该函数调用关系树的顶层节点,在该中断入口函数包含的代码段范围内,查找list文件中的函数调用指令、跳转指令以及陷阱指令,得到该中断入口函数的下层调用函数作为顶层节点的子节点,生成新的函数调用关系树;
42)在新的函数调用关系树的最底层子节点的代码段范围内,查找list文件中的函数调用指令、跳转指令以及陷阱指令,得到新的函数调用关系树的最底层子节点的下层调用函数;
43)重复步骤42)直至新的函数调用关系树的最底层子节点无函数调用指令、跳转指令以及陷阱指令,并建立中断入口函数的最终函数调用关系树;
5)根据步骤3)以及步骤4)获得的最终函数调用关系树,获得各任务的最大堆栈深度;
51)以任务入口函数为起点,以任务入口最终函数调用关系树为路径,采用递归的方式,获得各调用路径使用的堆栈大小;
52)以中断入口函数为起点,以中断入口最终函数调用关系树为路径,采用递归的方式,获得各调用路径使用的堆栈大小;
53)将任务入口函数各路径使用的最大堆栈与中断入口函数各路径使用的最大堆栈相加,作为任务使用的最大堆栈。
本发明与现有技术相比的有益效果是:
(1)本发明能够准确给出任务的最大堆栈深度,解决了动态分析方法往往检测不到最大堆栈深度的问题。
(2)本方法缩短了软件开发周期,解决了最大堆栈深度依靠设计师经验及测试确定的问题,缩短了迭代开发过程。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京控制工程研究所,未经北京控制工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310746685.X/2.html,转载请声明来源钻瓜专利网。
- 上一篇:大型构件滚装装船方法
- 下一篇:一种轨道内置式驱动机构的控制方法