| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| malloc / free http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=16162 |
Страница 1 от 2 |
| Автор: | TheWizard [ Нед Сеп 30, 2018 1:31 pm ] | |||||||||||||||||||||||||||
| Заглавие: | malloc / free | |||||||||||||||||||||||||||
как да се замени правилно std malloc, free.... etc в СОРС кода ( bare-metal... минус линукс ) линкер --wrap-func e ясно... не го ща гледам STDLIB.H файла:
проба: malloc(10); реве че няма heap...... демек търси стандартния malloc преправих го на:
и пей сърце... ама правилно ли е да "хакна" хeдъра с week атрибут деасемблирам с ИДА-та и сичко си е ОК, липсват стандартните функции, заменени са с моите |
||||||||||||||||||||||||||||
| Автор: | Реконструктор [ Нед Сеп 30, 2018 1:52 pm ] |
| Заглавие: | Re: malloc / free |
Според гну документацията тоя атрибут е точно за това. Само дето трябва да си напишеш имплементацията. |
|
| Автор: | TheWizard [ Нед Сеп 30, 2018 1:59 pm ] |
| Заглавие: | Re: malloc / free |
мдам махнах моите функции и malloc/free липсва тотално... шибана работа |
|
| Автор: | TheWizard [ Нед Сеп 30, 2018 2:07 pm ] |
| Заглавие: | Re: malloc / free |
става въпрос за MPLAB-X XC32 тези имат две библиотеки: std и Legacy при std: extern void *malloc (size_t); Legacy: void *malloc (size_t); като има extern се заменят правилно без extern-а си търси библиотеката |
|
| Автор: | TheWizard [ Нед Сеп 30, 2018 2:23 pm ] |
| Заглавие: | Re: malloc / free |
то правилния въпрос е как да дефинирам моите функции да са по-мажорни спрямо библиотечните |
|
| Автор: | ДедоБоре [ Нед Сеп 30, 2018 3:44 pm ] |
| Заглавие: | Re: malloc / free |
weak атрибута обозначава съответната функция като минорна, ако използва термина ти 'мажорна'. ако се появи друга функция без такъв атрибут, се линква тя. не съм изследвал какво става при две weak функции. за теб би трябвало да е достатъчно просто на линкера да не му даваш стандартна библиотека, а твоя, в която да са разписани необходимите ти функции. доста по-сериозен е въпроса как да си напише функции за алокиране и деалокиране, има различни модни тенденции и не може да ти се препоръча нещо, без да се знае спицифичната причина да се откажеш от стандартната библиотека. |
|
| Автор: | TheWizard [ Нед Сеп 30, 2018 5:17 pm ] |
| Заглавие: | Re: malloc / free |
Би трябвало, но при липса на функция, компилатора отсвири и стандартната Ще тествам по-обстойно... В случая се ползва алокатора на freertos Просто искам да заместя коректно стандартната... като и други не thread safe |
|
| Автор: | woody [ Нед Сеп 30, 2018 7:21 pm ] |
| Заглавие: | Re: malloc / free |
Слагаш ред в линкер скрипта да зарежда твоя обектен файл, "INPUT" май беше (не ми се проверява). Или линкваш твоята имплементация заедно с другите обектни, и би трябвало да не преравя библиотеката тогава, ако malloc()/free() са в библиотека. |
|
| Автор: | TheWizard [ Пон Окт 01, 2018 7:12 am ] |
| Заглавие: | Re: malloc / free |
При използване на опер система reent-a е вързан с TCB и става още по гадно да се компилира друга статична библиотека. Newlib, та дори и newlib-nano - са "огромни" за ембедед ( не линукс ) приложения а и са пригодени повече за posix чудя се - що компилират посикс std lib за баре-метал, като се ползва само printf ako може лесно да се заменят фунции, то те не thread-safe са около 10 иска само да се локнат със семафори |
|
| Автор: | Цецо [ Пон Окт 01, 2018 8:17 am ] |
| Заглавие: | Re: malloc / free |
Ами май ще ти е по-лесно да смениш само printf-то, ако е само заради него. Woody имаше една хубава имплементация, ако не ти трябва float разпечатка. Другото е да си направиш собствена имплементация на защитата със семафори. Можеш например да ги локализираш в статичен масив, ако ги знаеш горе - долу колко са. Posix-a е убаво нещо, ама ... |
|
| Автор: | TheWizard [ Пон Окт 01, 2018 10:58 am ] | |||||||||
| Заглавие: | Re: malloc / free | |||||||||
а как да го смена във newlib е дефиниран с define, за моя сорс undef printf и предефине към thread-safe my_printf_r ще работи, обаче ако сложа няква външна библиотека която ползвa printf то линкера ще търси стандартната фунция (случи ми се веднъж ) в новия xc32 има подръжка на newlib и глей как са дефинирани
extern вика некъде другаде e фунцията но приоритета се пада в библиотеката а не моя printf единственото читаво "replace" e --wrap_func, но е на ниво линкер и ако има 10 врапа става мазало, а на ниво компилатор що няма атрибут(мажор) |
||||||||||
| Автор: | Цецо [ Пон Окт 01, 2018 11:28 am ] |
| Заглавие: | Re: malloc / free |
Аааа ти търсиш универсално решение за чужд код... Моя скромен опит показва, че такова НЯМА. Каква ще е тая библиотека дето ползва printf??? Като нещо такова се прави грамотно и използваемо от чужди хора, на чужди железа, се оставя кукичка за тия неща. Ако някой ми е изкомпилирал библиотека дето да дири printf, то това нещо явно си е предназначено да се ползва в натив линукс среда, с всичките му там free и malloc благини върху джелезо с мемори мениджмънт и те така.... Не е за дребни контролери. Аз затова и не харесах nuttx - като искам posix и linux физиономия, просто слагам linux и толкова. |
|
| Автор: | TheWizard [ Пон Окт 01, 2018 11:41 am ] |
| Заглавие: | Re: malloc / free |
е сигурно е така ама за стандарт С от миналия век как не добавиха едно читаво пренасочване тва са 5,6 критични фунции, които като се заместят си става "почти" thread-safe приложение за малки контролери иначе трябва да компилирам всичкото std не съм се хванал за Nuttx-a - просто експеримент, там го гледам е сменил цялото std за някакви си 10 mutex-lock/unlock |
|
| Автор: | Цецо [ Пон Окт 01, 2018 11:52 am ] |
| Заглавие: | Re: malloc / free |
Еми то щото е ударил дървото, както и ти. |
|
| Автор: | miro_atc [ Пон Окт 01, 2018 2:44 pm ] | |||||||||
| Заглавие: | Re: malloc / free | |||||||||
И аз се зачудех как хер Нут ще остави такива проблемчета Принципно е така, всеки RTOS си заменя цялото std или не ползва емебедед версии като Newlib... И във всички останали случаи пак така се прави - или сменяш библиотечката изцяло или си ползваш твои функции. Това с "пренасочванията" е лоша идея и въпросът не опира само дали даден компилатор/линкер го може или не. Нали тоя код после трябва и да може да се поддържа |
||||||||||
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|