Attribute Macro ram
#[ram]Expand description
Sets which segment of RAM to use for a function or static and how it should be initialized.
§Options
- rtc_fast: Use RTC fast RAM.
- rtc_slow: Use RTC slow RAM. Note: not available on all targets.
- persistent: Persist the contents of the- staticacross resets. See the section below for details.
- zeroed: Initialize the memory of the- staticto zero. The initializer expression will be discarded. Types used must implement- bytemuck::Zeroable.
- reclaimed: Memory reclaimed from the esp-idf bootloader.
Using both rtc_fast and rtc_slow or persistent and zeroed together
is an error.
§persistent
Initialize the memory to zero after the initial boot. Thereafter,
initialization is skipped to allow communication across software_reset(),
deep sleep, watchdog timeouts, etc.
Types used must implement bytemuck::AnyBitPattern.
§Warnings
- A system-level or lesser reset occurring before the ram has been zeroed could skip initialization and start the application with the static filled with random bytes.
- There is no way to keep some kinds of resets from happening while updating a persistent static—not even a critical section.
If these are issues for your application, consider adding a checksum alongside the data.
§Examples
ⓘ
#[ram(unstable(rtc_fast))]
static mut SOME_INITED_DATA: [u8; 2] = [0xaa, 0xbb];
#[ram(unstable(rtc_fast, persistent))]
static mut SOME_PERSISTENT_DATA: [u8; 2] = [0; 2];
#[ram(unstable(rtc_fast, zeroed))]
static mut SOME_ZEROED_DATA: [u8; 8] = [0; 8];See the ram example in the qa-test folder of the esp-hal repository for a full usage example.