Перейти к содержанию
    

Контрольная сумма прошивки и Keil

Если была такая тема, то хотелось бы ссылку увидеть, поиск мне выдал добрые два десятка страниц.

 

Сейчас разбираюсь в загрузчике и есть вопрос по поводу контрольной суммы бинарного файла, скомпилированного в Keil'е. Где она хранится и какой алгоритм расчёта? Где можно почитать на эту тему?

 

- объявляем например в файле main.c

 

const int crc __attribute__((at(0x800)));

 

пусть у нас до адреса 0х800 будет загрузчик,а с этого адреса будет программа

- редактируем файл 1.ini (этот файл вне проекта и к нему никак не относится) Пусть у нас к примеру,адрес конца Flash-памяти нашего микроконтроллера 0х1000. также CRC считаем по простенькому алгоритму исключающего или,хотя можно запрограммировать и реальный crc32

 

map 0x800,0x800 read write

 

FUNC void calc_crc(void)

{

int i;

crc=0;

for(i=0x804;i<0x1000;i+=4)

crc^=_RDWORD(i);

}

 

calc_crc()

 

- подключаем этот файл 1.ini заходим в меню keil-a

"project-options fo target....-вкладка debug-поле initialization file" открываем этот файл

ну собственно говоря,компилируем,загружаем,наслаждаемся

 

Можно проконтролировать это дело-ввести в watch-окно отладчика переменную crc и проверить...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подключаем этот файл 1.ini заходим в меню keil-a

"project-options fo target....-вкладка debug-поле initialization file" открываем этот файл

ну собственно говоря,компилируем,загружаем,наслаждаемся

В симуляторе прокатит, а насчет камня не уверен. Поскольку при загрузке HEX значение будет не определено.А последующая модернизация ПЗУ вещь специфическая. И даже если это прокатит, то такую прошивку можно зашивать только через KEIL и только с использованием данного ini-файла, что подходит только для разовой работы или мелкой серии.

Кроме того, если программа начинается с адреса 0x800, то хранить там CRC - преступление.Убивается точка входа в программу.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

зашивать только через KEIL и только с использованием данного ini-файла...

 

Да,только через кейл....файл образа остается неизменным,что не есть хорошо...Адреса приведены здесь чисто для примера. на самом деле они определяются самим программистом..

 

Да,еще один нюанс- наткнулся в помощи кейла на следующее,т.н. "Cortex-M signature" (меню Help->uvision help->вкладка СОДЕРЖАНИЕ->"книга" uvision user's guide->utilites->Signature Creator for NXP Cortex-M Devices)

Может быть это то,что нам и надо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гораздо проще настроить в КЕЙЛе проект так, чтоб после сборки запускалась утилита (хоть srecord, хоть самопал, хоть набор утилит из cmd-файла), которая будет пересчитывать CRC у созданного HEX файла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гораздо проще настроить в КЕЙЛе проект так, чтоб после сборки запускалась утилита (хоть srecord, хоть самопал, хоть набор утилит из cmd-файла), которая будет пересчитывать CRC у созданного HEX файла.

Не знаю, проще ли, но логичнее. Запускаю после компиляции сначала преобразование в bin файл, а потом свою программу, которая для вычисляет CRC, размер файла, шифрует его...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...