Организация памяти STM
-
maksimdag0
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Чт апр 08, 2021 09:46:48
Организация памяти STM
Всем привет! Сейчас изучаю организацию памяти микроконтроллеров (на примере STM32F401ccu6). Не совсем могу понять, почему в даташите начальный и конечный адрес памяти является: 0x00000000 - 0xFFFFFFFF. Почему такое представление указано в даташит, ведь память МК 256 Kbytes?
В интернете сказано, что размер памяти определяется шиной, здесь она 32 битная, и логично предположить, что именно поэтому такая адресация в даташите указана (0x00000000 - 0xFFFFFFFF), но все же остаются вопросы, неиспользуемые блоки, они фзически существуют, если нет, зачем их указывают в даташит?
Что значит зарезервированная память, она есть, но ее не используют? Или физически памяти нет, но есть место для нее?
В интернете сказано, что размер памяти определяется шиной, здесь она 32 битная, и логично предположить, что именно поэтому такая адресация в даташите указана (0x00000000 - 0xFFFFFFFF), но все же остаются вопросы, неиспользуемые блоки, они фзически существуют, если нет, зачем их указывают в даташит?
Что значит зарезервированная память, она есть, но ее не используют? Или физически памяти нет, но есть место для нее?
- Реклама
Re: Организация памяти STM
потому-что в документации указана вся память в принципе, а вы имеете в виду флеш-память.
- >TEHb<
- Друг Кота
- Сообщения: 5742
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: Организация памяти STM
Не надо путать саму память и адресное пространство. Вот так вот, например, распределено пространство в 334 контроллере.

