Автор |
Съобщение |
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4717
|
malloc / free
как да се замени правилно std malloc, free.... etc в СОРС кода ( bare-metal... минус линукс ) линкер --wrap-func e ясно... не го ща гледам STDLIB.H файла: проба: malloc(10); реве че няма heap...... демек търси стандартния malloc преправих го на: и пей сърце... ама правилно ли е да "хакна" хeдъра с week атрибут деасемблирам с ИДА-та и сичко си е ОК, липсват стандартните функции, заменени са с моите
_________________ main[-1u]={1};
|
Нед Сеп 30, 2018 12:31 pm |
|
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 11:32 am Мнения: 7893 Местоположение: София
|
Re: malloc / free
Според гну документацията тоя атрибут е точно за това. Само дето трябва да си напишеш имплементацията.
|
Нед Сеп 30, 2018 12:52 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4717
|
Re: malloc / free
мдам махнах моите функции и malloc/free липсва тотално... шибана работа
_________________ main[-1u]={1};
|
Нед Сеп 30, 2018 12:59 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 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 |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4717
|
Re: malloc / free
то правилния въпрос е как да дефинирам моите функции да са по-мажорни спрямо библиотечните
_________________ main[-1u]={1};
|
Нед Сеп 30, 2018 1:23 pm |
|
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 10:31 pm Мнения: 9645
|
Re: malloc / free
weak атрибута обозначава съответната функция като минорна, ако използва термина ти 'мажорна'. ако се появи друга функция без такъв атрибут, се линква тя. не съм изследвал какво става при две weak функции.
за теб би трябвало да е достатъчно просто на линкера да не му даваш стандартна библиотека, а твоя, в която да са разписани необходимите ти функции.
доста по-сериозен е въпроса как да си напише функции за алокиране и деалокиране, има различни модни тенденции и не може да ти се препоръча нещо, без да се знае спицифичната причина да се откажеш от стандартната библиотека.
|
Нед Сеп 30, 2018 2:44 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4717
|
Re: malloc / free
Би трябвало, но при липса на функция, компилатора отсвири и стандартната Ще тествам по-обстойно...
В случая се ползва алокатора на freertos Просто искам да заместя коректно стандартната... като и други не thread safe
_________________ main[-1u]={1};
|
Нед Сеп 30, 2018 4:17 pm |
|
|
woody
Ранг: Форумен бог
Регистриран на: Вто Юли 31, 2007 1:55 pm Мнения: 1792 Местоположение: София
|
Re: malloc / free
Слагаш ред в линкер скрипта да зарежда твоя обектен файл, "INPUT" май беше (не ми се проверява). Или линкваш твоята имплементация заедно с другите обектни, и би трябвало да не преравя библиотеката тогава, ако malloc()/free() са в библиотека.
|
Нед Сеп 30, 2018 6:21 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 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 |
|
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 8:22 am Мнения: 15501 Местоположение: София
|
Re: malloc / free
Ами май ще ти е по-лесно да смениш само printf-то, ако е само заради него. Woody имаше една хубава имплементация, ако не ти трябва float разпечатка.
Другото е да си направиш собствена имплементация на защитата със семафори. Можеш например да ги локализираш в статичен масив, ако ги знаеш горе - долу колко са.
Posix-a е убаво нещо, ама ...
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
Пон Окт 01, 2018 7:17 am |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4717
|
Re: malloc / free
а как да го смена във newlib е дефиниран с define, за моя сорс undef printf и предефине към thread-safe my_printf_r ще работи, обаче ако сложа няква външна библиотека която ползвa printf то линкера ще търси стандартната фунция (случи ми се веднъж ) в новия xc32 има подръжка на newlib и глей как са дефинирани extern вика некъде другаде e фунцията но приоритета се пада в библиотеката а не моя printf единственото читаво "replace" e --wrap_func, но е на ниво линкер и ако има 10 врапа става мазало, а на ниво компилатор що няма атрибут(мажор)
_________________ main[-1u]={1};
|
Пон Окт 01, 2018 9:58 am |
|
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 8:22 am Мнения: 15501 Местоположение: София
|
Re: malloc / free
Аааа ти търсиш универсално решение за чужд код... Моя скромен опит показва, че такова НЯМА.
Каква ще е тая библиотека дето ползва printf??? Като нещо такова се прави грамотно и използваемо от чужди хора, на чужди железа, се оставя кукичка за тия неща. Ако някой ми е изкомпилирал библиотека дето да дири printf, то това нещо явно си е предназначено да се ползва в натив линукс среда, с всичките му там free и malloc благини върху джелезо с мемори мениджмънт и те така.... Не е за дребни контролери.
Аз затова и не харесах nuttx - като искам posix и linux физиономия, просто слагам linux и толкова.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
Пон Окт 01, 2018 10:28 am |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 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 |
|
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 8:22 am Мнения: 15501 Местоположение: София
|
Re: malloc / free
Еми то щото е ударил дървото, както и ти.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
Пон Окт 01, 2018 10:52 am |
|
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 5:52 pm Мнения: 10370 Местоположение: Добрич
|
Re: malloc / free
И аз се зачудех как хер Нут ще остави такива проблемчета Принципно е така, всеки RTOS си заменя цялото std или не ползва емебедед версии като Newlib... И във всички останали случаи пак така се прави - или сменяш библиотечката изцяло или си ползваш твои функции. Това с "пренасочванията" е лоша идея и въпросът не опира само дали даден компилатор/линкер го може или не. Нали тоя код после трябва и да може да се поддържа
|
Пон Окт 01, 2018 1:44 pm |
|
|