通过C代码计算FLASH利用率

标签 c flash-memory

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

相关文章:

c - 如何执行缓冲区中的代码?

node.js - 如何检查 IP 是否在给定的 IP 范围内?

c - 内部写入at91sam7s256 flash

c - pic32写入flash c编程

c - 在 C 语言中解析 DSL 比 lex/yacc 更好的解决方案?

c - 语法错误,在为 8051 微 Controller 编译 C 代码时期望看到声明

c - 有没有什么合理的方法可以在 C 程序中嵌入 Prolog 解释器?

c - 将指针传递给 pthread 函数会导致丢失其结构

c - 从闪存中的结构访问数据