Распределение оперативной памяти в STM32
Поправить можно все что угодно. На вопрос Вы не ответили, хотя буквы написали.
- Реклама
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Может вам абдуриной заняться? Я сам не пробовал, но говорят там думать вообще не надо.
То есть ответить Вы не можете.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Тема создана не мной, вопрос задан не лично Вам, никто не заставляет Вас на него отвечать, тем более отвечать, но не на него, а на что-то другое. Ответ на вопрос зачем дефолтное значение SP не конце памяти отсутствует. Вопрос четкий и однозначный, как и положено для точных технических предметов для обсуждения . Никто не спрашивал, а можно ли его по другому инициализировать, или как писать скрипт линкера или еще какой-то вопрос. Такой вопрос понятен даже "ардуинщуку" (никогда не пробовал это, но и не считаю чем-то плохим) и подразумевает четкий ответ, тут вроде не философский форум.
- Реклама
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Я считаю, что если стек улетит ниже начала памяти, то программа сразу обрушится и вы это точно заметите. В отличии от случая когда он будет бить по своей памяти.
Я не понял этот тезис. Имеете ввиду что стек уйдет в никем не за декларированную память? Можно считать что у Вас просто стэк больше по факту, чем заявлен.VladislavS писал(а): В отличии от случая когда он будет бить по своей памяти.
К сожалению это не факт и сбой этот может происходить один раз в году и это при наличии например 50% свободной памяти.VladislavS писал(а):сразу обрушится и вы это точно заметите.
Конечно прогая на ассме легко посчитать нужный размер стэка, как это сделать на ЯВУ, кроме интуиции я не знаю. Можно попробовать конечно в каких-то глубоких подпрограммах считать SP, но и это ничего значить не будет. Неисповедимы пути компилятора.
Поэтому по-мне, самое разумное отдать по стек, всю оставшуюся память, так как только ее необходимые размеры трудно установить, в отличии от других однозначных секций памяти. Что и сделано, как оказалось по умолчанию в EmBitz.
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3442961#p3442961"]Имеете ввиду что стек уйдет в никем не за декларированную память? Можно считать что у Вас просто стэк больше по факту, чем заявлен.[/uquote]Ниже чем ОЗУ. Там пусто. Программе не сможет не упасть, если стек туда выйдет.
[uquote="Мурик",url="/forum/viewtopic.php?p=3442883#p3442883"]
Думаю был бы более уместным пример с RTOS где свой стек на каждую задачу.[/uquote]для RTOS распределение "стеков" задач и распределение стека вообще - разные вещи. С точки зрения нужд самой ОС стек один, а отдельные стеки под задачи распределяет уже ОС - это вот никак не вопрос компилятора и/или линкера. Даже странно, что вы об этом упомянули, а большой дядя ничтоже сумняшеся согласился.VladislavS писал(а):Вот, например, инициализация стеков ядра ARM926.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Надо поглядеть, если это вызовет исключение, то мысля здравая. Вот только по умолчанию стек не первый, а сразу после всех секций и потом пустое, заброшенное и никому не нужное целое поле оперативкиVladislavS писал(а):Ниже чем ОЗУ
В STM33 есть исключения по выходу за области памяти?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
По стеку не знаю, надо поглядеть. А так я улетал из-за ошибок с указателями.
Добавлено after 5 minutes 15 seconds:
Может попробую сейчас что-нибудь. А может не сейчас
Добавлено after 10 minutes 57 seconds:
Есть такой вектор в 103тьем
Щаз поковыряю программ мануал на ядро M3. Там должно про это быть расписюлено.
Добавлено after 5 minutes 15 seconds:
Может попробую сейчас что-нибудь. А может не сейчас
Добавлено after 10 minutes 57 seconds:
Есть такой вектор в 103тьем
Код: Выделить всё
0 MemManage Memory managementНаличие такого вектора может помочь в отладке сложных приложений. Но что-то мне подсказывает, что далеко не у всех МК это есть. По-моему, модуль аппаратного контроля областей памяти (не знаю, как оно правильно зовется) только в "старших" АРМах есть...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2567
- Зарегистрирован: Вт май 01, 2018 19:44:47
Исключение не обязательно. Достаточно возврата по 0xFFFFFFFF
И что это за хрень будет. А может будет не возврат, а порча каких-то данных?VladislavS писал(а):Исключение не обязательно. Достаточно возврата по 0xFFFFFFFF
Добавлено after 5 minutes 36 seconds:
Вот какой флаг есть в ядре M3. Помоему это то.
Код: Выделить всё
Bit 4MSTKERR: Memory manager fault on stacking for exception entry
When this bit is 1, the SP is still adjusted but the values in the context area on the stack might
be incorrect. The processor has not written a fault address to the MMAR.- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
Сумневающиеся, о отладке в RAM не забыли?
В эмоблитсе это нонсенс...
В эмоблитсе это нонсенс...
Вот когда перестают люди меряться письками, то могут возникнуть интересные идеи от совместных мыслей.
Добавлено after 1 minute 3 seconds:
Добавлено after 1 minute 3 seconds:
Я так пробовал и делал ряд научных и ненаучных опытов по скорости выполнения кода.dosikus писал(а):о отладке в RAM не забыли?
- Сообщения: 3604
- Зарегистрирован: Пн июл 28, 2008 22:12:01
Z_h_e, меня особенно прикололо , что крайне неудачную поделку с устаревшим гнутым компилем здесь превозносят как постулат истины. Ну ладно Мурик уверовал, но остальные то- общий маразм?
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Для этого нужно разместить стек в начале ОЗУ, а за ним все остальное. Тогда стек сможет не затирая остальных данных выйти за пределы ОЗУ. Что при этом произойдет не проверял, но вероятно HardFault.VladislavS писал(а):Я считаю, что если стек улетит ниже начала памяти, то программа сразу обрушится
Упомянул как наиболее очевидный пример нескольких стеков. Вообще у каждой задачи свой стек и есть вероятность его переполнения с затиранием служебных данных задачи.ARV писал(а):для RTOS распределение "стеков" задач и распределение стека вообще - разные вещи. С точки зрения нужд самой ОС стек один, а отдельные стеки под задачи распределяет уже ОС - это вот никак не вопрос компилятора и/или линкера. Даже странно, что вы об этом упомянули, а большой дядя ничтоже сумняшеся согласился.
В STM33 не знаю, а в STM32 есть. При обращении у несуществующей области адресного пространства производится переход в прерывание HardFault. В STM32 адресное пространство составляет 4 ГБ в котором располагаются флеш, ОЗУ, регистры периферии и ядра и т. д. и в нем много свободного (неиспользуемого) места.ARV писал(а):В STM33 есть исключения по выходу за области памяти?
Наличие отладчика в этом помогает. Можете посмотреть если хотите. http://purebasic.mybb.ru/viewtopic.php?id=564#p7599ARV писал(а):Наличие такого вектора может помочь в отладке сложных приложений.
В данном случае дело не в памяти, а в обращении к нереализованному адресу.ARV писал(а):По-моему, модуль аппаратного контроля областей памяти (не знаю, как оно правильно зовется) только в "старших" АРМах есть...
Есть такая галочка Execute from RAM в окне настроек отладчика.dosikus писал(а):Сумневающиеся, о отладке в RAM не забыли?
В эмоблитсе это нонсенс...
Спойлер

Последний раз редактировалось Мурик Пт авг 24, 2018 19:52:00, всего редактировалось 2 раза.
Да я и не спорю что-то может быть и плохо. Только как-то никто не мотивирует почему. Какая-та фраза Портоса, плохо потому что плохо.Z_h_e, меня особенно прикололо , что крайне неудачную поделку с устаревшим гнутым компилем здесь превозносят как постулат истины. Ну ладно Мурик уверовал, но остальные то- общий маразм?
Во что я уверовал? Я объяснил свою позицию, по-моему она достаточно понятна почему.
Добавлено after 9 minutes 6 seconds:
Судя по RM и PM. В М0 уже нет таких исключений с памятью



