我想优化/减少软件的内存使用量。我正在研究的方法之一是寻找删除冗余和不必要的代码。 在我的软件中,有很多功能(最多 3000 个)可以通过功能启用机制激活/停用。我想做的是找到一个功能使用了多少 RAM/FLASH,然后开始评估最大的功能,看看它们是否是必需的(不需要的功能可以安全地从代码中删除)。另请注意,一个函数本身可能具有多个功能。
我们的代码看起来像这样:
void foo (void)
{
if(TRUE == feature1_enable)
{
doSomething;
}
if(TRUE == feature2_enable)
{
doSomething;
}
//rest of the code
}
如何计算 if 语句中的代码使用了多少 FLASH?我无法使用最终链接映射文件,因为它仅提供有关函数的数据,而不提供其中的单个语句。我想到的一种解决方案是从 C 代码中创建一个程序集列表文件 (.alst),然后计算 if 语句中指令的大小,这只不过是这些代码行使用的 FLASH 量。
请告诉我我是否走在正确的轨道上,或者是否有更好/更简单的方法来做到这一点?
我正在使用:
处理器:MPC5554(POWER PC架构)
编译器:WindRiver Diab
如果逻辑正确,我最终会编写一个脚本来搜索启用并进行所需的计算。
最佳答案
我想到的唯一可用于优化的解决方案:
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
}
然后,您可以在构建脚本中自动化您拥有的每个功能,并单独测量该功能的大小。您现在要做的最多的工作就是添加所有定义。
关于通过C代码计算FLASH利用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21015186/