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;
}