Цитата(Сергей Борщ @ Apr 21 2009, 19:48)

Насколько я понимаю - просто написать свои функции с такими же именами. Они будут подлинковываться взамен библиотечных, точно так же как подлинковываются putchar(), __write()
там не все так просто.
В stdlib malloc определяется как:
Код
#ifndef _NO_DEFINITIONS_IN_HEADER_FILES
#ifndef _DO_NOT_INLINE_MALLOC
#pragma inline
void * malloc(size_t _S)
{
return _GLUE(__DEF_PTR_MEM__,_malloc(_S));
}
#endif /* _DO_NOT_INLINE_MALLOC */
#endif /* _NO_DEFINITIONS_IN_HEADER_FILES */
После препроцессора из stdlib.h получается:
Код
__intrinsic void * malloc(size_t);
...
__intrinsic void __data * __data_malloc(__data_size_t);
#pragma inline
void * malloc(size_t _S)
{
return __data_malloc(_S);
}
В листинге получается:
Код
133 pSlon = malloc(1000);
\ 00000004 64409FE5 LDR R4,??main_0 ;; pSlon
\ 00000008 FA0FA0E3 MOV R0,#+1000
\ 0000000C ........ BL __data_malloc
\ 00000010 000084E5 STR R0,[R4, #+0]
я так понимаю, можно как-то рулить определениями _NO_DEFINITIONS_IN_HEADER_FILES и/или _DO_NOT_INLINE_MALLOC , в которые завернуты определения функций менеджера динамической памяти в stdlib.h, но вопрос - как сделать кошерно? В документации пока не нашел.
Цитата(HARMHARM @ Apr 21 2009, 19:36)

Я вообще-то не очень разбирался, но есть два метода:
1) Наглый:
...
#define malloc(size) myMalloc(size)
#define free(ptr) myFree(ptr)
это не так, как хотелось бы.
Цитата
2) Правильный:
Можно почитать в главе "Overriding library modules" в ARM® IAR C/C++ Compiler Reference Guide. Суть в подключении своих функций, они должны в командной строке линкера быть перед библиотечными.
Завтра попробую еще почитать, сегодня уже голова плохо работает.
Цитата
Вы же cstartup стандартный заменяете?
Нет, зачем? Мне функциональности low_level_init() более чем достаточно.