Jump to content

    

Проблемы с malloc

Взял проект от STM32_EVAL на FreeRTOS в IAR. Сделал из него новый проект и покоцал функциональность. Использую его для другой платы.

Так вот, там есть объявление структуры GL_Page_TypeDef *GL_HomePage стартовой страницы GUI библиотеки для STM32.

В полном рабочем проекте при запуске отладки в watch на эту структуру пишет :

Expression | Value | Location | Type

GL_HomePage | vst(0x0) | 0x20000D68 | struct GL_Page_TypeDef

 

В сокращенной версии проекта

Expression | Value | Location | Type

GL_HomePage | mutex(0x0) | 0x20006640 | struct GL_Page_TypeDef

 

При дальнем выделении памяти через malloc у рабоче проекта в Value адрес подставляется, а в сокращенном нет, так и остается mutex(0x0).

Какого говорится фига такое происходит.

Про такое Value вообще ничего не нашел. Может у меня изначально с конфигом криво, хотя уже вроде всё перерыл.

Share this post


Link to post
Share on other sites

Смотря что цокали.. ? Размер heap ? Или может вообще сокращенную библоитеку поставли ? (емнип CLIB вместо DLIB) ?

Share this post


Link to post
Share on other sites

убирал работу с теми устройствами, которых нет на плате.

размер кучи.

#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24 * 1024 ) )

 

самое интересное для меня, я не понимаю что означает vst(0x0) и mutex(0x0). Вообще не нашел, что это значит.

Share this post


Link to post
Share on other sites

Это не значит ничего. Отладчик напишет перевод известного ему адреса и все. Вы я правильно понял получаете нулл после вызова маллок-? проверяли? меньшие размеры пробовали? Мне кажется Вы умудрились выкинуть поддержку динамического выделения вообще.

Share this post


Link to post
Share on other sites
Это не значит ничего. Отладчик напишет перевод известного ему адреса и все. Вы я правильно понял получаете нулл после вызова маллок-? проверяли? меньшие размеры пробовали? Мне кажется Вы умудрились выкинуть поддержку динамического выделения вообще.

видимо да. Просто я решил собрать проект с нуля и добавить туда библиотек, видимо это был не совсем правильный путь. Сейчас я просто взял уже готовый проект и выкинул все лишнее и заработало.

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

Но видимо проблема с настройками или библиотеками, так как при запуске отладчика сразу пишет mutex на глобального определения указателя на структуру. Если не сложно, гляньте что там криво, я только начал варится с операционкой, не до конца разобрался еще в тонкостях

 

мой не работающий проект

http://yadi.sk/d/cCbjU9ui7CIF0

 

из чего переделывал (работающий)

http://yadi.sk/d/Jo3NMxXP7CIIA

 

грусть начинается в файле gl_mgr.c -> функция GL_ShowMainMenu строка GL_HomePage = malloc(sizeof(GL_Page_TypeDef));

изначально в файле есть глобальное определение указателя GL_Page_TypeDef *GL_HomePage; вот с ним и косяк

 

Share this post


Link to post
Share on other sites

а какой manager памяти? #define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24 * 1024 ) ) используеться в heap_1.c и heap_2.c . При обертке heap_3.c берется скорей из проекта. Точно не знаю может из файла stm32f40x_flash.icf (define symbol __ICFEDIT_size_heap__ = 0x200;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this