|
Динамическое создание массивов и ошибки при работе с ними, Косяк, но не понимаю почему |
|
|
|
Jun 11 2009, 19:14
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Halfback @ Jun 11 2009, 19:47)  Поскольку malloc() аппаратно контроллером не поддерживается то создам статический буфер т.к. его размер и когда/кем будет использован знаю. Цитата(Halfback @ Jun 11 2009, 20:37)  кстати, решение проблемы нашел сам Сам? Значит, этого так таки и не читали: Цитата(sergeeff @ Jun 7 2009, 17:25)  Кстати о двойной буфферизации. А кто мешает второй буфер сделать статическим, если он уж очень нужен? Цитата(sergeeff @ Jun 7 2009, 19:52)  Похоже, что динамический массив в данной задачи на фиг не нужен, Цитата(singlskv @ Jun 7 2009, 23:20)  Забудьте как страшный сон попытки использовать динамическое распределение памяти на таких контроллерах, это возможно только с памятью ~8Kб+ хотя я например и на 32Кб стараюсь все в статике распределить. Цитата(defunct @ Jun 9 2009, 16:30)  Если знаете что там всегда 5 байт, то выделите себе 5 байт статически. мдя... Таки гоните. Причём нагло. Цитата(Halfback @ Jun 11 2009, 19:47)  Вопрос на счет "материализовался": почему когда создается куча то память отбирается у области ОЗУ где Hardware Stack а не, скажем, у Data Stack ? Почему так? Так навскидку - в используемом Вами инструментарии где-то задан размер стека данных. Стек данных просто пошёл на правах статически выделенного массива, а стеку управления было отдано всё, что осталось. После выделения памяти для кучи осталось меньше. Т.е. стек управления просто получает то, что осталось от всех остальных. Только вот думаю - был ли смысл отвечать, если аффтар "не читатель, а писатель"? И опять заявит, что Цитата(Halfback @ Jun 7 2009, 22:46)  Жаль что тут никто реальным советом не помог.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jun 11 2009, 20:50
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата На мой взгляд если говорить о динамической памяти, то она должна, как минимум поддерживать malloc/free. Именно об этом мы и говорим. И я конкретно. Только если мы говорим об AVR, то кроме этого практически ничего нет. То есть функциональность диспетчера нулевая. Если у меня будет "дырка", то он даже не вставит. Именно по этому некоторые присутствующие писали свой диспетчер и приводили его фрагменты на форуме. Например, zltigo. Тоже себе ставлю такую задачу, но это длительная работа. Желательно оценить надёжность работы перед активным применением, а времени не хватает.  Цитата( @ Jun 8 2009, 21:54)  Эффективность алгоритма - дело десятое. Важнее - функциональность. Тут коллеги приводят примеры, когда выделение/освобождение может вообще раз-другой и производится. С точки зрения программы, если не один раз - то дальше без разницы - 2,3... Если речь о функциональности. А если о эффективности, - тогда дело другое. Если рассматривать общий случай, то производительность системы будет падать, так как на работу с динамикой придётся затратить ресурсы. А вот с точки зрения эффективности потребления памяти - выигрыш может оказаться решающим. Особенно очевидным, является применение динамики там, где размер объектов, помещаемых на кучу, имеет переменное значение. Например станок с ЧПУ. Имеет 5 инструментов. Из внешнего источника подгружается прога с операциями. Операция может иметь много полей (одним сверлом - 10 отв). Я могу динамически размещать операцию и удалять по исполнению. А размещать для того, чтобы эффективней расчитать работу инструмента. Как и любую задачу в программировании, эту можно решить десятком способов. С применением динамики и без оного. Как кому удобно. Но если есть данный инструмент, то почему им нельзя пользоваться? Даже если без этого можно обойтись?
|
|
|
|
|
Jun 11 2009, 21:52
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(SasaVitebsk @ Jun 12 2009, 00:50)  Особенно очевидным, является применение динамики там, где размер объектов, помещаемых на кучу, имеет переменное значение. Например станок с ЧПУ. Имеет 5 инструментов. Из внешнего источника подгружается прога с операциями. Операция может иметь много полей (одним сверлом - 10 отв). Я могу динамически размещать операцию и удалять по исполнению. А размещать для того, чтобы эффективней расчитать работу инструмента. У Вас таки не динамическое распределение получается а нечто очень похожее на оверлеи, а это совсем другая задачка и там все(ну почти все) можно заранее предусмотреть(в статике) З.Ы. Собственно мое ИМХО заключается в том что это 2 совсем разные задачки - распределение(и возврат) памяти(по требованию) - распределение расположения данных в ранее распределенной памяти и у каждого способа есть свои + и - но для процов с маленькой памятью первого способа просто нет...
|
|
|
|
|
Jun 12 2009, 06:06
|
Местный
  
