用C代码计算FLASH利用率

用C代码计算FLASH利用率,c,flash-memory,C,Flash Memory,我想优化/减少软件的内存使用。我正在研究的方法之一是删除冗余和不必要的代码。 在我的软件中有很多功能(最多3000个),可以通过功能启用机制激活/停用。我试图做的是找出一个特性使用了多少RAM/FLASH,然后开始评估最大的RAM/FLASH,看看它们是否需要(不需要的特性可以从代码中安全删除)。另外请注意,函数本身可能有多个功能 我们的代码如下所示: void foo (void) { if(TRUE == feature1_enable) { doSometh

我想优化/减少软件的内存使用。我正在研究的方法之一是删除冗余和不必要的代码。 在我的软件中有很多功能(最多3000个),可以通过功能启用机制激活/停用。我试图做的是找出一个特性使用了多少RAM/FLASH,然后开始评估最大的RAM/FLASH,看看它们是否需要(不需要的特性可以从代码中安全删除)。另外请注意,函数本身可能有多个功能

我们的代码如下所示:

void foo (void)
{
    if(TRUE == feature1_enable)
    {
        doSomething;
    }
    if(TRUE == feature2_enable)
    {
        doSomething;
    }
    //rest of the code 
}
如何计算if语句中的代码使用了多少FLASH?我不能使用最终链接映射文件,因为它只提供有关函数的数据,而不提供函数中的单个语句。我想到的一个解决方案是用C代码创建一个程序集列表文件(.alst),然后计算if语句中指令的大小,这只是这些代码行使用的闪存量

请让我知道我是否在正确的轨道上,或者是否有更好/更简单的方法来实现这一点

我正在使用: 处理器:MPC5554(电源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 
}

然后,您可以为您拥有的每个功能在构建脚本中进行自动化,并单独测量功能的大小。您将要做的最多的工作就是现在添加所有定义。

这与在编译时将
feature1\u enable
设置为false不一样吗?我很确定编译器在这种情况下也会这样做。我不能假设feature1_enable值在编译时已知。他发布的代码片段中没有显示。即使feature1_enable值在编译时已知,该方法也需要每次重新编译以计算每个功能的大小,我不推荐使用该方法,因为它速度慢且需要大量手动工作。问题是,
doSomething可能不同、相同或相似。即使普通人不这么认为,编译器也可能共享代码。在不了解编译器内部结构的情况下,无法以100%的精度静态执行此操作。最好的方法是按照建议启用/禁用代码。我建议你弄清楚需要什么功能。如果feature1是irq_控制器,feature2是舞蹈_机器人,那么尺寸不是主要问题。