用C代码计算FLASH利用率

时间:2014-01-09 08:35:25

标签: c flash-memory

我想优化/减少我的软件的内存使用量。我正在寻找的方法之一是寻找删除冗余和不必要的代码。 在我的软件中,有很多功能(最多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

如果逻辑正确,我最终会编写一个脚本来搜索启用并执行所需的计算。

1 个答案:

答案 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 
}

然后,您可以在构建脚本中自动执行所有功能,并单独测量功能的大小。您将完成的大部分工作是立即添加所有定义。