calculating FLASH utilisation by C code

2019-09-02 02:56发布

I want to optimize/reduce memory usage of my software. One of the approaches that I'm looking at is to look for removing redundant and unnecessary code. In my software there are lot of features (up to 3000) which can be activated/deactivated via a Feature Enable mechanism. What I am trying to do is to find how much RAM/FLASH a feature utilizes and then start evaluating with the biggest ones and see if they are required or not (Features not required can be safely deleted from the code). Also please note a function may have more than one feature within itself.

Our code would look something like this:

void foo (void)
{
    if(TRUE == feature1_enable)
    {
        doSomething;
    }
    if(TRUE == feature2_enable)
    {
        doSomething;
    }
    //rest of the code 
}

How can I calculate how much FLASH the code inside if statements is using? I cannot use final link map file as it provides data only about the function but not individual statements inside them. One solution that I have thought is to create an assembly listing file (.alst) out of the C code and then calculate the size of the instructions within the if statements which is nothing but the amount of FLASH utilized by these lines of code.

Kindly let me know if I am on the right track or if there is a better/easier way to do this?

I am using: Processor: MPC5554 (POWER PC architecture)
Compiler: WindRiver Diab

If the logic is correct I would eventually write a script to search the enables and do the required calculations.

1条回答
来,给爷笑一个
2楼-- · 2019-09-02 03:42

The only solution that comes to my mind that works with optimizations:

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 
}

If you need to automate:

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 
}

Then you can automate in your build script for every feature you have and measure the size of the feature alone. The most work you will have is adding all the defines now.

查看更多
登录 后发表回答