-
- Вообще-то это не совсем верно. По-моему, правильно было бы так: Bill(325 знак., 24.01.2017 14:50)
- И так и этак правильно - бомж(24.01.2017 23:24)
- И еще вопрос: вы внешнюю память используете? - Bill(24.01.2017 15:01)
- нет - бомж(24.01.2017 16:28)
- беру свои слова обратно ) не прав 0men(59 знак., 24.01.2017 12:31 - 12:35)
- Я тормознул. Да, выделяется память под структуру. Но я не вижу в этом куске кода необходимости динамического выделения памяти, malloc не нужен. - SciFi(24.01.2017 12:37)
- это точно, и вообще непонятно другое.. как выглядит тип (структура) PDEVICEINSTANCE.. 0men(239 знак., 24.01.2017 12:41)
- PDEVICEINSTANCE выглядит так: бомж(4812 знак., 24.01.2017 23:17)
- А вообще, вот весь проект целиком, который мне надо переделать на atxmega128a1u. Без внешней памяти, блин. бомж(24.01.2017 23:23 - 23:29)
- И в чем проблема? Отредактируйте командный файл для линкера в соответствии с вашим МК. В частности, Bill(301 знак., 25.01.2017 05:42 - 05:47)
- Проблема только в том, что не хватает срама :-) Буду требовать заменить AVR на честный кортекс. - бомж(25.01.2017 10:02)
- можно попробовать все строковые литералы перенести во флэш, сейчас они в сраме, судя по мапу линкера.. - 0men(27.01.2017 18:24)
- Спасибо, но теперь будет кортекс-3 с 48 килобайтами срама, ATSAM3U4. Он даже дешевле Xmega. Его для этой задачи точно хватит. - бомж(27.01.2017 22:33)
- Правильный результат тонкой системной оптимизации :) - Evgeny_CD(27.01.2017 22:37)
- С этого надо было начинать :-) - SciFi(27.01.2017 22:35)
- Этот проект начинал не я, я заканчиваю :-) - бомж(27.01.2017 23:30)
- +1 :) - 0men(27.01.2017 22:58)
- Спасибо, но теперь будет кортекс-3 с 48 килобайтами срама, ATSAM3U4. Он даже дешевле Xmega. Его для этой задачи точно хватит. - бомж(27.01.2017 22:33)
- можно попробовать все строковые литералы перенести во флэш, сейчас они в сраме, судя по мапу линкера.. - 0men(27.01.2017 18:24)
- Проблема только в том, что не хватает срама :-) Буду требовать заменить AVR на честный кортекс. - бомж(25.01.2017 10:02)
- И в чем проблема? Отредактируйте командный файл для линкера в соответствии с вашим МК. В частности, Bill(301 знак., 25.01.2017 05:42 - 05:47)
- А вообще, вот весь проект целиком, который мне надо переделать на atxmega128a1u. Без внешней памяти, блин. бомж(24.01.2017 23:23 - 23:29)
- PDEVICEINSTANCE выглядит так: бомж(4812 знак., 24.01.2017 23:17)
- это точно, и вообще непонятно другое.. как выглядит тип (структура) PDEVICEINSTANCE.. 0men(239 знак., 24.01.2017 12:41)
- Я тормознул. Да, выделяется память под структуру. Но я не вижу в этом куске кода необходимости динамического выделения памяти, malloc не нужен. - SciFi(24.01.2017 12:37)
- Что мешает забыть про malloc и использовать статическое выделение памяти? - SciFi(24.01.2017 12:33)
- Мне приходится использовать стороннюю библиотеку, а она работает с 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)
- Вообще-то это не совсем верно. По-моему, правильно было бы так: Bill(325 знак., 24.01.2017 14:50)