Перейти к содержанию
    

МК STM32F207

Eclipse + GCC Yagarto

 

Никак не могу заставить работать менеджер памяти из стандартной библиотеки си.

Добавил в проект syscalls.c взятый на форуме.

Скрипт линкера (flash.icf) гибрид, но вроде правильный.

 

Всё компилируется без ошибок, но функция malloc всегда возвращает 0x00000008.

 

syscalls.c и flash.icf прикладываю.

flash.icf.txt

syscalls.c.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрите (выдайте на отладочную печать) значение &_heap. Похоже, что криво инициализируется...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дополнение. Проверьте ещё переменную heap, равна ли она нулю до первого вызова malloc. У меня как-то были подобные проблемы, когда стартовый код не чистил bss и не инициализировал переменные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня была проблема когда в забыл установить размер кучи в *.icf файле. Был 0. Не увидел где у Вас задается ее размер или начальный адрес и конечный. Сколько памяти просите?

 

Работаю в ИАРе. Там размер задается явно

 

define symbol __ICFEDIT_size_heap__     = 0xA00000;

 

Вижу только _Min_Heap_Size = 2048;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дополнение. Проверьте ещё переменную heap, равна ли она нулю до первого вызова malloc. У меня как-то были подобные проблемы, когда стартовый код не чистил bss и не инициализировал переменные.

При включении сразу чищу всё ОЗУ.

Сделал тестовый вывод и выяснилось, что _sbrk() вообще не вызывается при вызове malloc

 

heap = 0

&_heap = 536966144

 

Изменено пользователем athlon64

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

heap и &_heap в порядке. Попробуйте опции линкера -nostdlib или -nodefaultlibs.

-nostdlib у меня включен, выключение ничего не меняет.

с -nodefaultlibs проект не компилируется. Не найдена функция malloc и в syscalls ругается на errno.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А -nostartfiles?

Напутал в прошлом посте.

-nostartfiles у меня был включен, отключение не влияет

-nostdlib и --nodefaultlibs проект не компилируется как писал выше.

 

Собственно, как я понял, nostdlib - то же что и одновременно включенные nostartfiles и nodefaultlibs.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне обычно хватает -nostartfiles.

А может это Yagarto дурит? Пробовали другой компилятор?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не я один столкнулся с подобной проблемой:

http://www.embeddedrelated.com/usenet/embe...how/89455-1.php

 

Попробую другой toolchain

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При включении сразу чищу всё ОЗУ.

Сделал тестовый вывод и выяснилось, что _sbrk() вообще не вызывается при вызове malloc

Гм. А не стоит ли у вас в libc вместо malloc затычка (как в syscalls.c) ?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

zltigo выкладывал тут самописный менеджер памяти. Использую его вместо штатного - компактный, не тянет за собой кучу ненужного из библиотек. Обернул его в плюсы, добавил Mutex для многопотчности. Прилагаю.

heap.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заменил Yagarto на DevkitPRO, теперь процессор виснет при вызове malloc :)

На Yagarto пробовал BGET, у него функция bget() всё время возвращала чушь типа 0x801C0000, т.е. вообще не из области ОЗУ.

 

Гм. А не стоит ли у вас в libc вместо malloc затычка (как в syscalls.c) ?

Не знаю. Как уточнить? Newlib в yagarto в виде объектных файлов... хотя исходники тоже отдельно выложены.

 

zltigo выкладывал тут самописный менеджер памяти. Использую его вместо штатного - компактный, не тянет за собой кучу ненужного из библиотек. Обернул его в плюсы, добавил Mutex для многопотчности. Прилагаю.

Спасибо, но, к сожалению, с плюсами у меня пока не очень. Попробую вариант zltigo тоже

Изменено пользователем athlon64

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...