Организация памяти STM

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

Организация памяти STM

Сообщение maksimdag0 »

Всем привет! Сейчас изучаю организацию памяти микроконтроллеров (на примере STM32F401ccu6). Не совсем могу понять, почему в даташите начальный и конечный адрес памяти является: 0x00000000 - 0xFFFFFFFF. Почему такое представление указано в даташит, ведь память МК 256 Kbytes?
В интернете сказано, что размер памяти определяется шиной, здесь она 32 битная, и логично предположить, что именно поэтому такая адресация в даташите указана (0x00000000 - 0xFFFFFFFF), но все же остаются вопросы, неиспользуемые блоки, они фзически существуют, если нет, зачем их указывают в даташит?
Что значит зарезервированная память, она есть, но ее не используют? Или физически памяти нет, но есть место для нее?
image_2022_11_16T11_45_14_555Z-1.png
(72.5 КБ) 117 скачиваний
Реклама
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: Организация памяти STM

Сообщение JackSmith »

потому-что в документации указана вся память в принципе, а вы имеете в виду флеш-память.
Реклама
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5742
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Организация памяти STM

Сообщение >TEHb< »

Не надо путать саму память и адресное пространство. Вот так вот, например, распределено пространство в 334 контроллере.
Изображение
"Привет!" - соврал он.
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: Организация памяти STM

Сообщение JackSmith »

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

Re: Организация памяти STM

Сообщение maksimdag0 »

[uquote=">TEHb<",url="/forum/viewtopic.php?p=4321418#p4321418"]Не надо путать саму память и адресное пространство. Вот так вот, например, распределено пространство в 334 контроллере.
Изображение[/uquote]
Тогда получается, что я не правильно понимаю, что такое адресной пространство, можете объснить простыми словами пожалуйста?
я понял так, что адресной пространство, это зарезервированное, как бы, место, для памяти в других моделях, но мне кажется это бред.
Реклама
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: Организация памяти STM

Сообщение JackSmith »

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

Re: Организация памяти STM

Сообщение maksimdag0 »

А почему тогда здесь пустота? (см. фото, указал стрелочками). Почему существующие блоки организованы не попорядка, например с адреса 0x00000000 и до 0x60000000, например?
Ведь память, она, по факту, одна, цельная, верно же?
Вложения
image_2022_11_16T12_30_02_803Z-1.png
(104.47 КБ) 77 скачиваний
Аватара пользователя
JackSmith
Потрогал лапой паяльник
Сообщения: 332
Зарегистрирован: Ср мар 09, 2016 08:07:41

Re: Организация памяти STM

Сообщение JackSmith »

[uquote="maksimdag0",url="/forum/viewtopic.php?p=4321437#p4321437"]Ведь память, она, по факту, одна, цельная, верно же?[/uquote]
нет. очень часто она разбита на регионы. память это периферия. к каким адресам производиель прибьет эту периферию, там и будет висеть.
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5742
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Организация памяти STM

Сообщение >TEHb< »

Ну типа дорога есть, адрес есть, а самого дома нет. Вот в городе и оставляют дырки чтобы если нужен квартал побольше, то не приходилось бы двигать все остальные дома.
Для совместимости внутри одного семейства это делается. Оператива, например, начинается в адреса 0х2000 0000 и её не волнует что там до неё, занято место или нет. Физически там что-то расположено или нет. Потому что удобно обращаться к оперативной памяти по этому адресу в любой модели STM32, а не выискивать адреса расположения каждый раз на каждую отдельную модель. Да и производить, подозреваю, так тоже проще.
"Привет!" - соврал он.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Организация памяти STM

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

Ну и стоит напомнить автору, что адресное пространство таки байтное, а не 32-разрядное. То есть шаг адреса 32-разрядных слов равен 4.
Аватара пользователя
MLX90640
Опытный кот
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Re: Организация памяти STM

Сообщение MLX90640 »

