Я использую OpenOcd для прошивки образа Elf проекта STM32 ARM Cmake.
В сценарии mem.ld исходный адрес сектора FLASH назначается со смещением адреса на 0x08020200.
Если файл Elf записывается во флэш-память с использованием OpenOCD и команды write_image, кажется, что заголовок ELF записывается во флэш-память по адресу 0x08020000.
Двоичный файл приложения правильно записан во флеш-память по адресу 0x08020200 (первые четыре байта по адресу 0x08020200 отражают значение указателя стека)
Поскольку 0x08020200 - это адрес в секторе 5 флеш-памяти (0x08020000 - 0x0803FFFF), я ожидаю, что функция автоматического стирания команды OpenOcd write_image сотрет весь сектор 5 (потому что можно стереть только полные сектора)
Что могло привести к тому, что заголовок ELF будет записан во флэш-память по адресу 0x08020000?
Я выполнил следующие шаги:
- Вручную стерли всю флеш-память
- Выгрузил весь флеш-контент командой OpenOcd dump_image
- Проверено, что выгруженное изображение представляет собой чистую вспышку (все байты 0xFF)
- Прошил файл test.elf командой OpenOcd write_image
- Снова сбросил весь флеш-контент командой OpenOcd dump_image
- Проверено, что первые четыре байта по адресу 0x08020200 отражают значение указателя стека.
- Проверено содержимое флеш-памяти по адресу 0x08020000 - ›Заголовок ELF был записан во флеш-память
write_image
? Вы используете аргументtype
? - person domen   schedule 21.08.2020-c "program test.elf verify reset exit"
- person Y. Wilkening   schedule 21.08.2020dump_image
команды используются? Возможно ли, что он выгружается в файл .elf, а не в двоичный файл? - person Tom   schedule 10.09.2020