В процессе поиска загрузчика для микроконтроллера STM8S103F3 было обнаружено, что имеющиеся загрузчики в основном написаны на «С», «воруют» значительный объем FLASH-памяти и переносят таблицу векторов прерываний.
Загрузчик нужен был для определенного устройства, к которому невозможно было подключить программатор.
Было решено попробовать самим написать загрузчик со следующими требованиями: — загрузчик должен был называться STM8uLoader; — код должен быть написан на ассемблере (благо ассемблер пока не запрещен законом); — загрузчик должен занимать минимально возможный объём FLASH-памяти; объем, занимаемый в компьютере, будем считать неограниченным; - загрузчик не должен перемещать таблицу векторов прерываний; — загрузчик должен иметь минимальный функционал, весь основной функционал должен брать на себя компьютер; — загрузчик должен передать управление прикладной программе в течение разумного времени после перезагрузки/включения питания при отсутствии связи с компьютером.
Первое условие было немедленным сделанный , но над последующими требованиями пришлось потрудиться.
Начальная ступень.
65-байтовый код во флэш-памяти Чтобы сохранить таблицу векторов на своем месте, было решено поместить код в конец FLASH-памяти и переключиться на нее сразу со сброса вектора $8000. При загрузке управление передается коду загрузчика по адресу $9FC2. Загрузчик настраивает UART 9600 8N1, ждет двух байтов на UART и, не дожидаясь, передает управление прикладной программе по адресу, хранящемуся в паре $9FFE:$9FFF. Если загрузчик получает от хост-программы старшие и младшие байты размера ожидаемого дампа, он затем получает сам дамп, помещает дамп в оперативную память и передает ему управление.
Далее вся забота ложится на программу на компьютере и присылаемый ею дамп.
Он должен отправлять именно те дампы, которые необходимы для выполнения текущей задачи (чтение/стирание/запись/копирование ячеек памяти STM8).
Дампы должны иметь возможность заменять друг друга в оперативной памяти и передавать управление прикладной программе.
Адрес перехода к прикладной программе — $9FFE:$9FFF. Файл boot_FLASH.asm:
Теги: #stm8 #Assembler #bootloader #OPTION Bytes #Программирование микроконтроллераstm8/ TITLE "boot_FLASH.asm" .
NOLIST #include "STM8S103F3P.inc"
-
Экономика
19 Oct, 24 -
Пиконру: Почему?
19 Oct, 24 -
Как Я Проходил Техсео.эксперт (1 Уровень)
19 Oct, 24 -
W3C Вернул Элемент
19 Oct, 24 -
Коворкинг Без Центра
19 Oct, 24 -
Внешний Дисплей Состояния Usb
19 Oct, 24