А знаете, что произойдет при обращении по адресу нереализованного физически блока? Правильно, исключение Hard Fault.
Ну а память - она тоже не цельная. В общем адресном пространстве размером в 4 гига размещаются и флеш, и несколько блоков ОЗУ, и все адреса регистров периферии типа GPIO, SPI, и даже внешняя память SDRAM, NAND Flash...
Адреса SRAM находятся в диапазоне 0x2000'0000 - 0x2001'0000, адреса флеш-памяти в диапазоне 0x0800'0000 - 0x08004'0000, адрес GPIOA - 0x4002'0000. В референс-мануале есть еще одна табличка, STM32F401xB/C and STM32F401xD/E register boundary addresses зовется.

Адресное пространство микроконтроллера следует понимать как почтовый адрес вашего дома, в котором живете, адрес вашей работы, адрес магазина. Что произойдет, если вы отправите посылку по адресу, которого нет физически в адресном пространстве города? Вот именно, почта скажет: "нет такого адреса, доставить невозможно".
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Организация памяти STM

Сообщение Martian »

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

Re: Организация памяти STM

Сообщение maksimdag0 »

Довльно доступно обьяснили. Спасибо большое!

Добавлено after 3 minutes 56 seconds:
[uquote="JackSmith",url="/forum/viewtopic.php?p=4321442#p4321442"][uquote="maksimdag0",url="/forum/viewtopic.php?p=4321437#p4321437"]Ведь память, она, по факту, одна, цельная, верно же?[/uquote]
нет. очень часто она разбита на регионы. память это периферия. к каким адресам производиель прибьет эту периферию, там и будет висеть.[/uquote]
Есть еще парочку вопросов. Что подразумевается под регионами? Регионы - это блоки в адресном пространстве? (см. фото
Screenshot_1.png
(71.23 КБ) 83 скачивания
)

Добавлено after 1 minute 39 seconds:
[uquote="MLX90640",url="/forum/viewtopic.php?p=4321544#p4321544"]А знаете, что произойдет при обращении по адресу нереализованного физически блока? Правильно, исключение Hard Fault.
.[/uquote]
Что значит исключение?
Аватара пользователя
MLX90640
Опытный кот
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Re: Организация памяти STM

Сообщение MLX90640 »

исключение - исключительная ситуация, ну то есть "катастрофа, всё пропало!". Дальнейшая работа микроконтроллера будет невозможна, он переходит в специальный режим и остается в нем до сброса. Физически - это прерывание, вызов обработчика прерывания HardFault_Handler(), который представляет собой бесконечный цикл.
И если Hard Fault вызван не явной ошибкой программиста, то в этом прерывании можно сгенерировать программный сброс и перезапуск микроконтроллера. Разумеется, если программист накосячил при написании кода, микроконтроллер снова войдет в эту ошибку.
maksimdag0
Прорезались зубы
Сообщения: 225
Зарегистрирован: Чт апр 08, 2021 09:46:48

Re: Организация памяти STM

Сообщение maksimdag0 »

понял. спасибо!
Аватара пользователя
COKPOWEHEU
Говорящий с текстолитом
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Re: Организация памяти STM

Сообщение COKPOWEHEU »

