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

 
 
> Кто какую реализацию использует для распределения памяти на cortex?
Beginning
сообщение Jun 19 2012, 13:48
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053



Проще говоря вы используете malloc и т.п. из библиотеки или свои? Я вот FreeRTOS изучаю. Решил досконально изучить исходники (heap_2). Честно говоря это треш какой то. Конечно как кому, но для меня такой стиль писания... Все эти x,px и и т.д. километровые имена. Принцип бритвы Оккамы походу не известен разработчикам. Пока всю эту дибилистику не убрал постоянно терялся на середине алгоритма. Как там, мозг не может запомнить одновременно более 7 переменных величин. Но да ладно не об этом. Вобщем мне не понравилась такая реализация - нету дефрагментации кучи. Взял стандартные библиотечные (KEIL RVDS). Но их тоже оказывается 2 реализации http://www.keil.com/support/man/docs/armli...ib_Cihfiabf.htm
Как они толком работают, не поймешь - исходников я не нашёл.
Вобщем кто какой реализацией пользуется? Может кто исходниками поделится. Камень Cortex.


--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
brag
сообщение Jun 21 2012, 09:58
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 047
Регистрация: 2-12-06
Из: Kyiv, Ukraine
Пользователь №: 23 046



Цитата
Я уже писал про **p. Придётся везде лепить. А потом начнётся ***p и т. д.

к тому же перегруженные, а возможно и volatile - защищать это все дело надо будет в многопоточном приложении...

Цитата
GlobalUnlock. Ранее полученный указатель стал недействительным. Когда блок отпущен он можен быть сдвинут. Чтобы ещё раз добраться до блока нужно ещё раз вызвать GlobalLock.

Ну да, было дело wink.gif Вероятность схватить Deadlock резко возрастает и тормоза в том числе. в 21 веке никто так не делает...

Цитата
Ну и как эта система, себя оправдала?

а как себя оправдала Windows 3.1 16-bit? :D

Цитата
Если после генерации сообщения поток блокируется....
Если после генерации сообщения поток блокируется...

Это убивает прелесть многопоточности и "естетственности" программы. весь смысл прогонки обьекта по нескольким потокам - избавится от гемора, избавится от локов, упростить программу. попишу немного букавок в качестве примера.
Есть GSM модуль, протокол CMUX - 2 канала GSM & GPRS. Каждий канал обрабатывается только своим потоком.
Допустим GSM опрашівает состояние модуля, что-то там куда-то логирует и принимает и отправляет SMS. В SMS приходят команды. Допустим, пришла команда загрузить какой-то файл s ftp://ftp.murzilka.ru/01.zip. GSM формирует обьект-сообщение и кидает в очередь. GPRS по мере готовности выгребает сообщение и выполняет. в конце кидает его обратно в очередь(вернее само сообщение себя кидает и меняет состояние, эт уже детали реализации иерархии классов) и занимается дальше своими делами.
GSM по мере готовности выгребает сообщение и выполняет(отправляет SMS с отчетом о загрузке файла).
Конечно, можно было лочить каналы(довольно медленные) и делать все действия на месте(не отходя от кассы), но в сложном приложении(в том,которое есть на самом деле, все гораздо сложнее) запаритесь потом и система будет простаивать.на пример, чтобы прочитать следующую смс(вообще не относящуюся к командам связанным с GPRS) или снять следующее состояние модема надо будет ждать, пока тормознутый GPRS что-то там обработает минут так 10-15:))

Цитата
Если есть куча, то система работоспособна. Разумеется память используется по очереди.

Ну чтобы по очереди использовалось нужно это синхронизировать,а это не всегда уследишь на сложном проекте. если не синхронизировать - как уже було сказано в моей теме про кучу: если каждому потоку вероятно понадобится по 100 байт стека, то при реализации на куче и куча должна быть 200 байт(+ оверхед на заголовки):
Цитата
Раз у вас не хватает памяти чтобы распределить её в виде static или на стеке для всех потоков, значит возможна ситуация (и даже с большей вероятностью), когда много потоков запросит больше памяти чем есть. С наличием служебных полей управления блоками в heap и фрагментации это даже более вероятно, чем при static размещении.
Что ваша система должна делать при этом? Выдать отказ потоку (но значит алгоритм всех потоков должен рассчитывать, что может быть получен отказ в памяти)? Или приостановить выполнение потока (но может случиться dead-lock)?
Go to the top of the page
 
+Quote Post
maksimp
сообщение Jun 21 2012, 19:13
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 313
Регистрация: 2-07-11
Пользователь №: 66 023



Цитата(brag @ Jun 21 2012, 13:58) *
Цитата
GlobalUnlock. Ранее полученный указатель стал недействительным. Когда блок отпущен он можен быть сдвинут. Чтобы ещё раз добраться до блока нужно ещё раз вызвать GlobalLock.

Ну да, было дело wink.gif Вероятность схватить Deadlock резко возрастает и тормоза в том числе.

