реклама на сайте
подробности

 
 
> Распределение ОЗУ, в STM32F4 и FreeRTOS
Atlantis-
сообщение Oct 6 2016, 12:52
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Здравствуйте!
Подскажите пожалуйста как распределяется оперативная память в STM32F4. Допустим есть 256 килобайт внутренней SRAM. От нее откусывается немного под стек, немного под кучу (для динамического выделения) и оставшаяся часть - для программных переменных. Все правильно?
Если используется FreeRTOS, то для нужд системы резервируется память под стек и кучу. Эта память берется из оставшейся внутренней памяти (грубо говоря, чем больше памяти под нужды RTOS, тем меньше можно объявить переменных)? Или эта память выделяется из кучи процессора?
На всякий случай скажу, что у меня применяется схема heap_4.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Oct 7 2016, 05:28
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Atlantis- @ Oct 6 2016, 15:52) *
Или эта память выделяется из кучи процессора?
Что такое в вашем понимании "куча процессора" и где, по вашему мнению, она находится?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Oct 7 2016, 08:10
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(Сергей Борщ @ Oct 7 2016, 08:28) *
Что такое в вашем понимании "куча процессора" и где, по вашему мнению, она находится?

В оперативной памяти выделяется некая область heap. Я программирую в Keil, поэтому для меня это значения в файле startup: Heap_Size - размер области и __heap_base - это видимо начальный адрес. То есть выделяется данная область в памяти, которая служит для динамического выделения памяти. Иными словами, объявляя переменную в программе я точно знаю, что в область heap она не попадет, а если я буду использовать malloc, то эта функция вернет мне адрес выделенной памяти из области heap (если конечно я не запрошу выделить памяти больше, чем эта область)
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 7 2016, 09:06
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Atlantis- @ Oct 7 2016, 11:10) *
В оперативной памяти выделяется некая область heap. Я программирую в Keil, поэтому для меня это значения в файле startup: Heap_Size - размер области и __heap_base - это видимо начальный адрес. То есть выделяется данная область в памяти, которая служит для динамического выделения памяти. Иными словами, объявляя переменную в программе я точно знаю, что в область heap она не попадет, а если я буду использовать malloc, то эта функция вернет мне адрес выделенной памяти из области heap (если конечно я не запрошу выделить памяти больше, чем эта область)

Пока Вы совершенно не понимаете, что творите, и произносите слова типа " из кучи процессора" и путать компиляторы с процессорами, возьмите просто обертку над тем malloc, который находтся в кейловских библиотеках. Обертки находятся в одном из вариантов heap_x из компелкта поставки FreeRTOS. Потом, когда нибудь, научитесь под heap просто отдавать ВСЮ свободную память.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Oct 7 2016, 09:32
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102



Цитата(zltigo @ Oct 7 2016, 12:06) *
Пока Вы совершенно не понимаете, что творите, и произносите слова типа " из кучи процессора" и путать компиляторы с процессорами

я просто хотел разделить две кучи, имея ввиду, что у RTOS она своя
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 7 2016, 15:23
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Atlantis- @ Oct 7 2016, 12:32) *
я просто хотел разделить две кучи, имея ввиду, что у RTOS она своя

С какого бодуна требуется иметь две кучи? Что бы потерять возможность гибко делить память и увеличить дефрагментацию? Хотя все даже хуже - та которая "не RTOS" не используется в принципе, раз работает RTOS. Посему выбор ОДНОГО из менеджеров кучи предлагаемых в комлекте RTOS, или какого либо из стронних, например, того-же кейловского. Я так-же на этом форуме выкладывал свой менеджер кучи и объяснял причины его появления.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st August 2025 - 20:18
Рейтинг@Mail.ru


Страница сгенерированна за 0.01424 секунд с 7
ELECTRONIX ©2004-2016