реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> GCC ARM + malloc-free
athlon64
сообщение Mar 26 2012, 12:14
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



МК STM32F207
Eclipse + GCC Yagarto

Никак не могу заставить работать менеджер памяти из стандартной библиотеки си.
Добавил в проект syscalls.c взятый на форуме.
Скрипт линкера (flash.icf) гибрид, но вроде правильный.

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

syscalls.c и flash.icf прикладываю.
Прикрепленные файлы
Прикрепленный файл  flash.icf.txt ( 1.22 килобайт ) Кол-во скачиваний: 168
Прикрепленный файл  syscalls.c.txt ( 2.99 килобайт ) Кол-во скачиваний: 80
 


--------------------
Руслан
Go to the top of the page
 
+Quote Post
athlon64
сообщение Mar 28 2012, 16:47
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



неужели никто не может подсказать?


--------------------
Руслан
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 28 2012, 18:14
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 28 2012, 19:17
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
kolobochishe
сообщение Mar 29 2012, 03:26
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 240
Регистрация: 14-04-10
Из: Россия, г.Челябинск
Пользователь №: 56 634



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

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

Код
define symbol __ICFEDIT_size_heap__     = 0xA00000;


Вижу только _Min_Heap_Size = 2048;
Go to the top of the page
 
+Quote Post
athlon64
сообщение Mar 29 2012, 05:17
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Цитата(AHTOXA @ Mar 29 2012, 00:17) *
Дополнение. Проверьте ещё переменную heap, равна ли она нулю до первого вызова malloc. У меня как-то были подобные проблемы, когда стартовый код не чистил bss и не инициализировал переменные.

При включении сразу чищу всё ОЗУ.
Сделал тестовый вывод и выяснилось, что _sbrk() вообще не вызывается при вызове malloc

heap = 0
&_heap = 536966144


Сообщение отредактировал athlon64 - Mar 29 2012, 05:24


--------------------
Руслан
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 29 2012, 06:03
Сообщение #7


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
athlon64
сообщение Mar 29 2012, 06:54
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Цитата(AHTOXA @ Mar 29 2012, 11:03) *
heap и &_heap в порядке. Попробуйте опции линкера -nostdlib или -nodefaultlibs.

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


--------------------
Руслан
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 29 2012, 07:19
Сообщение #9


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А -nostartfiles?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
athlon64
сообщение Mar 29 2012, 07:32
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Цитата(AHTOXA @ Mar 29 2012, 12:19) *
А -nostartfiles?

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

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


--------------------
Руслан
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Mar 29 2012, 07:44
Сообщение #11


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Мне обычно хватает -nostartfiles.
А может это Yagarto дурит? Пробовали другой компилятор?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
athlon64
сообщение Mar 29 2012, 07:57
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



Не я один столкнулся с подобной проблемой:
http://www.embeddedrelated.com/usenet/embe...how/89455-1.php

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


--------------------
Руслан
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 29 2012, 08:38
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(athlon64 @ Mar 29 2012, 09:17) *
При включении сразу чищу всё ОЗУ.
Сделал тестовый вывод и выяснилось, что _sbrk() вообще не вызывается при вызове malloc
Гм. А не стоит ли у вас в libc вместо malloc затычка (как в syscalls.c) ?

Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 29 2012, 08:42
Сообщение #14


Гуру
******

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



zltigo выкладывал тут самописный менеджер памяти. Использую его вместо штатного - компактный, не тянет за собой кучу ненужного из библиотек. Обернул его в плюсы, добавил Mutex для многопотчности. Прилагаю.
Прикрепленные файлы
Прикрепленный файл  heap.zip ( 4.15 килобайт ) Кол-во скачиваний: 218
 


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
athlon64
сообщение Mar 29 2012, 09:34
Сообщение #15


Частый гость
**

Группа: Свой
Сообщений: 156
Регистрация: 10-03-10
Из: Уфа
Пользователь №: 55 882



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

Цитата(XVR @ Mar 29 2012, 13:38) *
Гм. А не стоит ли у вас в libc вместо malloc затычка (как в syscalls.c) ?

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

Цитата(Сергей Борщ @ Mar 29 2012, 13:42) *
zltigo выкладывал тут самописный менеджер памяти. Использую его вместо штатного - компактный, не тянет за собой кучу ненужного из библиотек. Обернул его в плюсы, добавил Mutex для многопотчности. Прилагаю.

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

Сообщение отредактировал athlon64 - Mar 29 2012, 09:44


--------------------
Руслан
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01389 секунд с 7
ELECTRONIX ©2004-2016