[发明专利]一种基于C语言的嵌入式软件能耗估算方法无效
申请号: | 201210180174.1 | 申请日: | 2012-06-04 |
公开(公告)号: | CN102750222A | 公开(公告)日: | 2012-10-24 |
发明(设计)人: | 郭兵;沈艳;韩洪良;徐阔海;王毅;段林涛;熊伟;张文丽 | 申请(专利权)人: | 四川大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 610065 四川*** | 国省代码: | 川;51 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明公布了一种基于C语言的嵌入式软件能耗估算方法。提供了一种新的方法用于快速预测嵌入式软件的能耗,为相应的能耗优化研究和开发工作提供了数据基础。本发明从源程序级对用C语言开发的软件的结构进行了研究,将软件能耗按源程序的控制结构进行划分,给出了程序中顺序结构、跳转结构、循环结构和函数调用结构的能耗估算方法,进而给出了整个程序的能耗估算方法。实验结果表明,采用本发明计算出的软件能耗,与使用能耗模拟器测量的结果相比,误差在10%以内,可准确地反映嵌入式软件的能耗情况。 | ||
搜索关键词: | 一种 基于 语言 嵌入式 软件 能耗 估算 方法 | ||
【主权项】:
1.一种基于C语言的嵌入式软件能耗估算方法,其特征在于建立该方法的步骤如下:1) 因为C语言程序由顺序结构、跳转结构、循环结构和函数调用结构组成,所以C语言程序的能耗由这几个部分的能耗组成,即:
其中,
表示嵌入式C程序的能耗,
表示C程序中顺序结构的能耗,
表示C程序中跳转结构的能耗,
表示C程序中循环结构的能耗,
表示C程序中函数调用的能耗;2) 在步骤1)公式中的
采用如下方法计算:定义数据结构:struct variable //变量{ int variable_kind; //变量类型 char* variable_name; //变量名 char* variable_value; //以字符串形式存储变量的值 struct variable* next; //指向下一variable结构};struct operator //运算符{ int operator_kind; //运算符类型 int operator_treat; //运算发生时,如需转化,按转化后的类型处理 int operator_time; //该运算符出现次数,默认为0 struct operator* next; //指向下一operator结构};struct variable_energy //变量能耗{ int variable_time; //变量出现次数 double variable_energy; //变量能耗值};struct variable* v_list; //变量链表struct variable_energy v_energy[VAR]; //变量能耗表
的计算方法:遍历v_list链表,计算variable_kind相同的结点个数,并存储在v_energy表中相应类型结点的variable_time中,表v_energy的长度VAR为全部C语言变量类型的个数,在结束整个C程序的处理后,遍历v_energy表,将variable_time与variable_energy相乘,得到每种类型变量的总能耗,将每种类型变量总能耗累加便得
;3) 在步骤1)公式中的
采用如下方法计算:首先根据编译原理判断出跳转结构在执行过程中的正确路径,得到正确的执行代码,然后对正确的执行代码按顺序结构进行处理,得出跳转结构的能耗值
;4) 在步骤1)公式中
采用如下方法计算:首先判断循环结构执行过程中的循环的次数,然后按照顺序结构处理循环体,最后结合循环体,以及循环次数,进行累加处理,得到整个循环结构的能耗值
;5) 在步骤1)公式中的
采用如下公式计算:
其中
表示用户函数调用的能耗,
表示系统库函数调用的能耗;6) 在步骤5)公式中的
采用如下方法计算:定义数据结构:struct user_function //用户函数{ char* function_name; //函数名 int function_return_kind; //函数返回类型 int function_variable8_quantity; //函数8位参数的个数,默认为0 int function_variable16_quantity; //函数16位参数的个数,默认为0 int function_variable32_quantity; //函数32位参数的个数,默认为0 int function_variable64_quantity; //函数64位参数的个数,默认为0 struct user_function* next; //指向下一个user_function结构 int function_time; //函数被调用次数,默认为0 double function_energy; //函数体能耗值,默认为0};struct user_function* uf_list; //用户函数链表其中的function_energy可根据函数的返回类型、参数个数和参数类型,利用事先求得的原始函数能耗值计算得出,原始函数能耗值是指一个既无参数又无返回值的函数被调用时产生的能耗;
的计算方法为:遍历uf_list链表,得到每个函数被调用的次数function_time,将其与该函数的function_energy相乘,得到整个程序中该函数总能耗,将每个函数的总能耗累加便得
;7) 在步骤5)公式中的
采用如下方法计算:除printf、scanf函数外,绝大部分C库函数的内部执行路径都比较固定,其能耗值也相对固定,所以可事先测定除printf、scanf函数外的每个库函数的单次调用能耗值;定义数据结构:struct lib_function //库函数{ char* lib_function_name; //库函数名称 int lib_function_time; //库函数被调用次数,默认为0 struct lib_function* next; //指向下一个lib_function结构};struct lib_function* lf_list; //库函数链表
的计算方法:遍历lf_list链表,将库函数的lib_function_time与其事先测定的单次调用能耗值相乘,得到整个程序中该库函数的总能耗,将每个库函数的总能耗累加便得
。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于四川大学,未经四川大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201210180174.1/,转载请声明来源钻瓜专利网。
- 上一篇:活性焦脱硫再生气制硫酸工艺
- 下一篇:紧凑型回旋加速器束流六维发射度匹配方法