我想优化/减少我的软件的内存使用量。我正在寻找的方法之一是寻找删除冗余和不必要的代码。 在我的软件中,有很多功能(最多3000个)可以通过功能启用机制激活/停用。我要做的是找到一个功能使用多少RAM / FLASH,然后开始评估最大的功能,看看是否需要它们(可以从代码中安全地删除不需要的功能)。另请注意,函数本身可能包含多个功能。
我们的代码看起来像这样:
void foo (void)
{
if(TRUE == feature1_enable)
{
doSomething;
}
if(TRUE == feature2_enable)
{
doSomething;
}
//rest of the code
}
如果使用语句,如何计算内部代码的FLASH量?我不能使用最终链接映射文件,因为它只提供有关函数的数据,但不提供其中的单个语句。我想到的一个解决方案是从C代码中创建一个汇编列表文件(.alst),然后计算if语句中指令的大小,这些只是这些代码行使用的FLASH数量。
请告诉我,如果我走在正确的轨道上,或者有更好/更简单的方法吗?
我正在使用:
处理器:MPC5554(POWER PC架构)
编译器:WindRiver Diab
如果逻辑正确,我最终会编写一个脚本来搜索启用并执行所需的计算。
答案 0 :(得分:1)
我想到的唯一能够优化的解决方案:
void foo (void)
{
#if 0 // disable feature 1 for size test
if(TRUE == feature1_enable)
{
doSomething;
}
#endf // feature 1
if(TRUE == feature2_enable)
{
doSomething;
}
//rest of the code
}
如果您需要自动化:
void foo (void)
{
#ifndef DISABLE_FEATURE_1_AT_COMPILE_TIME // disable feature 1 for size test
if(TRUE == feature1_enable)
{
doSomething;
}
#endf // feature 1
#ifndef DISABLE_FEATURE_2_AT_COMPILE_TIME // disable feature 2 for size test
if(TRUE == feature2_enable)
{
doSomething;
}
#endif // feature 2
//rest of the code
}
然后,您可以在构建脚本中自动执行所有功能,并单独测量功能的大小。您将完成的大部分工作是立即添加所有定义。