"Привет!" - соврал он.
Re: Организация памяти STM
если попробуете обратиться к адресам, которых физически нет в микроконтроллере, то получите что-то вроде bus error, у меня так было, когда я размер стека неправильно указал.
-
maksimdag0
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Чт апр 08, 2021 09:46:48
Re: Организация памяти STM
[uquote=">TEHb<",url="/forum/viewtopic.php?p=4321418#p4321418"]Не надо путать саму память и адресное пространство. Вот так вот, например, распределено пространство в 334 контроллере.
[/uquote]
Тогда получается, что я не правильно понимаю, что такое адресной пространство, можете объснить простыми словами пожалуйста?
я понял так, что адресной пространство, это зарезервированное, как бы, место, для памяти в других моделях, но мне кажется это бред.
Тогда получается, что я не правильно понимаю, что такое адресной пространство, можете объснить простыми словами пожалуйста?
я понял так, что адресной пространство, это зарезервированное, как бы, место, для памяти в других моделях, но мне кажется это бред.
- Реклама
Re: Организация памяти STM
есть такая штука, как адресная шина. в ARM она 32-битная, т.е. может адресовать 4 ГБ памяти. это и есть адресное пространство.
-
maksimdag0
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Чт апр 08, 2021 09:46:48
Re: Организация памяти STM
А почему тогда здесь пустота? (см. фото, указал стрелочками). Почему существующие блоки организованы не попорядка, например с адреса 0x00000000 и до 0x60000000, например?
Ведь память, она, по факту, одна, цельная, верно же?
Ведь память, она, по факту, одна, цельная, верно же?
- Вложения
-
- image_2022_11_16T12_30_02_803Z-1.png
- (104.47 КБ) 77 скачиваний
Re: Организация памяти STM
[uquote="maksimdag0",url="/forum/viewtopic.php?p=4321437#p4321437"]Ведь память, она, по факту, одна, цельная, верно же?[/uquote]
нет. очень часто она разбита на регионы. память это периферия. к каким адресам производиель прибьет эту периферию, там и будет висеть.
нет. очень часто она разбита на регионы. память это периферия. к каким адресам производиель прибьет эту периферию, там и будет висеть.
- >TEHb<
- Друг Кота
- Сообщения: 5742
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: Организация памяти STM
Ну типа дорога есть, адрес есть, а самого дома нет. Вот в городе и оставляют дырки чтобы если нужен квартал побольше, то не приходилось бы двигать все остальные дома.
Для совместимости внутри одного семейства это делается. Оператива, например, начинается в адреса 0х2000 0000 и её не волнует что там до неё, занято место или нет. Физически там что-то расположено или нет. Потому что удобно обращаться к оперативной памяти по этому адресу в любой модели STM32, а не выискивать адреса расположения каждый раз на каждую отдельную модель. Да и производить, подозреваю, так тоже проще.
Для совместимости внутри одного семейства это делается. Оператива, например, начинается в адреса 0х2000 0000 и её не волнует что там до неё, занято место или нет. Физически там что-то расположено или нет. Потому что удобно обращаться к оперативной памяти по этому адресу в любой модели STM32, а не выискивать адреса расположения каждый раз на каждую отдельную модель. Да и производить, подозреваю, так тоже проще.
"Привет!" - соврал он.
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Организация памяти STM
Ну и стоит напомнить автору, что адресное пространство таки байтное, а не 32-разрядное. То есть шаг адреса 32-разрядных слов равен 4.
Re: Организация памяти STM
А знаете, что произойдет при обращении по адресу нереализованного физически блока? Правильно, исключение 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 зовется.
Адресное пространство микроконтроллера следует понимать как почтовый адрес вашего дома, в котором живете, адрес вашей работы, адрес магазина. Что произойдет, если вы отправите посылку по адресу, которого нет физически в адресном пространстве города? Вот именно, почта скажет: "нет такого адреса, доставить невозможно".
Ну а память - она тоже не цельная. В общем адресном пространстве размером в 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 зовется.
Адресное пространство микроконтроллера следует понимать как почтовый адрес вашего дома, в котором живете, адрес вашей работы, адрес магазина. Что произойдет, если вы отправите посылку по адресу, которого нет физически в адресном пространстве города? Вот именно, почта скажет: "нет такого адреса, доставить невозможно".
Re: Организация памяти STM
и это хорошо, что будет исключение. А ведь что-то мне попадалось, где такого исключения не было... адресация отрабатывала просто тихо, без результата.
-
maksimdag0
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Чт апр 08, 2021 09:46:48
Re: Организация памяти STM
Довльно доступно обьяснили. Спасибо большое!
Добавлено 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]
Есть еще парочку вопросов. Что подразумевается под регионами? Регионы - это блоки в адресном пространстве? (см. фото)
Добавлено after 1 minute 39 seconds:
[uquote="MLX90640",url="/forum/viewtopic.php?p=4321544#p4321544"]А знаете, что произойдет при обращении по адресу нереализованного физически блока? Правильно, исключение Hard Fault.
.[/uquote]
Что значит исключение?
Добавлено 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]
Есть еще парочку вопросов. Что подразумевается под регионами? Регионы - это блоки в адресном пространстве? (см. фото)
Добавлено after 1 minute 39 seconds:
[uquote="MLX90640",url="/forum/viewtopic.php?p=4321544#p4321544"]А знаете, что произойдет при обращении по адресу нереализованного физически блока? Правильно, исключение Hard Fault.
.[/uquote]
Что значит исключение?
Re: Организация памяти STM
исключение - исключительная ситуация, ну то есть "катастрофа, всё пропало!". Дальнейшая работа микроконтроллера будет невозможна, он переходит в специальный режим и остается в нем до сброса. Физически - это прерывание, вызов обработчика прерывания HardFault_Handler(), который представляет собой бесконечный цикл.
И если Hard Fault вызван не явной ошибкой программиста, то в этом прерывании можно сгенерировать программный сброс и перезапуск микроконтроллера. Разумеется, если программист накосячил при написании кода, микроконтроллер снова войдет в эту ошибку.
И если Hard Fault вызван не явной ошибкой программиста, то в этом прерывании можно сгенерировать программный сброс и перезапуск микроконтроллера. Разумеется, если программист накосячил при написании кода, микроконтроллер снова войдет в эту ошибку.
-
maksimdag0
- Прорезались зубы
- Сообщения: 225
- Зарегистрирован: Чт апр 08, 2021 09:46:48
Re: Организация памяти STM
понял. спасибо!
- COKPOWEHEU
- Говорящий с текстолитом
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Re: Организация памяти STM
[uquote="MLX90640",url="/forum/viewtopic.php?p=4321544#p4321544"]А знаете, что произойдет при обращении по адресу нереализованного физически блока? Правильно, исключение Hard Fault.[/uquote]
Ой, все, что угодно произойти может.Я тут на GD32VF103 пытался поймать исключение доступа к памяти, так тот вообще подобного не умеет.Хочешь прочитать 32-битное слово с адреса 3? Пожалуйста. Хочешь с адреса 0xFFFFFFFF? На здоровье!
Правда он не ARM, а RISC-V (но в целом, чуть ли не 1 в 1 с STM32F103 скопирован), но все же иллюстрирует, что не всегда контроллеры падают в ошибку, иногда просто выполняют подобный код, как будто так и надо.
Те же операции вызова ядерного кода (в RISC-V это ecall, в ARM не знаю) используются ровно для того, чтобы сообщить ядру, что юзерский код хочет что-то выполнить с повышенными привилегиями. Не то чтобы в контроллерах это часто использовалось...
Ой, все, что угодно произойти может.Я тут на GD32VF103 пытался поймать исключение доступа к памяти, так тот вообще подобного не умеет.Хочешь прочитать 32-битное слово с адреса 3? Пожалуйста. Хочешь с адреса 0xFFFFFFFF? На здоровье!
Правда он не ARM, а RISC-V (но в целом, чуть ли не 1 в 1 с STM32F103 скопирован), но все же иллюстрирует, что не всегда контроллеры падают в ошибку, иногда просто выполняют подобный код, как будто так и надо.
Честно отнесет в указанное место, положит на землю и пойдет отчитываться о проделанной работе. Ну вы же хотели положить туда посылку? С чего бы почтальону задумываться о ваших мотивах.MLX90640 писал(а):Что произойдет, если вы отправите посылку по адресу, которого нет физически в адресном пространстве города?
По сути - прерывание, только вызванное не периферией, а самим ядром. Деление на ноль, попытка выполнить несуществующую инструкцию (например, 0xFFFFFFFF), доступ по невыровненному адресу (для 32-битных чисел адрес должен быть кратен 4, для 16-битных - 2, для 8-битных без разницы), выполнение специальных инструкций (может, помните из MS-DOS'а int 10h, int 33h - вот это примерно оно).maksimdag0 писал(а):Что значит исключение?
Ничего подобного. То же чтение по невыровненному адресу может просто тихо обрабатываться ядром - оно читает адрес, откуда пытались прочитать, само читает два соседних слова, склеивает их в одно, и возвращает в юзерский код, как будто так и надо. Я слышал, так некоторые линуксы делают.MLX90640 писал(а):исключение - исключительная ситуация, ну то есть "катастрофа, всё пропало!". Дальнейшая работа микроконтроллера будет невозможна
Те же операции вызова ядерного кода (в RISC-V это ecall, в ARM не знаю) используются ровно для того, чтобы сообщить ядру, что юзерский код хочет что-то выполнить с повышенными привилегиями. Не то чтобы в контроллерах это часто использовалось...
Re: Организация памяти STM
[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-ядра.
Добавлено 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-ядра.
Re: Организация памяти STM
Может, стоит вначале почитать контекст предыдущего поста, прежде чем писать столь длинный мессаг?
А "чуть дальше" - это куда? Точный адрес не подскажете? А то в точке "чуть дальше" уже может лежать вообще другая функция или вообще байты констант.и вернуться чуть дальше места fault-а
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: Организация памяти STM
Чуть дальше, это следующая за вызвавшей исключение инструкция. Стандартный отладочный способ обнаружить причину исключения.
- >TEHb<
- Друг Кота
- Сообщения: 5742
- Зарегистрирован: Ср ноя 11, 2009 17:19:30
- Откуда: Воронеж
- Контактная информация:
Re: Организация памяти STM
Вроде этот адрес в стек кладётся при переходе в прерывание.MLX90640 писал(а):Точный адрес не подскажете?
"Привет!" - соврал он.


