Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: malloc в Xilinx SDK
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Andrey Pesoshin
EDK-проект для Xilinx Spartan 6.

В C++ коде часть классов/структур размещается в куче динамически через malloc(). Куча и стек лежат во внешней DDR2, код - в брамах (можно вынести тоже в оперативку).

Проблема в следующем:
После сброса системы (или нескольких) код выполняется с начала, однако вызовы malloc возвращают NULL.

Как вы это обычно лечите?
DevL
В С/С++ malloc определяется как
http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/

и соответственно - если не получается ( в силу каких то причин - много запрошено памяти или просто нет доступной уже ) выделять запрошеный размер - возращается NULL

обычно, стоит проверить свой код, насчет malloc + free использования , а так же запрашиваемые размеры ...
AVR
Цитата(DevL @ Nov 13 2011, 00:39) *
и соответственно - если не получается ( в силу каких то причин - много запрошено памяти или просто нет доступной уже ) выделять запрошеный размер - возращается NULL
обычно, стоит проверить свой код, насчет malloc + free использования , а так же запрашиваемые размеры ...

но ведь система сбрасывается полностью, удивляет вообще теоретическая возможность что в памяти что-то не инициализируется при сбросе

а вдруг содержимое памяти после предыдущего цикла работы сохраняется, что если посмотреть адреса указатели стеков, heap и т.п.?
Andrey Pesoshin
Цитата(DevL @ Nov 13 2011, 00:39) *
В С/С++ malloc определяется как
http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/

и соответственно - если не получается ( в силу каких то причин - много запрошено памяти или просто нет доступной уже ) выделять запрошеный размер - возращается NULL

обычно, стоит проверить свой код, насчет malloc + free использования , а так же запрашиваемые размеры ...

Это так и есть. Только я поясню еще раз - при включении питания схемы - код с malloc/free выполняется нормально, а после сброса - тот же самый код - запускается сначала и уже падает в местах вызова malloc (возвращает NULL). Linker-скриптом сегменты кода, стека и кучи распределяются по блочной памяти ПЛИС и внешней оперативной.

Следовательно это проблема не в коде, а где-то выше - на уровне bsp или драйверов Xilinx'а.
Xilinx вроде бы знает об этой проблеме http://www.xilinx.com/support/answers/30878.htm, только оба описанных метода выглядят как страшнейшие хаки. Потому и спрашиваю, можно ли это сделать как-то лучше.

AVR
Да, это очень похоже на правду. Как посмотреть, не подскажите?
AVR
AVRДа, это очень похоже на правду. Как посмотреть, не подскажите?[/quote]
просто printf адреса при malloc и printf адреса любой локальной переменной
если при каждом старте системы адреса отличаются - тут я бы насторожился
Andrey Pesoshin
Цитата(AVR @ Nov 13 2011, 19:47) *
AVRДа, это очень похоже на правду. Как посмотреть, не подскажите?
просто printf адреса при malloc и printf адреса любой локальной переменной
если при каждом старте системы адреса отличаются - тут я бы насторожился

Так я уже и насторожился, посмотрите, об этом в ссылке приведенной написано
http://www.xilinx.com/support/answers/30878.htm
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.