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

Подсчет контрольной суммы прошивки stm32f103 средствами линкера в IAR

1 час назад, Jon777 сказал:

define symbol __ICFEDIT_region_ROM_end__   = 0x0803FFFF;

...

Как пофиксить?

На вкладке проекта Linker\Checksum указать реальный конец прошивки, а не конец всей флешь МК. Точнее - чуть больше реального, с небольшим запасом.

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


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

1 час назад, Jon777 сказал:

image.png.44e7dd9c8a8514205ab21ad78987968f.png

Указал в первую очередь.

У вас прошивка размером 128КБ??? И если она реально 128КБ, то фраза:

3 часа назад, Jon777 сказал:

При включении расчёта CRC размер прошивки увеличивается в 10+ раз. 

означает, что она увеличивается до ~1.2МБ ??  :shok:  И как же вы умудряетесь её запихнуть в этот маленький МК?

 

PS: Вы вообще поняли что вам советовали? Складывается ощущение что нет.

PPS: И что такое по вашему "размер прошивки"? Как вы его измеряете?

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


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

В 15.08.2023 в 19:23, jcxz сказал:

У вас прошивка размером 128КБ??? И если она реально 128КБ, то фраза:

означает, что она увеличивается до ~1.2МБ ??  :shok:  И как же вы умудряетесь её запихнуть в этот маленький МК?

PS: Вы вообще поняли что вам советовали? Складывается ощущение что нет.

PPS: И что такое по вашему "размер прошивки"? Как вы его измеряете?

Под прошивкой подразумеваю файл с расширение bin, генерируемый IARом. Его в последствии мой загрузчик заливает в МК.

Размер был 80КБ, стал 900КБ.

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


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

1 час назад, Jon777 сказал:

Под прошивкой подразумеваю файл с расширение bin, генерируемый IARом. Его в последствии мой загрузчик заливает в МК.

Размер был 80КБ, стал 900КБ.

.bin - это просто образ памяти. Его размер должен быть равен разнице между максимальным и минимальным адресами образа + 1. Какие адреса вы включили в свой образ, что он стал больше размера всей флеши?? Очевидно вы добавили какие-то области за пределами флешь. Разбирайтесь как его генерите.

PS: И зачем вообще .bin? Гораздо удобнее и правильнее использовать .hex.

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


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

В 15.08.2023 в 21:54, jcxz сказал:

Какие адреса вы включили в свой образ, что он стал больше размера всей флеши??

Он не стал больше размера флеш, он стал ему равен.

В 15.08.2023 в 21:54, jcxz сказал:

PS: И зачем вообще .bin? Гораздо удобнее и правильнее использовать .hex.

Чем hex удобнее? Я читаю bin и пишу в память МК как есть, без какой либо обработки, куда проще?

 

Конкретизирую вопрос.

Как заставить IAR размещать CRC по нужному мне адресу?

Изменено пользователем Jon777

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


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

On 8/16/2023 at 3:58 AM, Jon777 said:

Как заставить IAR размещать CRC по нужному мне адресу?

А Вы вообще документацию на инструментарий читаете? Она для IAR написана довольно внятно. Бывают, конечно, моменты, когда приходится что-то уточнять. Но прочитав данный раздел,

image.thumb.png.ea54231d0abfd793547bd104744c6232.png

Вы узнаете о существовании секции .checksum. Указав линковщику адрес размещения этой секции, сможете поместить контрольную сумму в любое место при условии, что она не входит в диапазон адресов, на основании которых она рассчитывается. Другими словами, Вы не сможете разместить КС в середине прошивки.

Вот даже ответ на Ваш вопрос есть.

image.thumb.png.28a9ebadbc014241c4f01a4484196adc.png

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


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

Всем спасибо за участие!

Мой косяк, подвела невнимательность, не заметил

/*###ICF### Section handled by ICF editor, don't touch! ****/

прописал значение вручную и IAR его не подхватил.

 

И ещё вопрос, для стирания flash использую функцию HAL_FLASHEx_Erase. В большинстве случаев всё работает корректно, но иногда контроллер зависает при её вызове. Куда копать?

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


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

19 hours ago, Jon777 said:

прописал значение вручную и IAR его не подхватил.

Между делом замечу, что скрипты линковщика с некоторых пор пишу сам, либо сильно-сильно рихтую готовые. В принципе, в них ничего страшного нет. Всё снова же описано в документации. Как результат - полный контроль на тем, что и куда легло в памяти микроконтроллера!

19 hours ago, Jon777 said:

Куда копать?

Как бы это парадоксально не звучало, микроконтроллер, вернее его процессор, как правило не завивисает, а либо переходит на обработчик ошибки типа HardFault, который является обработчиком системного прерывания ядра, либо в следствие ошибки программы "улетает" куда-то по случайным адресам, где попадает в какой-нибудь цикл, например. Поскольку нередко в startup-файле по умолчанию обработчики HardFault, UsageFault и т.п. представлены заглушками с бесконечным циклом, возникает ощущение, что процессор завис. На самом деле это не так. Он честно выполняет программу. Попробуйте остановить выполнение программы под отладчиком, и, скорее всего, Вы убедитесь в этом. Если процессор действительно словил исключение HardFault, то методы его расшифровки широко освещены в интернете, да и здесь, на форуме, есть нескольк тем.

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


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

Вообще, у IAR есть апнота с примерами размещения crc:

https://www.iar.com/knowledge/support/technical-notes/general/ielftool-checksum---placing-the-checksum/

Прикрепил пример, в котором значение CRC кладётся последним в прошивке.

crc32last-uni-20230825.7z

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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