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

Запуск приложения с иного адреса

Почему приложение само себе VTOR не устанавливает? Ведь только оно знает где у него таблица векторов.

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


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

17 minutes ago, VladislavS said:

Почему приложение само себе VTOR не устанавливает? Ведь только оно знает где у него таблица векторов.

Насколько я понимаю, загрузчик тоже обязан знать положение таблицы векторов приложения, иначе как он запустит это приложение?

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


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

19 минут назад, haker_fox сказал:

Насколько я понимаю, загрузчик тоже обязан знать положение таблицы векторов приложения, иначе как он запустит это приложение?

Нет, не обязан. Он обязан знать точку входа, которая может находиться по фиксированному адресу, например, в самом начале образа приложения. Адрес правильной таблицы традиционно задаёт себе само приложение.

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


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

@VladislavS, @makc, коллеги, я понял, что Вы имеете в виду. Но в наших приложениях "ремап" таблицы векторов не требуется. По крайней мере за 10 лет мы эту возможность не использовали, кроме случая с загрузчиком. Если понадобится, то приложение это сделает, модифицировав VTOR.

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


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

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

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


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

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

Почему приложение само себе VTOR не устанавливает? Ведь только оно знает где у него таблица векторов.

А разве это удобно? Мои проекты обычно не особо в курсе, что они будут запускаться из под загрузчика, поэтому изначально VTOR даже не трогают:smile:

А в Cortex-M0 этого VTOR и вовсе нет. Я просто следую идее, что к моменту передачи управления основному ПО все везде уже должно быть на своих местах.

А клиентский код, когда ему вдруг понадобится, подправит и VTOR так, как ему это требуется и так, как это будет максимально безопасно.

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


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

5 часов назад, haker_fox сказал:

Добавляю отладчику ключ, указывающий расположение таблицы векторов. И говорю ему, что она расположена по адресу 0x08000000, т.е. в области записанного мной загрузчика.

Не очень понятно - зачем так делать при отладке? Тогда ведь вы не сможете свободно изменить адрес расположения вашего загружаемого для отладки образа.

Зачем вам нужно чтобы при отладке, при каждом старте отладочной сессии, сначала выполнялся загрузчик, а не сразу отлаживаемое приложение?

VTOR естественно лучше устаналивать в той программе, которой он нужен. В каждой программе - своя установка VTOR. Как и прочей периферии.

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


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

34 минуты назад, Arlleex сказал:

А разве это удобно?

Зачем бедному загрузчику знать есть у вас VTOR или нет у вас VTOR, пользуетесь вы начальной таблицей векторов или формируете её в SRAM, делает приложение ремап или нет?

34 минуты назад, Arlleex сказал:

поэтому изначально VTOR даже не трогают

Представьте ситуацию, что нет никакого загрузчика. Ваше приложение (пусть это будет Cortex-M) стартануло с 0x0800'0000 со значением VTOR=0. Разве это оптимальная конфигурация?

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


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

2 minutes ago, jcxz said:

Тогда ведь вы не сможете свободно изменить адрес расположения вашего загружаемого для отладки образа.

Так отладка запускается для приложения. А отладчику указывается адрес начала загрузчика. Т.е. при отладке приложения этот ключ сначала позволяет запустить загрузчик.

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


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

40 минут назад, Arlleex сказал:

А разве это удобно? Мои проекты обычно не особо в курсе, что они будут запускаться из под загрузчика, поэтому изначально VTOR даже не трогают:smile:

А разве удобно не устаналивать его? А UART-ы, к примеру, у вас тоже загрузчик инициализирует?  :mosking:

И как работать не устаналивая VTOR, если код запускается для отладки например в ОЗУ? Или в верхних адресах флешь (чтобы не трогать рабочий образ в нижних адресах)?

PS: Про Cortex-M0 (раз у него нет VTOR) - другой разговор. Но ведь у ТС не он. Причём тут M0?

3 минуты назад, VladislavS сказал:

Зачем бедному загрузчику знать есть у вас VTOR или нет у вас VTOR

И куды же он делся-то? VTOR. Загрузчик - это не такая вещь, которая шляется по неизвестным процессорам. Она априори должна знать где она выполняется.

5 минут назад, haker_fox сказал:

Т.е. при отладке приложения этот ключ сначала позволяет запустить загрузчик.

Вот именно - я и спрашиваю: Зачем это делать? Зачем "сначала запускать загрузчик" при отладке приложения?

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


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

Я имел в виду не наличие VTOR как такового, а есть ли в приложении телодвижения с ним.

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


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

5 minutes ago, jcxz said:

А разве удобно не устаналивать его?

Гм. Здесь вопрос как раз удобства. Вообще, мне вчера пришла мысль ещё до создания этой темы, что VTOR и вообще все процедуры с манипуляцией таблицы векторов нужно делать в приложении. Это более универсальный подход. Но сейчас уже лень что-то переделывать. С другой стороны, что будет являться точкой входа в приложение? Разве не сама таблица векторов? Ведь, даже если она будет размещена в ОЗУ, то она где-то хранится после выключения питания. Поэтому, первые два адреса таблицы (стэк и старт) всё равно есть. Или я что-то не учитываю?

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


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

8 минут назад, VladislavS сказал:

Я имел в виду не наличие VTOR как такового, а есть ли в приложении телодвижения с ним.

Как же запускать приложение на отладку например в ОЗУ?

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


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

3 минуты назад, haker_fox сказал:

Поэтому, первые два адреса таблицы (стэк и старт) всё равно есть.

Это нужно только чтобы Cortex-M стартанул в железе без всяких загрузчиков. У других ядер другие условности. Если вы стартуете из-под загрузчика, то можете сделать как захочет ваша левая пятка. Другое дело, что особого смысла переделывать этот механизм нет, только себя путать.

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


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

14 minutes ago, jcxz said:

Зачем "сначала запускать загрузчик" при отладке приложения?

А, теперь понял Ваш вопрос) Ответ на него банальный и субъективный: просто хочу:acute: Ну и интересно сделать шаг влево-вправо при отладке.

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


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

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

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

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

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

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

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

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

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

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