Группа: Участник
Сообщений: 322
Регистрация: 28-05-05
Пользователь №: 5 512

|
ReAlгона тут не было. На тот момент времени проблема была решена размещением в ОЗУ "кучи". И имейте разницу понимать такие определения как "подсказка" и "решения". Подсказку дали, за что огромное спасибо, решение наковырял сам. Статический буферный массив был мной применем с самого начала но захотелось поэкспериментировать и для уменьшения используемой ОЗУ (так предполагалось) применить динамический - и цель создание темы - разобраться почему динамика не работала. Не высасывайте из пальца того, чего не было. Это нагло Сергей Борщ крутите пальцем в другом месте. Если Вы не заметили - то тут раздел называется В помощь начинающему а не Раздел для профессионалов/гуру. Цитата Аппаратный malloc - это гениальная идея не менее гениального автора. Успехов вам, дорогой товарищ! Спасибо!!! И предлагаю на этом закончить!
|
|
|
|
|
Jun 12 2009, 06:44
|

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

|
Цитата(Halfback @ Jun 12 2009, 09:06)  Сергей Борщ крутите пальцем в другом месте. Если Вы не заметили - то тут раздел называется В помощь начинающему а не Раздел для профессионалов/гуру. Даже начинающие должны подкреплять фактами свои утверждения. Итак, пожалуйста, приведите пример хоть одного процессора с аппаратной подержкой malloc(). Ну или хотя бы опишите функциональность этой самой аппаратной поддержки. Заметьте - вы это не спрашивали, вы утверждали. Поэтому ссылка на начинающих не катит. Утверждаете - отстаивайте свое утверждение, даже если вы и начинающий. В противном случае вы будете считаться балаболом. Что мне писать в каком разделе - позвольте я буду решать сам. Или вы хотите, чтобы в разделе для начинающих ответы писали только начинающие? P.S. и постарайтесь не использовать дворовый жаргон. Тут это не принято.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jun 12 2009, 07:51
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(Halfback @ Jun 12 2009, 09:06)  На тот момент времени проблема была решена размещением в ОЗУ "кучи". О! Так вот в чём была "ПРОБЛЕМА"! Попытались жарить рыбу без рыбы, не вышло, народ повыяснял насчёт наличия рыбы (Вы сами не смогли проинтерпретировать выдачу используемого Вами компилятора) Цитата(sergeeff @ Jun 7 2009, 19:21)  А куча (heap) вообще-то существует? И размер ее? Цитата(zltigo @ Jun 7 2009, 19:42)  Написано-же, что не существует, как класс: Код Heap size: 0 byte(s) и Вы таки догадались посмотреть, где у Вас рыбу берут. Цитата(Halfback @ Jun 12 2009, 09:06)  И имейте разницу понимать такие определения как "подсказка" и "решения". Подсказку дали, за что огромное спасибо, решение наковырял сам. "огромное спасибо" появилсь только сейчас, до этого было, как раз в ответ на выяснение наличия места под кучу: Цитата(Halfback @ Jun 7 2009, 22:46)  Жаль что тут никто реальным советом не помог. ... В своем компиляторе (CAVR) я ей (свалке) выделил 20 байт - и вуаля, всё заработало!!! Кстати, что Вы понимаете под "реальным советом" и "решением"? "подведи мышку к такому-то пункту меню, войди на такую-то страничку, в таком-то поле ввода набери число 20, нажми кнопку ОК"? Так, во первых, это и невозможно было сказать, так как до этого Вы не удосужились указать какой у Вас инмтрумент. А во вторых - это даже не "для начинающих", это в детсад. Начинающему должно было хватить вопроса "а куча-то выделена?" - и хватило, не спорю, так не опускайте же сами себя до более низкого уровня!
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jun 12 2009, 11:17
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(singlskv @ Jun 12 2009, 00:52)  У Вас таки не динамическое распределение получается а нечто очень похожее на оверлеи, а это совсем другая задачка и там все(ну почти все) можно заранее предусмотреть(в статике) Нет ну вы не совсем меня поняли. Я применил слово "программа", в смысле программа для станка с ЧПУ. То есть там, к примеру, координаты отверстия занесены. Это я так условно задачу привёл. Никто не будет в станок ЧПУ передавать прогу на AVR для запуска оверлея.  Это уж через чур. Цитата З.Ы. Собственно мое ИМХО заключается в том что это 2 совсем разные задачки - распределение(и возврат) памяти(по требованию) - распределение расположения данных в ранее распределенной памяти
и у каждого способа есть свои + и - но для процов с маленькой памятью первого способа просто нет... Где граница "малой памяти"? В одном моём проекте на м640 используется куча 5.8 кб. И применить там другое решение даже себе не представляю.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|