Объясните про newlib Имеется код, который нужно подключать к проекту для работы с newlib.
/* Register name faking - works in collusion with the linker. */
register char * stack_ptr asm ("sp");
caddr_t _sbrk_r (struct _reent *r, int incr)
{
extern char end asm ("end"); /* Defined by the linker. */
static char * heap_end;
char * prev_heap_end;
if (heap_end == NULL)
heap_end = & end;
prev_heap_end = heap_end;
if (heap_end + incr > stack_ptr)
{
/* Some of the libstdc++-v3 tests rely upon detecting
out of memory errors, so do not abort here. */
errno = ENOMEM;
return (caddr_t) -1;
}
heap_end += incr;
return (caddr_t) prev_heap_end;}
Тулчейн ARM GCC + newlib
Что означают эта строка?
register char * stack_ptr asm ("sp");
"объявляется глобальная переменная регистрового типа как указатель на символьный тип данных" и ещё какая-то хрень. Безумие с точки зрения Си?
Здесь какие-то догадки написаны
http://forum.vingr …nter/f-92/t-71397.html
И вот эта строка
extern char end asm ("end");
это есть символ, затем почему-то берётся его адрес. ?!?