Цитата(_Артём_ @ Sep 5 2012, 10:04)

Что-то многовато. Ищи там ФУНКЦИОНАЛ навороченный?
На АВР приём-передача по UART-запись-чтение прошивки в dataflash-простейшее шифрование в 4КБ влезало. В 8 наверное AES влезет и приём-передача через GSM например (GSM не проверял).
IAR AVR как-то получше оптимизировал. На нем в 8К помимо того, что влезло в АРМ, втиснулась еще и индикация на дисплее. Шифрование у нас ГОСТ, прием-передача конкретно в этом случае по самодельному интерфейсу, чем-то похожему на SPI.
Функционал:
1. Запись прошивки (+ проверка на совместимость + дешифровка + проверка цифровой подписи)
2. Чтение прошивки (+ шифровка, цифровая подпись)
3. Чтение информации об устройстве и статуса
4. Широковещательная запись (похожа на 1, но немного другой алгоритм)
5. Всякие мелочи - запуск программы, принудительный переход в программирование
Оптимизацией сильно не занимался, просто поигрался с разными комбинациями флагов. Еще можно немного выжать, ужав таблицу прерываний - у меня даже в неиспользуемых прерываниях в конце таблицы все равно лежат нули.
Писал на С с классами (просто данные и методы собирал в класс). АСМ не юзал.
Цитата(MBR @ Sep 5 2012, 10:07)

Там пакета-то - код команды, блок данных, crc. Ответ ack/nack. Это 5 строчек на сях. Получить блок, проверить crc, скопировать в область памяти, увеличить счетчик. По команде запуска джампнуть на адрес. И 3 команды в минимуме - handshake + load secondary, read/write.
Ну 5 строчек - это большое преуменьшение. Надо настроить переферию, прерывания, собственно прием пакетов, дешифровку, проверку цифровой подписи, возврат текущего статуса. На линии могут сидеть несколько устройств, нужно фильтровать свой адрес, уметь его сообщать, поддерживать одновременную запись неск устройств...
Цитата
Имхо, си c классами в загрузчике, это слишком жирно.
Ну может быть. С другой стороны, чем это сильно отличается от функций + глобальных переменных? Единственное отличие - каждая функция получает доп указатель. Но у СТМ по идее тут должно быть все хорошо. Хотя надо ради интереса один класс сделать на статических переменных\функциях, возможно действительно что-то ужмется.
Цитата
Баги, новые команды. Да что угодно. Если устройств выпустится достаточное количество, поддерживать их будет уже геморно.
Баги и новые команды сидят в самой прошивке. Если они вдруг поселятся в первичном загручике - все равно его перепрошить не получится...