[uquote="MLX90640",url="/forum/viewtopic.php?p=4321544#p4321544"]А знаете, что произойдет при обращении по адресу нереализованного физически блока? Правильно, исключение Hard Fault.[/uquote]
Ой, все, что угодно произойти может.Я тут на GD32VF103 пытался поймать исключение доступа к памяти, так тот вообще подобного не умеет.Хочешь прочитать 32-битное слово с адреса 3? Пожалуйста. Хочешь с адреса 0xFFFFFFFF? На здоровье!
Правда он не ARM, а RISC-V (но в целом, чуть ли не 1 в 1 с STM32F103 скопирован), но все же иллюстрирует, что не всегда контроллеры падают в ошибку, иногда просто выполняют подобный код, как будто так и надо.
MLX90640 писал(а):Что произойдет, если вы отправите посылку по адресу, которого нет физически в адресном пространстве города?
Честно отнесет в указанное место, положит на землю и пойдет отчитываться о проделанной работе. Ну вы же хотели положить туда посылку? С чего бы почтальону задумываться о ваших мотивах.
maksimdag0 писал(а):Что значит исключение?
По сути - прерывание, только вызванное не периферией, а самим ядром. Деление на ноль, попытка выполнить несуществующую инструкцию (например, 0xFFFFFFFF), доступ по невыровненному адресу (для 32-битных чисел адрес должен быть кратен 4, для 16-битных - 2, для 8-битных без разницы), выполнение специальных инструкций (может, помните из MS-DOS'а int 10h, int 33h - вот это примерно оно).
MLX90640 писал(а):исключение - исключительная ситуация, ну то есть "катастрофа, всё пропало!". Дальнейшая работа микроконтроллера будет невозможна
Ничего подобного. То же чтение по невыровненному адресу может просто тихо обрабатываться ядром - оно читает адрес, откуда пытались прочитать, само читает два соседних слова, склеивает их в одно, и возвращает в юзерский код, как будто так и надо. Я слышал, так некоторые линуксы делают.
Те же операции вызова ядерного кода (в RISC-V это ecall, в ARM не знаю) используются ровно для того, чтобы сообщить ядру, что юзерский код хочет что-то выполнить с повышенными привилегиями. Не то чтобы в контроллерах это часто использовалось...
jcxz
Мудрый кот
Сообщения: 1717
Зарегистрирован: Вт авг 15, 2017 10:51:13

Re: Организация памяти STM

Сообщение jcxz »

[uquote="JackSmith",url="/forum/viewtopic.php?p=4321424#p4321424"]если попробуете обратиться к адресам, которых физически нет в микроконтроллере, то получите что-то вроде bus error[/uquote]Не факт.

Добавлено after 6 minutes 58 seconds:
[uquote="MLX90640",url="/forum/viewtopic.php?p=4321544#p4321544"]А знаете, что произойдет при обращении по адресу нереализованного физически блока? Правильно, исключение Hard Fault.[/uquote]Опять не факт.

Добавлено after 13 minutes 38 seconds:
[uquote="MLX90640",url="/forum/viewtopic.php?p=4321680#p4321680"]И если Hard Fault вызван не явной ошибкой программиста, то в этом прерывании можно сгенерировать программный сброс и перезапуск микроконтроллера.[/uquote]Можно делать что угодно. Не обязательно сброс. Как в любом другом обработчике. Т.е. - выполнить некую работу и вернуться чуть дальше места fault-а.
Например: на BusFault или MpuFault можно сделать эмуляцию виртуальной памяти.
Также на MpuFault можно организовать защиту отдельных областей программной памяти. Или отлавливать ошибки разрушения памяти (вызванные багами).
А на UsageFault - так и вообще раздолье:
UsageFault деления 0 - эмулировать спец.поведение при делении на 0;
UsageFault несуществующей или запрещённой команды - сделать программную её эмуляцию;
UsageFault невыровненного доступа (там где ядро его не умеет) - опять же программно эмулировать невыровненный доступ.

Добавлено after 9 minutes 9 seconds:
[uquote="MLX90640",url="/forum/viewtopic.php?p=4321680#p4321680"]исключение - исключительная ситуация, ну то есть "катастрофа, всё пропало!".[/uquote]Ничего подобного! Видимо вы никогда не слышали о SysTick-таймере или PendSV (для вызова context switch в OS) или об SVC (предназначенном для реализации системных вызовов и переключения из непривилегированного кода в привилегированный).
Стоит почитать мануал на Cortex-M-ядра. :dont_know:
Аватара пользователя
MLX90640
Опытный кот
Сообщения: 848
Зарегистрирован: Ср авг 03, 2022 05:22:56

Re: Организация памяти STM

Сообщение MLX90640 »

Может, стоит вначале почитать контекст предыдущего поста, прежде чем писать столь длинный мессаг?
и вернуться чуть дальше места fault-а
А "чуть дальше" - это куда? Точный адрес не подскажете? А то в точке "чуть дальше" уже может лежать вообще другая функция или вообще байты констант.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Организация памяти STM

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

Чуть дальше, это следующая за вызвавшей исключение инструкция. Стандартный отладочный способ обнаружить причину исключения.
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5742
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Организация памяти STM

Сообщение >TEHb< »

MLX90640 писал(а):Точный адрес не подскажете?
Вроде этот адрес в стек кладётся при переходе в прерывание.
"Привет!" - соврал он.
Ответить

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