Memory footprint optimization
When developing an application, ROM and RAM footprint are important factors, especially when the firmware runs on the most resource-constrained devices like nRF52810 or nRF52811.
To reduce the memory footprint, ensure that your application uses the minimum required resources and tune the nRF Connect SDK configuration parameters. Complete the following actions to optimize your application:
Analyze stack usage in each thread of your application by using the Thread analyzer. Reduce the stack sizes where possible.
Limit or disable debugging features, such as logging or asserts.
Go through each component and subsystem and turn off all peripherals and features that your application does not use.
The following subsections give more information on how to optimize specific subsystems.
Besides applying General recommendations, you can also complete the following actions to optimize the Bluetooth® part of your application:
Disable features that your application does not use. For example, disable the following features:
Data Length Update
Security Manager Protocol (if no encryption and authentication is needed)
GATT Service Changed
Reduce the stack sizes of the Bluetooth internal threads where possible. Use the Thread analyzer to analyze the stack usage.
The following configuration options affect the stack sizes of the Bluetooth threads:
Reduce the overall number and the sizes of the Bluetooth buffers, based on the expected data traffic in your application.
The following configuration options affect the Bluetooth buffers:
For reference, you can find minimal footprint configurations of the Bluetooth: Peripheral LBS sample in
nrf/samples/bluetooth/peripheral_lbs/minimal.conf and the Bluetooth: Peripheral UART sample in
Make sure Zephyr’s Shell is disabled for your application. Related configuration options are listed in a dedicated section in each Matter sample’s
prj_release.conffor building the application. The release configuration has a smaller memory footprint than the default, debug-enabled
If the logs in your application do not use the default log level, you can change the default log level of Zephyr modules from
Change the log level of the Matter logs from
Reduce the verbosity of assert messages by setting
Check Thread memory footprint optimization actions, as the Matter application layer uses OpenThread.
The Near Field Communication (NFC) protocol implementation in the nRF Connect SDK provides some options for optimizing memory footprint for both the tag and the poller roles.
To optimize your application that supports the NFC tag functionality, follow the General recommendations. The NFC Type 2 Tag and Type 4 Tag libraries do not provide configuration options that have an effect on memory usage in an application. However, there are a few Kconfig configuration options you can use to optimize memory usage related to NFC.
CONFIG_NFC_PLATFORM_LOG_LEVEL_CHOICEto reduce logging level in the NFC integration module.
For an application that uses the Type 4 Tag library, you can set the following options:
To optimize an application that supports the NFC poller functionality using the NFC Reader ST25R3911B library, you can set the following options:
CONFIG_ST25R3911B_LIB_LOG_LEVEL_CHOICEand similar options to reduce the logging level of the NFC components used in the application.
If the application supports the Tag NDEF Exchange Protocol (TNEP), you can set the following options:
CONFIG_NFC_TNEP_POLLER_RX_MAX_RECORD_CNTfor the maximum number of NDEF records in the received message.
If the application uses the NFC TNEP protocol for the Bluetooth LE out-of-band pairing procedure (NFC TNEP Connection Handover), regardless of the role (tag or poller), you can set the following options:
The current Thread memory requirements are listed on the OpenThread memory requirements page.
Disable Thread features that your application does not use. For example, disable network shell and OpenThread CLI shell support (see Additional configuration options)
Reduce the stack sizes of the Thread internal threads where possible. Use the Thread analyzer to analyze the stack usage.
The following configuration options affect the stack sizes of the Thread threads:
The current Zigbee memory requirements are listed on the Zigbee memory requirements page.