Программирование ARM: решение проблем, FAQ IAR EWB for ARM: как поменять абсолютный начальный адрес выполнения программы Wed, November 06 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


IAR EWB for ARM: как поменять абсолютный начальный адрес выполнения программы Печать
Добавил(а) microsin   

Например, нам нужно поменять адрес расположения программы в памяти с адреса 0x100000 (адрес начала программы по умолчанию для flash-проекта) на адрес 0x10C000 (на языке C в среде IAR Embedded Workbench for ARM, версия 5.20).

Процесс по шагам:

1. Project -> Options... -> Linker -> закладка Config -> Linker configuration file -> Галочка "Override default" установлена, и указан путь на локальный *.icf файл (карта памяти для линкера). Жмем кнопку Edit..., выскочит окошко "A field was left blank. Please enter a value.", жмем ОК, на закладке "Vector Table" вводим в поле .intvec start значение 0, переходим на закладку "Memory Regions". В поле ROM Start: вводим значение 0x10C000, жмем кнопку Save.

Внимание! Следите за тем, чтобы этот файл *.icf был индивидуальным для каждого проекта, это предотвратит нежелательную возможность повреждения других проектов при изменении настроек. Используйте путь до файла относительно папки проекта, типа такого: $PROJ_DIR$\..\at91lib\board\at91sam7x512\flash.icf.

2. Осталось настроить запуск отладки с нового адреса. Если у Вас версия IAR 5.50 и выше, то дальше ничего делать не надо, загрузчик сам умный и подхватит настройки линкера. Если же у Вас IAR версии 5.20, то нужно настроить поведение загрузчика вручную. Идем в Project -> Options... -> Debugger -> закладка Download -> Галка "Use flash loader(s)" установлена, в текстовом поле должно быть что-то типа ",,,0x100000,(default),". Жмем кнопку Edit..., в таблице щелкаем на строку "0x100000 (default)", снова жмем на другую кнопку "Edit...". Далее в окошке "Memory range" должна быть выбрана радиокнопка "All", ниже должна стоять галочка "Relocate", и в поле "Offset:" введите значение 0x10C000. Жмем кнопку OK, снова OK и снова OK.

На этом настройка проекта закончена. Теперь проект будет компилироваться для нового стартового адреса 0x10C000, и отладка будет нормально запускаться с адреса 0x10C000. Память flash на участке 0x100000 .. 0x10BFFF затираться и изменяться не будет.

Теперь если Вы попробуете выключить питание у запрограммированного чипа и снова его включить (т. е. запустить код "с нуля", без отладчика), то выполнение начнется с адреса 0x100000, и система может зависнуть, если по адресу 0x100000 находится мусор. Такая конфигурация (со смещением адреса старта проекта) может потребоваться для систем, где в одном чипе находится несколько независимых программ - например, программа обновления программного обеспечения (bootloader) лежит с адреса 0x100000, а основная программа (которую обновляет bootloader) лежит с адреса 0x10С000.

[Ссылки]

1. IAR EWB for ARM: как из кода C сделать безусловный переход на абсолютный адрес.

 

Добавить комментарий


Защитный код
Обновить

Top of Page