Deadlock - вряд ли. Так как GlobalLock не предоставляет блок в исключительное пользование одному процессу. Много процессов могут вызвать GlobalLock для одного и того же блока одновременно - и получат успешно в ответ один и тот же указатель. GlobalLock блокирует только перемещение блока при дефрагментации.
Цитата(brag @ Jun 21 2012, 13:58) *
а как себя оправдала Windows 3.1 16-bit? :D

Вещь! была для своего времени. Впрочем эта система выделения памяти была действительно актуальна только до Windows 3.0 включительно, на процессоре 8086. Windows 3.1 на таком процессоре уже не могла работать.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Beginning   Кто какую реализацию использует для распределения памяти на cortex?   Jun 19 2012, 13:48
- - shmur   Пользуемся tlsf, пока всем устраивает.   Jun 19 2012, 13:59
- - Сергей Борщ   Имени zltigo. И на Cortex и на ARM7   Jun 19 2012, 14:34
- - Beginning   Блин, нашёл тему близнец тыц Можно склеить.   Jun 19 2012, 14:51
- - IgorKossak   Склеил бы, да руки не достают. Тем более, что здес...   Jun 19 2012, 17:11
- - brag   Вот и моя близняшка http://electronix.ru/forum/ind...   Jun 19 2012, 22:28
- - Beginning   Я тут немного поразмыслил и пришел к выводу что де...   Jun 20 2012, 07:18
|- - scifi   Цитата(Beginning @ Jun 20 2012, 11:18) Ес...   Jun 20 2012, 07:29
- - Beginning   Картина собственно ясна. А теперь вопрос. Стоит ли...   Jun 20 2012, 07:40
|- - jcxz   Цитата(Beginning @ Jun 20 2012, 13:40) Ка...   Jun 20 2012, 09:13
- - brag   Забудьте про дефраг. Дефрагментация уместна только...   Jun 20 2012, 09:40
- - _Pasha   Если Вы можете выделить сколь-нибудь детерминирова...   Jun 20 2012, 11:43
- - Beginning   Я уже писал про **p. Придётся везде лепить. А пото...   Jun 20 2012, 12:05
|- - maksimp   Практическая реализация дефрагментации без аппарат...   Jun 20 2012, 17:19
- - Beginning   Я так понимаю это компромис. Зарезервировал память...   Jun 20 2012, 18:35
|- - aaarrr   Цитата(Beginning @ Jun 20 2012, 22:35) По...   Jun 20 2012, 18:37
|- - maksimp   Цитата(Beginning @ Jun 20 2012, 22:35) За...   Jun 21 2012, 04:10
- - Beginning   Не ну я прикидывал, мол если например кусок не раз...   Jun 20 2012, 19:12
|- - _Pasha   Цитата(Beginning @ Jun 20 2012, 22:12) Не...   Jun 20 2012, 20:21
- - Beginning   Ну хотябы, если дефрагментация началась, то её уже...   Jun 20 2012, 20:35
|- - _Pasha   Цитата(Beginning @ Jun 20 2012, 23:35) Ну...   Jun 21 2012, 05:12
- - Beginning   Наверняка так и есть. Но по поводу этого я не силь...   Jun 21 2012, 06:16
- - _Pasha   Цитата(Beginning @ Jun 21 2012, 09:16) Пр...   Jun 21 2012, 07:39
- - Beginning   Я не очень понимаю выражения "не использовать...   Jun 21 2012, 08:30
|- - _Pasha   Цитата(Beginning @ Jun 21 2012, 11:30) Я ...   Jun 21 2012, 09:22
|- - jcxz   Цитата(Beginning @ Jun 21 2012, 14:30) Я ...   Jun 22 2012, 02:45
|- - Axel   Цитата(jcxz @ Jun 22 2012, 05:45) Поэтому...   Jun 22 2012, 13:39
- - Beginning   Ну тут я вижу потенциальную проблему. Допустим пам...   Jun 21 2012, 09:33
- - brag   ЦитатаDeadlock - вряд ли. легко: Поток 1 занял взя...   Jun 21 2012, 22:53
- - brag   Полностью согласен с jcxz, сам прорабатывал возмож...   Jun 22 2012, 11:36
- - brag   Цитатанесколькими альтернативными режимами в моей ...   Jun 22 2012, 17:23
|- - Axel   Цитата(brag @ Jun 22 2012, 20:23) ...и pl...   Jun 23 2012, 06:33
- - brag   практически да. только в моем случаи размер пула о...   Jun 23 2012, 07:43
|- - Axel   Цитата(brag @ Jun 23 2012, 10:43) ...разм...   Jun 24 2012, 04:01
|- - ReAl   Цитата(Axel @ Jun 24 2012, 07:01) А как В...   Jun 24 2012, 06:47
|- - Axel   Цитата(ReAl @ Jun 24 2012, 09:47) Можно и...   Jun 24 2012, 07:45
- - brag   Тогда уж красивее так вроде, зачем лишний макро? И...   Jun 24 2012, 09:10
- - ReAl   Ага, щас. Заменяем (так быстрее, чем union редакти...   Jun 24 2012, 12:30


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 16:28
Рейтинг@Mail.ru


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