|
|
  |
Распределение ОЗУ, в STM32F4 и FreeRTOS |
|
|
|
Oct 7 2016, 08:10
|
Местный
  
Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102

|
Цитата(Сергей Борщ @ Oct 7 2016, 08:28)  Что такое в вашем понимании "куча процессора" и где, по вашему мнению, она находится? В оперативной памяти выделяется некая область heap. Я программирую в Keil, поэтому для меня это значения в файле startup: Heap_Size - размер области и __heap_base - это видимо начальный адрес. То есть выделяется данная область в памяти, которая служит для динамического выделения памяти. Иными словами, объявляя переменную в программе я точно знаю, что в область heap она не попадет, а если я буду использовать malloc, то эта функция вернет мне адрес выделенной памяти из области heap (если конечно я не запрошу выделить памяти больше, чем эта область)
|
|
|
|
|
Oct 7 2016, 09:06
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 7 2016, 09:32
|
Местный
  
Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102

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

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 8 2016, 14:31
|
Местный
  
Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102

|
Цитата(zltigo @ Oct 7 2016, 18:23)  С какого бодуна требуется иметь две кучи? Что бы потерять возможность гибко делить память и увеличить дефрагментацию? Хотя все даже хуже - та которая "не RTOS" не используется в принципе, раз работает RTOS. Посему выбор ОДНОГО из менеджеров кучи предлагаемых в комлекте RTOS, или какого либо из стронних, например, того-же кейловского. Я так-же на этом форуме выкладывал свой менеджер кучи и объяснял причины его появления. У меня "общая куча" выделена во внешней SDRAM, чтобы можно было использовать стандартные функции выделения памяти. И конечно я не хочу чтобы RTOS туда лезла.
|
|
|
|
|
Oct 8 2016, 18:46
|
Местный
  
Группа: Участник
Сообщений: 491
Регистрация: 18-05-11
Пользователь №: 65 102

|
Цитата(zltigo @ Oct 8 2016, 18:40)  Это совершенно неразумное и ничем не объяснимое хотение иметь несколько куч для неконкретного использования. Почему? Одна большая куча с внешней SDRAM для больших блоков данных. И маленькая куча для RTOS с более быстрым доступом к памяти, которая не лезет в большую кучу и не фрагментирует ее.
|
|
|
|
|
Oct 8 2016, 21:16
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|