Например TDA7294

Форум РадиоКот • Просмотр темы - Scatter файл. Keil, STM32
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Сб сен 27, 2025 07:31:39

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Scatter файл. Keil, STM32
СообщениеДобавлено: Вс авг 31, 2025 17:28:10 
Родился

Зарегистрирован: Вс авг 31, 2025 17:10:30
Сообщений: 4
Рейтинг сообщения: 0
Всем привет! Работаю в основном в keil(предпочтительно с STM32). Хочу разобраться с содержимом scatter файла. Вот пример стандартного кода в 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(регион загрузки) и для чего он нужен, я уже понял. Он кладет физически данные и код по указанном адресу(если создать два региона LR_IROM1 и LR_IROM2 с разными адресами и прочитать flash через STM32 ST-LINK Utility то это можно будет увидеть и убедиться в этом).

Главный вопрос – для чего нужен ER_IROM1(регион выполнения) и какую функцию он выполняет? Как с ним работать?
Обьясните пожалуйста кто знает, или как можно самому проверить(например через STM32 ST-LINK Utility как и с LR_IROM1)?

На официальном сайте ARM читал, по интернету гулял, по разному игрался работая в STM32 ST-LINK Utility, но все равно до меня не дошло как оно работает и для чего оно нужно, и как его использовать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Scatter файл. Keil, STM32
СообщениеДобавлено: Пн сен 01, 2025 11:08:43 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 181
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1578
Рейтинг сообщения: 0
Кейлом не пользуюсь, но если просто включить логику и исходя из названий то:
"load region" - регион загрузки (регион адресов памяти откуда грузится код);
"executable region" - регион выполнения (регион адресов памяти в которых код выполняется).
Для МК со встроенным FLASH (как у вас) очевидно - эти регионы совпадают. Для МК, которые не имеют встроенной флешь, и в которых загрузчик грузит код из внешней памяти перед выполнением, они будут разные.

PS: Впрочем - иногда бывает, что даже у МК со встроенной FLASH эти регионы будут разными. Одна и та же память может отображаться на разные адреса адресного пространства.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Scatter файл. Keil, STM32
СообщениеДобавлено: Пн сен 01, 2025 12:56:12 
Родился

Зарегистрирован: Вс авг 31, 2025 17:10:30
Сообщений: 4
Рейтинг сообщения: 0
Я Работаю конкретно с STM32F407VET.
По поводу «региона выполнения» я не уверен правильно ли я его понимаю, физически.
Регион выполнения - это откуда будет код выполняться правильно?
То есть если ER_IROM2 0x08004000 0x00003FFF {
.ANY (+XO)
}
то ядро будет выполнять «.ANY (+XO)» с адреса 0x08004000? Значит эти данные должны быть расположены по адресу 0x08004000?

Допустим вот такой пример scatter файла:
LR_IROM1 0x08000000 0x00080000 { ; load region size_region
ER_IROM1 0x08000000 0x00003FFF { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}

ER_IROM2 0x08004000 0x00003FFF {
.ANY (+XO)
}
RW_IRAM1 0x20000000 0x00020000 { ; RW data
.ANY (+RW +ZI)
}
}

Сама вся моя прошивка занимает 1200 байт.
Исходя из моего понимания, в данном примере вся прошивка должна расположится по адресу 0x08000000 размером 0x00080000. Конкретно секции « *.o (RESET, +First); *(InRoot$$Sections); .ANY (+RO)» будут располагаться по адресу 0x08000000.
А секция «.ANY (+XO)» по адресу 0x08004000. По логике если мы прочитаем flash(с помощью STM32 ST-LINK Utility) то мы должны увидеть какие-то данные по адресу 0x08004000. Но там пусто(0xFFFFFFFF лежат), в реальности «.ANY (+XO)» расположились сразу после секций « *.o (RESET, +First); *(InRoot$$Sections); .ANY (+RO)» . То есть вся прошивка(все секции) занимает область по адресу 0x08000000 последовательно, а далее вся память пустая(0xFFFFFFFF).

Значит я что-то не так понимаю. Помогите пожалуйста разобраться с этим. Правильно ли я это понял?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Scatter файл. Keil, STM32
СообщениеДобавлено: Пн сен 01, 2025 13:27:36 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 181
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1578
Рейтинг сообщения: 0
Регион выполнения - это откуда будет код выполняться правильно?
Это регион адресов, по которым этот код/данные будет виден вашей программе.

А секция «.ANY (+XO)» по адресу 0x08004000. По логике если мы прочитаем flash(с помощью STM32 ST-LINK Utility) то мы должны увидеть какие-то данные по адресу 0x08004000. Но там пусто(0xFFFFFFFF лежат)
Значит компоновщик не разместил в том регионе никакие данные/код. Какие секции в какой регион компонуются компоновщиком - надо смотреть в .map-файле.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Scatter файл. Keil, STM32
СообщениеДобавлено: Пн сен 01, 2025 14:35:20 
Родился

Зарегистрирован: Вс авг 31, 2025 17:10:30
Сообщений: 4
Рейтинг сообщения: 0
[/uquote]Это регион адресов, по которым этот код/данные будет виден вашей программе.

Не совсем понял этот момент

Добавлено after 3 minutes 27 seconds:
Какой можно пример привести?
Думаю так до меня дойдет возможно)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Scatter файл. Keil, STM32
СообщениеДобавлено: Пн сен 01, 2025 14:52:38 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 181
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1578
Рейтинг сообщения: 0
Какой можно пример привести?
Думаю так до меня дойдет возможно)
Вызов функции:
Код:
CALL func
В точке входа функции func() в регистре PC будет находиться именно исполнительный адрес функции func() и никакой другой. А в регистре LR - опять же исполнительный адрес команды, следующей за CALL func.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Scatter файл. Keil, STM32
СообщениеДобавлено: Ср сен 03, 2025 15:41:57 
Родился

Зарегистрирован: Вс авг 31, 2025 17:10:30
Сообщений: 4
Рейтинг сообщения: 0
jcxz благодарю за ответы.

Я разобрался! Поясню, вдруг кому понадобится.
Проще говоря регион загрузки, это область где прошивка(а конкретно указанные данные, находящиеся в теле LR_IROM1) буду располагать физически, по указанном нами адресу.
Область выполнения - где, указанные нами данные/код, будет выполняться. Например если мы выбрали область выполнения из RAM, то после сброса, данные, указанные в теле области выполнения(RW_IRAM1) будут скопированы в RAM, и при их использовании они будут считываться/записывать из RAM, а не из flash(хотя во flash они тоже хранятся).


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y