В загрузчике можно реализовать один “трюк”, который позволяет при выполнении определенного условия полностью ликвидировать прикладную программу, включая свой собственный код. Ниже приведен фрагмент программы из 12 слов, которая последовательно стирает все страницы FLASH-памяти. Сама программа должна быть расположена в последней странице, которая и будет удалена в последнюю очередь. Перейти на метку flush_mem можно из любого места программы любой инструкцией перехода либо вызова подпрограммы.
. rjmp flush_mem ;запускаем отчистку FLASH-памяти . ; Код для отчистки FLASH-памяти программ .org FLASHEND - 12 flush_mem: ldi ZH,high(-2*PAGESIZE) ;инициализируем указателю Z ldi ZL,low(-2*PAGESIZE) fm1: in R16,SPMCR ;ожидаем пока не закончится действие sbrc R16,SPMEN ;предыдущая инструкции spm rjmp fr1 fm2: sbic EECR,EEWE ;ожидаем пока не закончится rjmp fr2 ;запись в EEPROM-память subi ZL,low(-2*PAGESIZE) ;увеличиваем текущий адрес sbci ZH,high(-2*PAGESIZE) ;на величину PAGESIZE слов ldi R16,(1<< PGERS)|(1<< SPMEN) out SPMCR,R16 ;заносим регистр SPMCR команду стирания spm ;в течении 4-х циклов выполняем команду spm rjmp fr1 ;переходим к очистки очередной страницы
Перейти к следующей части: Программирование микроконтроллеров AVR - Особенности последовательного низковольтного программирования
Комментарии (0) | Я собрал (0) | Подписаться
Для добавления Вашей сборки необходима регистрация