Информационный портал технической поддержки Центра проектирования интегральных микросхем |
В данной статье рассмотрен алгоритм запуска программы из памяти ОЗУ в среде IAR. Для этих целей использовался МК К1986ВЕ92QI и стандартный пример "Hello world", собранный для среды IAR. Архив workspace с проектами "HelloWorld" и "HelloWorld_RAM" доступен в конце статьи. Важно отметить, что в составе архива идёт также библиотека SPL (SPL из установочного пака версии 1.0 - при наличии более новой версии установочного пака можно произвести актуализацию SPL самостоятельно), так как проекты подключают стандартные библиотечные файлы на микроконтроллер
Для демонстрации запуска программы из Flash-памяти и памяти ОЗУ сделаем два проекта "HelloWorld" и "HelloWorld_RAM", соответственно. В проект "HelloWorld_RAM" необходимо внести изменения, чтобы он отличался от стандартного проекта "HelloWorld". Для этого уменьшим в 4 раза значение задержек, определяющих период мигания светодиодом, как показано в фрагменте кода 1.
Фрагмент кода 1 - Макроопределение, определяющее период мигания светодиодом
#define LED_PERIOD 250000
Таким образом, при загрузке из Flash-памяти период мигания светодиода будет в 4 раза медленнее, чем при выполнении программы из памяти ОЗУ, что позволить определить, какая программа исполняется в текущий момент.
После запуска проекта "HelloWorld_RAM" в среде IAR выполним его настройку.
Для расположения данных и функции программы по адресам в памяти ОЗУ зайдём в опции проекта, нажав сочетание клавиш Alt+F7, либо через панель инструментов "Project→Options", как показано на рисунке 1.
Рисунок 1 - Переход в опции проекта через панель инструментов
В открывшемся окне переходим во вкладку "Debugger→Setup" и выбираем требуемый отладчик. Во вкладке "Debugger→Download" убираем все галочки, потому что загрузка программы во Flash-память выполняться не будет (рисунок 2).
Рисунок 2 - Настройка параметров отладки во вкладке "Debugger"
Переходим в настройках проекта во вкладку "Linker". Именно здесь настраивается расположение программы в памяти ОЗУ. Можно сделать копию конфигурационного файла "MDR32F9Q2I.icf" и сохранить в директории проекта. В поле "Linker configuration file" выбираем новый конфигурационный файл "MDR32F9Q2I.icf" и нажимаем на кнопку "Edit…", как показано на рисунке 3.
Рисунок 3 - Открытие конфигурационного файла компоновщика
Во вкладке "Memory Regions" в обоих разделах ROM и RAM необходимо указать память ОЗУ, которая располагается по адресам 0x20000000-0x20007FFF. Для этого весь объём ОЗУ, который в обычном проекте целиком определён для раздела RAM, разделим на две части, при этом одну часть выделим для раздела ROM, а другую для раздела RAM. Таким образом получится конфигурация, приведённая на рисунке 4 и в фрагменте кода 2.
Фрагмент кода 2 - Диапазон адресов, выделенных для разделов ROM и RAM в конфигурационном файле компоновщика
ROM : start (0x20000000), end (0x20000000+0x00004000-1)
RAM : start (0x20004000), end (0x20004000+0x00004000-1)
Рисунок 6 - Редактирование конфигурационного файла компоновщика в блокноте
Сначала загрузим в МК стандартный проект "HelloWorld", а затем запустим "HelloWorld_RAM", чтобы увидеть, что при запуске программы из ОЗУ период мигания светодиодов изменяется. Для загрузки проектов во Flash-память и ОЗУ выбираем "Project→Download and Debug", как показано на рисунке 7. После запуска отладки проекта "HelloWorld_RAM" осуществляем выполнение программы, нажав клавишу F5. На отладочной плате должен начать мигать светодиод. Открыв окно дисассемблера (в панели инструментов пункт "View→Disassembly"), можно определить, что загруженная программа располагается в адресах ОЗУ, начиная с 0х20000000.
Рисунок 7 - Запуск сессии отладки через панель инструментов, вкладка "Project→Download and Debug"
Если после закрытия отладочной сессии нажать кнопку "Reset" на отладочной плате, то период мигания светодиода изменится, потому что после сброса произойдёт штатный запуск МК и программа будет исполнятся из Flash-памяти.
Сайт: | https://support.milandr.ru |
E-mail: | support@milandr.ru |
Телефон: | +7 495 221-13-55 |