Заголовок сообщения: Re: Распределение оперативной памяти в STM32
Добавлено: Пт авг 24, 2018 16:46:29
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Тема создана не мной, вопрос задан не лично Вам, никто не заставляет Вас на него отвечать, тем более отвечать, но не на него, а на что-то другое. Ответ на вопрос зачем дефолтное значение SP не конце памяти отсутствует. Вопрос четкий и однозначный, как и положено для точных технических предметов для обсуждения . Никто не спрашивал, а можно ли его по другому инициализировать, или как писать скрипт линкера или еще какой-то вопрос. Такой вопрос понятен даже "ардуинщуку" (никогда не пробовал это, но и не считаю чем-то плохим) и подразумевает четкий ответ, тут вроде не философский форум.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Я считаю, что если стек улетит ниже начала памяти, то программа сразу обрушится и вы это точно заметите. В отличии от случая когда он будет бить по своей памяти.
Заголовок сообщения: Re: Распределение оперативной памяти в STM32
Добавлено: Пт авг 24, 2018 17:58:30
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
VladislavS писал(а):
В отличии от случая когда он будет бить по своей памяти.
Я не понял этот тезис. Имеете ввиду что стек уйдет в никем не за декларированную память? Можно считать что у Вас просто стэк больше по факту, чем заявлен.
VladislavS писал(а):
сразу обрушится и вы это точно заметите.
К сожалению это не факт и сбой этот может происходить один раз в году и это при наличии например 50% свободной памяти. Конечно прогая на ассме легко посчитать нужный размер стэка, как это сделать на ЯВУ, кроме интуиции я не знаю. Можно попробовать конечно в каких-то глубоких подпрограммах считать SP, но и это ничего значить не будет. Неисповедимы пути компилятора.
Поэтому по-мне, самое разумное отдать по стек, всю оставшуюся память, так как только ее необходимые размеры трудно установить, в отличии от других однозначных секций памяти. Что и сделано, как оказалось по умолчанию в EmBitz.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Думаю был бы более уместным пример с RTOS где свой стек на каждую задачу.
для RTOS распределение "стеков" задач и распределение стека вообще - разные вещи. С точки зрения нужд самой ОС стек один, а отдельные стеки под задачи распределяет уже ОС - это вот никак не вопрос компилятора и/или линкера. Даже странно, что вы об этом упомянули, а большой дядя ничтоже сумняшеся согласился.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Распределение оперативной памяти в STM32
Добавлено: Пт авг 24, 2018 18:52:28
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
VladislavS писал(а):
Ниже чем ОЗУ
Надо поглядеть, если это вызовет исключение, то мысля здравая. Вот только по умолчанию стек не первый, а сразу после всех секций и потом пустое, заброшенное и никому не нужное целое поле оперативки .
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Наличие такого вектора может помочь в отладке сложных приложений. Но что-то мне подсказывает, что далеко не у всех МК это есть. По-моему, модуль аппаратного контроля областей памяти (не знаю, как оно правильно зовется) только в "старших" АРМах есть...
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Заголовок сообщения: Re: Распределение оперативной памяти в STM32
Добавлено: Пт авг 24, 2018 19:38:35
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
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.
Надо покурить НТД и попробовать...
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Z_h_e, меня особенно прикололо , что крайне неудачную поделку с устаревшим гнутым компилем здесь превозносят как постулат истины. Ну ладно Мурик уверовал, но остальные то- общий маразм?
Я считаю, что если стек улетит ниже начала памяти, то программа сразу обрушится
Для этого нужно разместить стек в начале ОЗУ, а за ним все остальное. Тогда стек сможет не затирая остальных данных выйти за пределы ОЗУ. Что при этом произойдет не проверял, но вероятно HardFault.
ARV писал(а):
для RTOS распределение "стеков" задач и распределение стека вообще - разные вещи. С точки зрения нужд самой ОС стек один, а отдельные стеки под задачи распределяет уже ОС - это вот никак не вопрос компилятора и/или линкера. Даже странно, что вы об этом упомянули, а большой дядя ничтоже сумняшеся согласился.
Упомянул как наиболее очевидный пример нескольких стеков. Вообще у каждой задачи свой стек и есть вероятность его переполнения с затиранием служебных данных задачи.
ARV писал(а):
В STM33 есть исключения по выходу за области памяти?
В STM33 не знаю, а в STM32 есть. При обращении у несуществующей области адресного пространства производится переход в прерывание HardFault. В STM32 адресное пространство составляет 4 ГБ в котором располагаются флеш, ОЗУ, регистры периферии и ядра и т. д. и в нем много свободного (неиспользуемого) места.
ARV писал(а):
Наличие такого вектора может помочь в отладке сложных приложений.
Заголовок сообщения: Re: Распределение оперативной памяти в STM32
Добавлено: Пт авг 24, 2018 20:00:06
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Цитата:
Z_h_e, меня особенно прикололо , что крайне неудачную поделку с устаревшим гнутым компилем здесь превозносят как постулат истины. Ну ладно Мурик уверовал, но остальные то- общий маразм?
Да я и не спорю что-то может быть и плохо. Только как-то никто не мотивирует почему. Какая-та фраза Портоса, плохо потому что плохо. Во что я уверовал? Я объяснил свою позицию, по-моему она достаточно понятна почему.
Добавлено after 9 minutes 6 seconds: Судя по RM и PM. В М0 уже нет таких исключений с памятью
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Сейчас этот форум просматривают: Муркиз и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения