Zephyr use lot of memory for unused fonction

Hello

I've noticed that Zephyr uses a lot of memory with all its libraries. My code only takes up 15%, but I'm already out of available space. I've been trying to play with flags to reduce flash size.  Many of Zephyr's embedded functions aren't used in my project. I thought the compiler would remove unused functions. Am I missing something here? Are there any strategies to optimize Zephyr's memory usage for my specific application?

Thanks 


Parents
  • Hi Fabien,

    The percentage of zephyr memory usage depends on two factors. The first one is your chip memory size and the second is the libraries used by your application from Zephyr projects.

    Memory footprint optimization (nordicsemi.com)

    (+) Memory Optimization with the nRF Connect SDK - Software - nRF Connect SDK guides - Nordic DevZone (nordicsemi.com)

    You can refer to above pages to do memory footprint optimizing. Make use the unused libraries are not checked in the configuration files. Otherwise, you have to consider switch to chips with bigger memory size.

    Best regards,

    Charlie

  • Thank you for your answer. I've already follow this guide :

    CONFIG_UART_INTERRUPT_DRIVEN=y
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_FLASH=y
    CONFIG_IMG_MANAGER=y
    CONFIG_IMG_ENABLE_IMAGE_CHECK=y
    CONFIG_MCUBOOT_IMG_MANAGER=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    CONFIG_REBOOT=y
    CONFIG_PICOLIBC=y
    CONFIG_PICOLIBC_IO_C99_FORMATS=n


    #TO CHANGE
    CONFIG_MAIN_STACK_SIZE=16384

    CONFIG_BT=y

    # Enable mcumgr.
    CONFIG_MCUMGR=y

    # Enable most core commands.
    CONFIG_MCUMGR_CMD_IMG_MGMT=y
    CONFIG_MCUMGR_CMD_OS_MGMT=y

    # Allow for large Bluetooth data packets.
    CONFIG_BT_BUF_ACL_RX_SIZE=255
    CONFIG_BT_BUF_ACL_TX_SIZE=251
    CONFIG_BT_BUF_CMD_TX_SIZE=255
    CONFIG_BT_BUF_EVT_DISCARDABLE_SIZE=255

    CONFIG_BT_L2CAP_TX_MTU=247

    # Enable the Bluetooth (unauthenticated) and shell mcumgr transports.
    CONFIG_MCUMGR_SMP_BT=y
    CONFIG_MCUMGR_SMP_BT_AUTHEN=n

    # Some command handlers require a large stack.
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=8192

    CONFIG_MULTITHREADING=y
    CONFIG_I2C=y

    CONFIG_SIZE_OPTIMIZATIONS=y
    CONFIG_FORCE_NO_ASSERT=y

    CONFIG_WATCHDOG=y

    # USB configuration
    CONFIG_USB_DEVICE_STACK=y

    CONFIG_CONSOLE=y
    CONFIG_UART_CONSOLE=y
    CONFIG_UART_LINE_CTRL=y

    # Power management
    CONFIG_PM=n

    # Drivers and peripherals
    CONFIG_PINMUX=n
    CONFIG_SPI=n

    # Boot
    CONFIG_BOOT_BANNER=n

    # Disable Bluetooth features not needed
    CONFIG_BT_DEBUG_NONE=y
    CONFIG_BT_ASSERT=n
    CONFIG_BT_DATA_LEN_UPDATE=n
    CONFIG_BT_PHY_UPDATE=n
    CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS=n
    CONFIG_BT_HCI_VS_EXT=n


    # Disable Bluetooth controller features not needed
    # CONFIG_BT_CTLR_PRIVACY=n
    # CONFIG_BT_CTLR_PHY_2M=n


    # Disable features not needed
    CONFIG_LOG=n
    CONFIG_ASSERT=n

    CONFIG_USB_DEVICE_REMOTE_WAKEUP=n

    ---


    I'm very impressed by the scope of Zephyr's size in comparison to my code, which takes up only 15%. (I know mcuboot cut half of my size)
Reply
  • Thank you for your answer. I've already follow this guide :

    CONFIG_UART_INTERRUPT_DRIVEN=y
    CONFIG_BOOTLOADER_MCUBOOT=y
    CONFIG_FLASH=y
    CONFIG_IMG_MANAGER=y
    CONFIG_IMG_ENABLE_IMAGE_CHECK=y
    CONFIG_MCUBOOT_IMG_MANAGER=y
    CONFIG_IMG_ERASE_PROGRESSIVELY=y
    CONFIG_REBOOT=y
    CONFIG_PICOLIBC=y
    CONFIG_PICOLIBC_IO_C99_FORMATS=n


    #TO CHANGE
    CONFIG_MAIN_STACK_SIZE=16384

    CONFIG_BT=y

    # Enable mcumgr.
    CONFIG_MCUMGR=y

    # Enable most core commands.
    CONFIG_MCUMGR_CMD_IMG_MGMT=y
    CONFIG_MCUMGR_CMD_OS_MGMT=y

    # Allow for large Bluetooth data packets.
    CONFIG_BT_BUF_ACL_RX_SIZE=255
    CONFIG_BT_BUF_ACL_TX_SIZE=251
    CONFIG_BT_BUF_CMD_TX_SIZE=255
    CONFIG_BT_BUF_EVT_DISCARDABLE_SIZE=255

    CONFIG_BT_L2CAP_TX_MTU=247

    # Enable the Bluetooth (unauthenticated) and shell mcumgr transports.
    CONFIG_MCUMGR_SMP_BT=y
    CONFIG_MCUMGR_SMP_BT_AUTHEN=n

    # Some command handlers require a large stack.
    CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=8192

    CONFIG_MULTITHREADING=y
    CONFIG_I2C=y

    CONFIG_SIZE_OPTIMIZATIONS=y
    CONFIG_FORCE_NO_ASSERT=y

    CONFIG_WATCHDOG=y

    # USB configuration
    CONFIG_USB_DEVICE_STACK=y

    CONFIG_CONSOLE=y
    CONFIG_UART_CONSOLE=y
    CONFIG_UART_LINE_CTRL=y

    # Power management
    CONFIG_PM=n

    # Drivers and peripherals
    CONFIG_PINMUX=n
    CONFIG_SPI=n

    # Boot
    CONFIG_BOOT_BANNER=n

    # Disable Bluetooth features not needed
    CONFIG_BT_DEBUG_NONE=y
    CONFIG_BT_ASSERT=n
    CONFIG_BT_DATA_LEN_UPDATE=n
    CONFIG_BT_PHY_UPDATE=n
    CONFIG_BT_GAP_PERIPHERAL_PREF_PARAMS=n
    CONFIG_BT_HCI_VS_EXT=n


    # Disable Bluetooth controller features not needed
    # CONFIG_BT_CTLR_PRIVACY=n
    # CONFIG_BT_CTLR_PHY_2M=n


    # Disable features not needed
    CONFIG_LOG=n
    CONFIG_ASSERT=n

    CONFIG_USB_DEVICE_REMOTE_WAKEUP=n

    ---


    I'm very impressed by the scope of Zephyr's size in comparison to my code, which takes up only 15%. (I know mcuboot cut half of my size)
Children
No Data
Related