Размещение кода по определенному адресу(Scatter-файл)

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Размещение кода по определенному адресу(Scatter-файл)

Сообщение maksimdag0 »

Доброго вечера, форумчане!
Подскажите, я не могу разобраться с вопросом, связанным со Scatter-файлом, а именно как разместить какой либо код(функцию или переменную, например) по определенному адресу в Keil . Не хватает знаний. Сразу скажу, ответ на вопрос искал на просторах интернета долго, пишу сюда так как недоперло до конца.
Есть Scatter-файл со следующим содержанием:
LR_IROM1 0x08000000 0x00080000 { ; load region size_region
ER_IROM1 0x08000000 0x00080000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
}

прогуглив, я узнал, что: LR_IROM1 – это регион(область) загрузки, ER_IROM1 – это регион(область) выполнения. Я понял так, что область загрузки это область памяти куда будет загружен нами указанный код , в данном примере код будет загружен в область, которая начинается с адреса 0x08000000 размером 0x00080000.

1) Ну что же такое регион(область) выполнения(ER_IROM1 0x08000000 0x00080000 )?

Второй вопрос:
2) Если я дал правильное определение что такое "LR_IROM1", то почему в теле LR_IROM1 прописано RW_IRAM1 0x20000000 0x00020000, ведь эти адреса( 0x20000000 0x00020000) никак не входят в область 0x08000000 0x00080000 ?
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение urry »

Код: Выделить всё


; 060000 - 07FFFF cut for ext memory
LR_IROM1 0x08000000 0x0005FFFF  {    ; load region size_region
  ER_IROM1 0x08000000 0x0005FFFF  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00010000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM2 0x20010000 0x00010000  {  ; RW data
  *.o (CCM_RW)
  }
}


Код: Выделить всё

volatile uint8_t ID_KEY[25]  __attribute__((section("CCM_RW")));
Реклама
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение maksimdag0 »

Так понимаю это пример, но по этому примеру я не могу найти ответы на заданные вопросы, пояснение не помешало бы)
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение urry »

Реклама
Эиком - электронные компоненты и радиодетали
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение maksimdag0 »

Я же написал, что я в интернете литературу читал, уточню, последние 3 дня, и эти статьи которые вы отправили тоже читал, но так и не понял.
Самое важное, что я не понял что такое РЕГИОН ЗАГРУЗКИ и что такое РЕГИОН ВЫПОЛНЕНИЯ? Что это?

Я представляю это так, если говорить абстрактно:

Написав программу(код), мы ее загружаем во flash микроконтроллера(МК), далее когда мы перезапускаем МК ядро начинает считывать инструкции программы с flash памяти начиная с 0x0 адреса(если, конечно, предварительно пинами BOOT установлена считывание с flash). Так вот, память flash получается это регион загрузки? И так как ядро выполняет программу из flash то она же считается и регионом выполнения?

Ну я думаю что я ошибаюсь
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение urry »

Да, конечно, ошибаетесь. Литературу Вы не дочитали - адрес старта в памяти программ начинается с адреса 0x08000000. Можно скорректировать - если в памяти программ находится бутлодер и основная программа , например, это фактически 2 разные программы. Переносится таблица векторов и так дальше. Я не могу здесь читать лекцию на 2 часа, начиная с архитектуры, отвечаю на конкретные вопросы.
Реклама
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение maksimdag0 »

Читать лекцию и не надо)
Конкретный вопрос следующий: что такое РЕГИОН ЗАГРУЗКИ и что такое РЕГИОН ВЫПОЛНЕНИЯ?
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 953
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение GARMIN »

Загрузка начальных значений переменных перед стартом программы откуда осуществляется?
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение maksimdag0 »

[uquote="GARMIN",url="/forum/viewtopic.php?p=4545054#p4545054"]Загрузка начальных значений переменных перед стартом программы откуда осуществляется?[/uquote]если речь идет за глобальные переменные, то из flash-памяти.

Сам код и глобальные переменные загружаются во flash память. После запуска глобальные переменные копируются в ОЗУ, а локальные создаются и удаляются в стеке в процессе выполнения программы
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение urry »

Издевается или троллит. Последняя моя ссылка в этой теме
http://www.vlsiip.com/c/embedded_c/xip.html#LRER
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение maksimdag0 »

[uquote="maksimdag0",url="/forum/viewtopic.php?p=4544905#p4544905"]Я же написал, что я в интернете литературу читал, уточню, последние 3 дня, и эти статьи которые вы отправили тоже читал, но так и не понял.[/uquote]
Вы читаете что я вам пишу? В самой теме еще это указал
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 953
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение GARMIN »

По буквам:
Загрузка начальных значений глобальных переменных перед стартом программы из какого региона flash-памяти осуществляется?
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение maksimdag0 »

Как я знаю, они располагаются во flash до функции main(). В начале flash располагаются вектора прерывания, после располагаются значения глобальных переменных, далее функция main().
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение VladislavS »

Вообще говоря, это совершенно не обязательно так. А точнее, совсем не так.
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение maksimdag0 »

Возможно. Потихоньку мы уходим от основного вопроса темы. Понимаю, все взаимно связано надо знать все, но мне кажется основной вопрос пояснить можно без этих доп. вопросов)
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25208
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Размещение кода по определенному адресу(Scatter-файл)

Сообщение КРАМ »

[uquote="maksimdag0",url="/forum/viewtopic.php?p=4545856#p4545856"]пояснить можно без этих доп. вопросов)[/uquote]
IRAM это область используемого ОЗУ. Причем тут флеш? Вы можете загрузить код в ОЗУ и вызвать его исполнение, но это процедура рантайма и к вопросу темы отношения не имеет.
Область загрузки и область исполнения во флеше (IROM) вами были интерпретированы верно.
Ответить

Вернуться в «ARM»