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

 
 
 
Reply to this topicStart new topic
> Распределение ОЗУ, в 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
jcxz
сообщение Oct 7 2016, 04:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Всю память распределяете Вы сами посредством командного файла компоновщика. В IAR, например, это icf-файл.
При компиляции кода (хоть ОС хоть любого) создаётся набор сегментов данных, располжение которых в памяти и задаётся этим командным файлом компоновщика.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 7 2016, 05:28
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 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
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 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
HardEgor
сообщение Oct 7 2016, 16:03
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 223
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(Atlantis- @ Oct 6 2016, 19:52) *
Подскажите пожалуйста как распределяется оперативная память в STM32F4. Допустим есть 256 килобайт внутренней SRAM. От нее откусывается немного под стек, немного под кучу (для динамического выделения) и оставшаяся часть - для программных переменных. Все правильно?

Вначале посмотрите создаваемый при сборке программы .map файл, там всё распределение памяти описано.
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Oct 8 2016, 14:31
Сообщение #9


Местный
***

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



Цитата(zltigo @ Oct 7 2016, 18:23) *
С какого бодуна требуется иметь две кучи? Что бы потерять возможность гибко делить память и увеличить дефрагментацию? Хотя все даже хуже - та которая "не RTOS" не используется в принципе, раз работает RTOS. Посему выбор ОДНОГО из менеджеров кучи предлагаемых в комлекте RTOS, или какого либо из стронних, например, того-же кейловского. Я так-же на этом форуме выкладывал свой менеджер кучи и объяснял причины его появления.

У меня "общая куча" выделена во внешней SDRAM, чтобы можно было использовать стандартные функции выделения памяти. И конечно я не хочу чтобы RTOS туда лезла.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 8 2016, 15:40
Сообщение #10


Гуру
******

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



QUOTE (Atlantis- @ Oct 8 2016, 17:31) *
У меня "общая куча" выделена во внешней SDRAM, чтобы можно было использовать стандартные функции выделения памяти. И конечно я не хочу чтобы RTOS туда лезла.

Это совершенно неразумное и ничем не объяснимое хотение иметь несколько куч для неконкретного использования.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Atlantis-
сообщение Oct 8 2016, 18:46
Сообщение #11


Местный
***

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



Цитата(zltigo @ Oct 8 2016, 18:40) *
Это совершенно неразумное и ничем не объяснимое хотение иметь несколько куч для неконкретного использования.

Почему? Одна большая куча с внешней SDRAM для больших блоков данных. И маленькая куча для RTOS с более быстрым доступом к памяти, которая не лезет в большую кучу и не фрагментирует ее.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Oct 8 2016, 21:16
Сообщение #12


Гуру
******

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



QUOTE (Atlantis- @ Oct 8 2016, 21:46) *
Почему? Одна большая куча с внешней SDRAM для больших блоков данных. И маленькая куча для RTOS с более быстрым доступом к памяти, которая не лезет в большую кучу и не фрагментирует ее.

Если есть какие-то специфичные условия использования кучи, то тогда может быть и несколько куч - я специально сразу написал про неспецифичные. Про них Вы ранее не упоминали. Как Вы собираетесь использовать FreeRTOS что бы она угрожала фрагментацией? Если фрагментация действительно по объективным причинам не может быть минимизирована, или исключена, то последствия от дефрагментации тем меньше, чем больше куча и деление на несколько куч все только усугубляет.




--------------------
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 Текстовая версия Сейчас: 29th July 2025 - 22:29
Рейтинг@Mail.ru


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