8.2.13 boot_rww_enable_safe Macro

Enable the read-while-write (RWW) section.

Include

<avr/boot.h>

Prototype

void boot_rww_enable_safe(void);

Remarks

This macro enables the read-while-write section after ensuring that EEPROM and PSM operations are complete. When enabled and the read-while-write section is erased or written, code may still be executed from the no-read-while-write (NRWW) section.

Example

#include <inttypes.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
    
void boot_program_page (uint32_t page, uint8_t *buf) {
  uint16_t i;
  uint8_t sreg;

  sreg = SREG;
  cli();
  eeprom_busy_wait ();
  boot_page_erase (page);
  boot_spm_busy_wait ();      // Wait until the memory is erased.
  for (i=0; i<SPM_PAGESIZE; i+=2) {
    // Set up little-endian word.
    uint16_t w = *buf++;
    w += (*buf++) << 8;
    boot_page_fill (page + i, w);
  }
  boot_page_write (page);     // Store buffer in flash page.
  boot_spm_busy_wait();       // Wait until the memory is written.
  // Reenable RWW-section again. We need this if we want to jump back
  // to the application after bootloading.
  boot_rww_enable_safe();
  // Re-enable interrupts (if they were ever enabled).
  SREG = sreg;
}