Radi0 0 2 августа, 2016 Опубликовано 2 августа, 2016 (изменено) · Жалоба Добрый день уважаемые форумчане. Поясните пожалуйста несколько моментов по примеру из boot.h void boot_program_page (uint32_t page, uint8_t *buf) { uint16_t i; uint8_t sreg; sreg = SREG; asm("cli"); // Disable interrupts. 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_safe(page + i, w); //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 (); // Re-enable interrupts (if they were ever enabled). boot_rww_enable(); SREG = sreg; boot_spm_interrupt_enable(); //asm("sei"); // Enable interrupts } 1. Что будет если не использовать макрос boot_page_erase(page); ? 2. Возможно ли исправить только несколько слов в странице? Используя boot_page_fill() с конкретными адресами а потом запуская boot_page_write(page);? Контроллер Atmega 128 Заранее благодарю. Изменено 2 августа, 2016 пользователем Radi0 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pavel-pervomaysk 0 2 августа, 2016 Опубликовано 2 августа, 2016 · Жалоба Попробуйте прочитать даташит, там изложено довольно хорошо. От себя рекомендую читать блок, исправлять, стирать, записывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться