Как правило, в программу-счетчик загружается вектор сброса или загружается аппаратно запрограммированный начальный адрес, в зависимости от архитектуры. Для устройств ARM Cortex-M, таких как STM32, это первое. Для большинства инструкций программный счетчик автоматически увеличивается до следующей инструкции, инструкции перехода и перехода изменяют программный счетчик непосредственно на конкретный целевой адрес (условно или безоговорочно).
Если программа запускается из таблицы векторов сброса, то ПК укажет адрес флэш-памяти?
По крайней мере, на STM32 это зависит от режима загрузки, установленного выводами BOOT0 / BOOT1; он может загружаться из встроенного загрузчика с маской ПЗУ, встроенной флэш-памяти или встроенной SRAM - прочтите руководство пользователя. Что касается «контроллеров TI», TI производит множество контроллеров с разной архитектурой, и вы не были конкретными - загрузка, вероятно, отличается для каждого из них - еще раз прочтите руководство пользователя.
При запуске основного приложения на ПК указывается адрес ОЗУ. Как? Когда ПК переместится в место ОЗУ?
Это было бы правдой только в том случае, если ваше приложение было расположено в ОЗУ, где либо вектор сброса указывал бы на ОЗУ, либо на загрузчик, либо код запуска во время выполнения разветвился или перешел на адрес ОЗУ. Код STM32 обычно запускается из флэш-памяти, а не из ОЗУ; в этом случае он работает быстрее, потому что флэш-память и оперативная память находятся на разных шинах (архитектура Гарварда), что обеспечивает одновременную выборку данных и инструкций. Запуск кода из ОЗУ замедлит выполнение.
Код хранится во флэш-памяти, а ПК указывает на расположение ОЗУ .... как это происходит? Когда код перемещается в место ОЗУ?
Это не обязательно верно, и в случае STM32 это редко - код может быть сохранен и выполнен из флэш-памяти. Контроллеры, которые выполняются из ОЗУ, имеют код начальной загрузки в ПЗУ, который копирует (перемещает) исполняемый код в ОЗУ, а затем переходит к нему.
Если его переместить в оперативную память, где он будет храниться? по какому разделу (сегментация)?
Кто это решит?
Компоновщик определяет это и, в свою очередь, направляет сценарий компоновщика. Для инструментов GNU это обычно расширение файла .ld, другие цепочки инструментов отличаются.
person
Clifford
schedule
24.07.2017