Полная версия этой страницы:
STM32 bootloader
Осенило - а что, если разместить серийный номер в конце сектора от загрузчика? Раз записал, номер обновил ST-Link Utility, защиту от записи установил ей же. Остальное - в основной программе.
Так и сделал. Только не в конце, а так же, после векторов прерываний.
И еще один вопросик появился. Как в startup.s передать строковую переменную, конкретно, VERSION?
Допустим, в Main.h есть #define VERSION "3.50". Как эту строку забить в ассемблерную DCB команду?
Попробую спросить еще раз. Где бы почитать, как задать переменные в asm "file.s" из внешнего "defines.h"? Что-то ничего не нахожу.
P.S. Скачал с ARM сайта документы, но... решил обойтись иначе. Ни к чему мне хранить строки в asm-файле. Для работы загрузчика нужно только хранить размер кода. И серийный номер буду записывать вручную по выбранному адресу, а читать чисто указателем на этот адрес.
Цитата(ViKo @ Apr 7 2015, 18:43)

Попробую спросить еще раз. Где бы почитать, как задать переменные в asm "file.s" из внешнего "defines.h"? Что-то ничего не нахожу.
С такими запросами только на IAR переходить

- он синтаксис С-препроцессора понимает.
Судя по
http://infocenter.arm.com/help/index.jsp?t...sm_chebabgi.htmможно разве что в asm-файле определить символ через GBLS, а потом передать его значение через командную строку (--predefine ... ).
Почему "только"?

GCC тоже понимает!
(gcc -x assembler-with-cpp file.S).
Впрочем есть ещё одно особо тонкое извращение - пропустить этот файл через препроцессор С, а результат уже скармливать ассемблеру.
Кейловский с-компилер должен уметь выдавать результат работы препроцессора в файл.
Цитата(AHTOXA @ Apr 7 2015, 18:32)

Почему "только"?

GCC тоже понимает!
(gcc -x assembler-with-cpp file.S).
Да и в Keil почти всё можно сделать. По крайне мере, что здесь обсуждается - давно уже описано. И вычисление CRC подстановкой в нужное место, и размеры секций сразу можно в нужные места подставить. Лучше всего Help посмотреть - там есть всё и даже больше.
А можно вместо armcc просто использовать в Keil gcc, если сильно хочется.
toweroff
Apr 8 2015, 04:47
Цитата
Теперь задача - зашифровать-расшифровать прошивку.
Попробовал XTEA. Пока только закодировал. Не знаю, сколько времени будет декодироваться в микроконтроллере.
У меня на CM3 (LPC175x) влезло в 4КБ - CRC32 (программное, аппаратного нет), USART, протокол обменя, AES-128 (CBC mode), XTEA (тоже CBC)
Время на 1КБ на 16МГц (PLL не запущена)
- CRC32 - менее 1мс
- XTEA - 2мс
- AES-128 - 32мс
Поэкспериментировав с размещением в стартапе дополнительных констант, решил-таки залезать в дыру в векторах, в адрес 0x0020. Там (в секторе 1) внешней программой - шифровальшиком сохраняю размер файла. Туда же (но в загрузчике, в секторе 0) ST-Link Утилитой записываю серийный номер. И никаких изменений в startup.s не требуется.
А строковые константы - производитель, модель, версия программы - куда компилятор положит, оттуда программа и возьмет.
У меня тоже дешифруется быстро. Время засечь не могу (та же беда с точками останова, что описывал в другой теме; проще новый проект создать, чем в этом копаться).
toweroff
Apr 8 2015, 10:06
Цитата(ViKo @ Apr 8 2015, 12:31)

У меня тоже дешифруется быстро. Время засечь не могу (та же беда с точками останова, что описывал в другой теме; проще новый проект создать, чем в этом копаться).
я запускал таймер на секунд 10 и поднимал флаг. В цикле расшифровывал, увеличивал счетчик, выходил по флагу, считал время
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.