ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
452949
VVB (11.10.2013 20:16 - 14.10.2013 08:40, просмотров: 2620)
Объясните про 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"); это есть символ, затем почему-то берётся его адрес. ?!?