Zephyr and the Memory Footprint: Difference between revisions

From chriesibaum wiki
Jump to navigation Jump to search
No edit summary
(No difference)

Revision as of 13:10, 26 January 2021

Do you want to use Zephyr RTOS on a Microcontroller with only a few bytes of Flash? Let's try it!

On the Optimizing for Footprint doc site you will find some hints how to reduce the memory footprint. Ok let's do it. I compiled the following application by using this configs:

main.c:

void main (void) {
    uint32_t i = 0;
    
    // run the loop for ever
    while (true) {
        i++;
    }
}

prj.conf:

# disable all peripherals
CONFIG_GPIO=n
CONFIG_SERIAL=n
CONFIG_SPI=n
CONFIG_I2C=n

# disable the boot banner
CONFIG_BOOT_BANNER=n

# disable all debug and log messages
CONFIG_DEBUG=n

# enable compiler size opt. (this is the default anyway)
CONFIG_SIZE_OPTIMIZATIONS=y


With this application and settings I could reduce the total application to 6872 bytes:

west build -p auto -b <board name>
Memory region         Used Size  Region Size  %age Used
           FLASH:        6872 B        16 KB     41.94%
            SRAM:        1232 B         2 KB     60.16%
        IDT_LIST:          56 B         2 KB      2.73%

Ok, this is just the compiled kernel to have an idea how much flash it needs. You can analyze the memory usage from the rom/ram-report. By using west build -t rom_report you will get a really nice report of the flash coverage. The same procedure for a ram usage report: west build -t ram_report For more details have a look at the Zephyr Docs: Optimization Tools).


But how much does a small hello world application need, for example?