Как Сжать Загрузчик Для Stm8 До 18 Байт Во Flash Памяти

В процессе поиска загрузчика для микроконтроллера STM8S103F3 было обнаружено, что имеющиеся загрузчики в основном написаны на «С», «воруют» значительный объем FLASH-памяти и переносят таблицу векторов прерываний.

Загрузчик нужен был для определенного устройства, к которому невозможно было подключить программатор.

Было решено попробовать самим написать загрузчик со следующими требованиями: — загрузчик должен был называться STM8uLoader; — код должен быть написан на ассемблере (благо ассемблер пока не запрещен законом); — загрузчик должен занимать минимально возможный объём FLASH-памяти; объем, занимаемый в компьютере, будем считать неограниченным; - загрузчик не должен перемещать таблицу векторов прерываний; — загрузчик должен иметь минимальный функционал, весь основной функционал должен брать на себя компьютер; — загрузчик должен передать управление прикладной программе в течение разумного времени после перезагрузки/включения питания при отсутствии связи с компьютером.

Первое условие было немедленным сделанный , но над последующими требованиями пришлось потрудиться.



Начальная ступень.

65-байтовый код во флэш-памяти

Чтобы сохранить таблицу векторов на своем месте, было решено поместить код в конец FLASH-памяти и переключиться на нее сразу со сброса вектора $8000. При загрузке управление передается коду загрузчика по адресу $9FC2. Загрузчик настраивает UART 9600 8N1, ждет двух байтов на UART и, не дожидаясь, передает управление прикладной программе по адресу, хранящемуся в паре $9FFE:$9FFF. Если загрузчик получает от хост-программы старшие и младшие байты размера ожидаемого дампа, он затем получает сам дамп, помещает дамп в оперативную память и передает ему управление.

Далее вся забота ложится на программу на компьютере и присылаемый ею дамп.

Он должен отправлять именно те дампы, которые необходимы для выполнения текущей задачи (чтение/стирание/запись/копирование ячеек памяти STM8).

Дампы должны иметь возможность заменять друг друга в оперативной памяти и передавать управление прикладной программе.

Адрес перехода к прикладной программе — $9FFE:$9FFF. Файл boot_FLASH.asm:

   

stm8/ TITLE "boot_FLASH.asm" .

NOLIST #include "STM8S103F3P.inc"

Теги: #stm8 #Assembler #bootloader #OPTION Bytes #Программирование микроконтроллера
Вместе с данным постом часто просматривают: