athlon64 0 26 марта, 2012 Опубликовано 26 марта, 2012 · Жалоба МК STM32F207 Eclipse + GCC Yagarto Никак не могу заставить работать менеджер памяти из стандартной библиотеки си. Добавил в проект syscalls.c взятый на форуме. Скрипт линкера (flash.icf) гибрид, но вроде правильный. Всё компилируется без ошибок, но функция malloc всегда возвращает 0x00000008. syscalls.c и flash.icf прикладываю. flash.icf.txt syscalls.c.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
athlon64 0 28 марта, 2012 Опубликовано 28 марта, 2012 · Жалоба неужели никто не может подсказать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 28 марта, 2012 Опубликовано 28 марта, 2012 · Жалоба Посмотрите (выдайте на отладочную печать) значение &_heap. Похоже, что криво инициализируется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 28 марта, 2012 Опубликовано 28 марта, 2012 · Жалоба Дополнение. Проверьте ещё переменную heap, равна ли она нулю до первого вызова malloc. У меня как-то были подобные проблемы, когда стартовый код не чистил bss и не инициализировал переменные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kochevkv 0 29 марта, 2012 Опубликовано 29 марта, 2012 · Жалоба У меня была проблема когда в забыл установить размер кучи в *.icf файле. Был 0. Не увидел где у Вас задается ее размер или начальный адрес и конечный. Сколько памяти просите? Работаю в ИАРе. Там размер задается явно define symbol __ICFEDIT_size_heap__ = 0xA00000; Вижу только _Min_Heap_Size = 2048; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
athlon64 0 29 марта, 2012 Опубликовано 29 марта, 2012 (изменено) · Жалоба Дополнение. Проверьте ещё переменную heap, равна ли она нулю до первого вызова malloc. У меня как-то были подобные проблемы, когда стартовый код не чистил bss и не инициализировал переменные. При включении сразу чищу всё ОЗУ. Сделал тестовый вывод и выяснилось, что _sbrk() вообще не вызывается при вызове malloc heap = 0 &_heap = 536966144 Изменено 29 марта, 2012 пользователем athlon64 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 29 марта, 2012 Опубликовано 29 марта, 2012 · Жалоба heap и &_heap в порядке. Попробуйте опции линкера -nostdlib или -nodefaultlibs. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
athlon64 0 29 марта, 2012 Опубликовано 29 марта, 2012 · Жалоба heap и &_heap в порядке. Попробуйте опции линкера -nostdlib или -nodefaultlibs. -nostdlib у меня включен, выключение ничего не меняет. с -nodefaultlibs проект не компилируется. Не найдена функция malloc и в syscalls ругается на errno. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 29 марта, 2012 Опубликовано 29 марта, 2012 · Жалоба А -nostartfiles? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
athlon64 0 29 марта, 2012 Опубликовано 29 марта, 2012 · Жалоба А -nostartfiles? Напутал в прошлом посте. -nostartfiles у меня был включен, отключение не влияет -nostdlib и --nodefaultlibs проект не компилируется как писал выше. Собственно, как я понял, nostdlib - то же что и одновременно включенные nostartfiles и nodefaultlibs. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 29 марта, 2012 Опубликовано 29 марта, 2012 · Жалоба Мне обычно хватает -nostartfiles. А может это Yagarto дурит? Пробовали другой компилятор? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
athlon64 0 29 марта, 2012 Опубликовано 29 марта, 2012 · Жалоба Не я один столкнулся с подобной проблемой: http://www.embeddedrelated.com/usenet/embe...how/89455-1.php Попробую другой toolchain Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 29 марта, 2012 Опубликовано 29 марта, 2012 · Жалоба При включении сразу чищу всё ОЗУ. Сделал тестовый вывод и выяснилось, что _sbrk() вообще не вызывается при вызове malloc Гм. А не стоит ли у вас в libc вместо malloc затычка (как в syscalls.c) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 29 марта, 2012 Опубликовано 29 марта, 2012 · Жалоба zltigo выкладывал тут самописный менеджер памяти. Использую его вместо штатного - компактный, не тянет за собой кучу ненужного из библиотек. Обернул его в плюсы, добавил Mutex для многопотчности. Прилагаю.heap.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
athlon64 0 29 марта, 2012 Опубликовано 29 марта, 2012 (изменено) · Жалоба Заменил Yagarto на DevkitPRO, теперь процессор виснет при вызове malloc :) На Yagarto пробовал BGET, у него функция bget() всё время возвращала чушь типа 0x801C0000, т.е. вообще не из области ОЗУ. Гм. А не стоит ли у вас в libc вместо malloc затычка (как в syscalls.c) ? Не знаю. Как уточнить? Newlib в yagarto в виде объектных файлов... хотя исходники тоже отдельно выложены. zltigo выкладывал тут самописный менеджер памяти. Использую его вместо штатного - компактный, не тянет за собой кучу ненужного из библиотек. Обернул его в плюсы, добавил Mutex для многопотчности. Прилагаю. Спасибо, но, к сожалению, с плюсами у меня пока не очень. Попробую вариант zltigo тоже Изменено 29 марта, 2012 пользователем athlon64 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться