Отговори на тема  [ 16 мнения ]  Отиди на страница 1, 2  Следваща
malloc / free 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4717
Мнение malloc / free
Код:
extern void *malloc(size_t size) {
    return pvPortMalloc(size);
}

extern void free(void *ptr) {
    vPortFree(ptr);
}

как да се замени правилно std malloc, free.... etc в СОРС кода ( bare-metal... минус линукс )
линкер --wrap-func e ясно... не го ща

гледам STDLIB.H файла:
Код:
void   free(void *);
void   *malloc(size_t);     


проба:
malloc(10); реве че няма heap...... демек търси стандартния malloc

преправих го на:
Код:
void   free(void *) __attribute__ ((weak));
void   *malloc(size_t)  __attribute__ ((weak));


и пей сърце... ама правилно ли е да "хакна" хeдъра с week атрибут
деасемблирам с ИДА-та и сичко си е ОК, липсват стандартните функции, заменени са с моите

_________________
main[-1u]={1};


Нед Сеп 30, 2018 12:31 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 11:32 am
Мнения: 7893
Местоположение: София
Мнение Re: malloc / free
Според гну документацията тоя атрибут е точно за това. Само дето трябва да си напишеш имплементацията.


Нед Сеп 30, 2018 12:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4717
Мнение Re: malloc / free
мдам
махнах моите функции и malloc/free липсва тотално... шибана работа

_________________
main[-1u]={1};


Нед Сеп 30, 2018 12:59 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4717
Мнение Re: malloc / free
става въпрос за MPLAB-X XC32
тези имат две библиотеки: std и Legacy
при std:
extern void *malloc (size_t);
Legacy:
void *malloc (size_t);

като има extern се заменят правилно :)
без extern-а си търси библиотеката

_________________
main[-1u]={1};


Нед Сеп 30, 2018 1:07 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4717
Мнение Re: malloc / free
то правилния въпрос е как да дефинирам моите функции да са по-мажорни спрямо библиотечните

_________________
main[-1u]={1};


Нед Сеп 30, 2018 1:23 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Ное 21, 2004 10:31 pm
Мнения: 9645
Мнение Re: malloc / free
weak атрибута обозначава съответната функция като минорна, ако използва термина ти 'мажорна'. ако се появи друга функция без такъв атрибут, се линква тя. не съм изследвал какво става при две weak функции.

за теб би трябвало да е достатъчно просто на линкера да не му даваш стандартна библиотека, а твоя, в която да са разписани необходимите ти функции.

доста по-сериозен е въпроса как да си напише функции за алокиране и деалокиране, има различни модни тенденции и не може да ти се препоръча нещо, без да се знае спицифичната причина да се откажеш от стандартната библиотека.


Нед Сеп 30, 2018 2:44 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4717
Мнение Re: malloc / free
Би трябвало, но при липса на функция, компилатора отсвири и стандартната
Ще тествам по-обстойно...

В случая се ползва алокатора на freertos
Просто искам да заместя коректно стандартната... като и други не thread safe

_________________
main[-1u]={1};


Нед Сеп 30, 2018 4:17 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 1:55 pm
Мнения: 1792
Местоположение: София
Мнение Re: malloc / free
Слагаш ред в линкер скрипта да зарежда твоя обектен файл, "INPUT" май беше (не ми се проверява).
Или линкваш твоята имплементация заедно с другите обектни, и би трябвало да не преравя библиотеката тогава, ако malloc()/free() са в библиотека.


Нед Сеп 30, 2018 6:21 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4717
Мнение Re: malloc / free
При използване на опер система reent-a е вързан с TCB и става още по гадно да се компилира друга статична библиотека.
Newlib, та дори и newlib-nano - са "огромни" за ембедед ( не линукс ) приложения а и са пригодени повече за posix
чудя се - що компилират посикс std lib за баре-метал, като се ползва само printf
ako може лесно да се заменят фунции, то те не thread-safe са около 10 иска само да се локнат със семафори

_________________
main[-1u]={1};


Пон Окт 01, 2018 6:12 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 8:22 am
Мнения: 15501
Местоположение: София
Мнение Re: malloc / free
Ами май ще ти е по-лесно да смениш само printf-то, ако е само заради него. Woody имаше една хубава имплементация, ако не ти трябва float разпечатка.

Другото е да си направиш собствена имплементация на защитата със семафори. Можеш например да ги локализираш в статичен масив, ако ги знаеш горе - долу колко са.

Posix-a е убаво нещо, ама ...

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пон Окт 01, 2018 7:17 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4717
Мнение Re: malloc / free
а как да го смена
във newlib е дефиниран с define, за моя сорс undef printf и предефине към thread-safe my_printf_r ще работи, обаче ако сложа няква външна библиотека която ползвa printf то линкера ще търси стандартната фунция (случи ми се веднъж )
в новия xc32 има подръжка на newlib и глей как са дефинирани

Код:
std   : extern int printf(const char *, ...);
legacy: int printf (const char *, ...); // некво наследство от mips, що ли
newlib: int   _EXFUN(printf, (const char *, ...)         #define _EXFUN(name, proto) name proto


extern вика некъде другаде e фунцията но приоритета се пада в библиотеката а не моя printf

единственото читаво "replace" e --wrap_func, но е на ниво линкер и ако има 10 врапа става мазало,
а на ниво компилатор що няма атрибут(мажор)

_________________
main[-1u]={1};


Пон Окт 01, 2018 9:58 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 8:22 am
Мнения: 15501
Местоположение: София
Мнение Re: malloc / free
Аааа ти търсиш универсално решение за чужд код... Моя скромен опит показва, че такова НЯМА.

Каква ще е тая библиотека дето ползва printf??? Като нещо такова се прави грамотно и използваемо от чужди хора, на чужди железа, се оставя кукичка за тия неща. Ако някой ми е изкомпилирал библиотека дето да дири printf, то това нещо явно си е предназначено да се ползва в натив линукс среда, с всичките му там free и malloc благини върху джелезо с мемори мениджмънт и те така.... Не е за дребни контролери.

Аз затова и не харесах nuttx - като искам posix и linux физиономия, просто слагам linux и толкова.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пон Окт 01, 2018 10:28 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 11:48 am
Мнения: 4717
Мнение Re: malloc / free
е сигурно е така ама за стандарт С от миналия век как не добавиха едно читаво пренасочване
тва са 5,6 критични фунции, които като се заместят си става "почти" thread-safe приложение за малки контролери
иначе трябва да компилирам всичкото std

не съм се хванал за Nuttx-a - просто експеримент, там го гледам е сменил цялото std за някакви си 10 mutex-lock/unlock

_________________
main[-1u]={1};


Пон Окт 01, 2018 10:41 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 8:22 am
Мнения: 15501
Местоположение: София
Мнение Re: malloc / free
Еми то щото е ударил дървото, както и ти.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Пон Окт 01, 2018 10:52 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10370
Местоположение: Добрич
Мнение Re: malloc / free
TheWizard написа:
не съм се хванал за Nuttx-a - просто експеримент, там го гледам е сменил цялото std за някакви си 10 mutex-lock/unlock


И аз се зачудех как хер Нут ще остави такива проблемчета ;-)

Принципно е така, всеки RTOS си заменя цялото std или не ползва емебедед версии като Newlib... И във всички останали случаи пак така се прави - или сменяш библиотечката изцяло или си ползваш твои функции. Това с "пренасочванията" е лоша идея и въпросът не опира само дали даден компилатор/линкер го може или не. Нали тоя код после трябва и да може да се поддържа ;-)


Пон Окт 01, 2018 1:44 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 16 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 5 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни