-
- Мне приходится использовать стороннюю библиотеку, а она работает с malloc. Я привёл только код из main(), а в других модулях таких маллоков дохрена. бомж(37 знак., 24.01.2017 12:55)
- попробуйте начать с простого: написать так malloc(1) и посмотреть, выделяется ли память. Если не выделяется, то тут явная проблема с заданием размеров и местоположения кучи (heap) - 0men(24.01.2017 12:59)
- Так именно проблему с заданием кучи я и имею. А как её правильно задать, если внешнего RAM нет? Перепробовал кучу вариантов, не получается. - бомж(24.01.2017 13:25)
- там gcc компилятор? нужно искать его настройки 0men(99 знак., 24.01.2017 13:36, ссылка)
- Пробовал, АтмельСтудио игнорирует мои попытки бомж(65 знак., 24.01.2017 13:41)
- а если __heap_start и __heap_end поменять на __malloc_heap_start и __malloc_heap_end? 0men(424 знак., 24.01.2017 13:43 - 13:47)
- Я вот чего не понимаю. Если RAM начинается x802000 и заканчивается x803FFF, то как такое может быть? бомж(4410 знак., 24.01.2017 14:31)
- Выглядит вменяемо. Мануал пишет, что переменная __malloc_heap_start инициализируется адресом __heap_start (наверное, в стартапе?), и после этого всё должно задышать. - SciFi(24.01.2017 14:40, ссылка)
- непонятно, почему часть областей выходит за границу x803FFF ... - 0men(24.01.2017 14:43)
- __data_load_start? Очевидно, данные во флеше, которые инициализирую переменные в ОЗУ. Всё нормально. - SciFi(24.01.2017 14:47)
- не, вот например секция .bss 0x008042e6 0men(61 знак., 24.01.2017 14:55)
- Ой! Очевидно, текстовые строки из этого тулкита съели всё ОЗУ. Спасибо мудрому АВРу и хвалёному Гарварду. Бомж, тебе в любом случае придётся залезть в потроха, этот убогий авр не даст спокойно жить. - SciFi(24.01.2017 14:58)
- Да, ты прав. Меня ввёл в заблуждение Output компилятора: бомж(192 знак., 24.01.2017 18:04)
- да, нужно все строки и таблицы во флеш переносить - 0men(24.01.2017 16:33)
- Ой! Очевидно, текстовые строки из этого тулкита съели всё ОЗУ. Спасибо мудрому АВРу и хвалёному Гарварду. Бомж, тебе в любом случае придётся залезть в потроха, этот убогий авр не даст спокойно жить. - SciFi(24.01.2017 14:58)
- не, вот например секция .bss 0x008042e6 0men(61 знак., 24.01.2017 14:55)
- __data_load_start? Очевидно, данные во флеше, которые инициализирую переменные в ОЗУ. Всё нормально. - SciFi(24.01.2017 14:47)
- непонятно, почему часть областей выходит за границу x803FFF ... - 0men(24.01.2017 14:43)
- Выглядит вменяемо. Мануал пишет, что переменная __malloc_heap_start инициализируется адресом __heap_start (наверное, в стартапе?), и после этого всё должно задышать. - SciFi(24.01.2017 14:40, ссылка)
- Я вот чего не понимаю. Если RAM начинается x802000 и заканчивается x803FFF, то как такое может быть? бомж(4410 знак., 24.01.2017 14:31)
- а если __heap_start и __heap_end поменять на __malloc_heap_start и __malloc_heap_end? 0men(424 знак., 24.01.2017 13:43 - 13:47)
- Пробовал, АтмельСтудио игнорирует мои попытки бомж(65 знак., 24.01.2017 13:41)
- там gcc компилятор? нужно искать его настройки 0men(99 знак., 24.01.2017 13:36, ссылка)
- Так именно проблему с заданием кучи я и имею. А как её правильно задать, если внешнего RAM нет? Перепробовал кучу вариантов, не получается. - бомж(24.01.2017 13:25)
- Кстати, если вызывается только malloc(), а free() не используется, то такой malloc() делается самостоятельно за полчаса в 30 строчек. SciFi(518 знак., 24.01.2017 12:57 - 13:00)
- К сожалению, free() и realloc() используются бомж(1182 знак., 24.01.2017 13:27)
- "Create new list entry" - просится статический список с заданным максимальным размером. Если же там реально память динамически выделяется и освобождается, то я бы подумал о фрагментации. Эти ваши скромные килобайты ОЗУ могут тупо кончиться. - SciFi(24.01.2017 13:34)
- Проблема фрагментации по большей части существует в головах тех, кто её в глаза не видел. А тот кто видел -- как-то справился (без static... что нереально в сколько-нибудь большом проекте). - fk0(24.01.2017 13:45)
- Да, видимо так и придётся. Перепишу всё динамически выделяемое на статику. - бомж(24.01.2017 13:41)
- А может не тратить время на переписывание, а реализовать(адаптировать чужой) DMS и потом его использовать и здесь и в любых других своих проектах? abivan(42 знак., 24.01.2017 14:16)
- Я бы сделал свои malloc и realloc, чтобы минимально корёжить код. А распределение статической памяти сделал бы внутри этих malloc/realloc. Возможно, нужно будет добавить аргумент для передачи контекста. - SciFi(24.01.2017 13:47)
- "Create new list entry" - просится статический список с заданным максимальным размером. Если же там реально память динамически выделяется и освобождается, то я бы подумал о фрагментации. Эти ваши скромные килобайты ОЗУ могут тупо кончиться. - SciFi(24.01.2017 13:34)
- К сожалению, free() и realloc() используются бомж(1182 знак., 24.01.2017 13:27)
- попробуйте начать с простого: написать так malloc(1) и посмотреть, выделяется ли память. Если не выделяется, то тут явная проблема с заданием размеров и местоположения кучи (heap) - 0men(24.01.2017 12:59)
- Мне приходится использовать стороннюю библиотеку, а она работает с malloc. Я привёл только код из main(), а в других модулях таких маллоков дохрена. бомж(37 знак., 24.01.2017 12:55)