ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
4 мая
1300876 Топик полностью
Dingo (13.04.2023 17:42, просмотров: 299) ответил Dingo на В эклипсе в проекте убрал --specs=rdimon.specs поставил Use newlib-nano( --specs=nano.specs ) При Do not use syscalls( --specs=nosys.specs ) происходит что описал ниже; при отключенной ругается на отсутствие _sbrk _write_r _close _lseek_r _read_r' _getpid_r _getpid _fstat_r _fstat ; в подобном проекте видел заглушки на неиспользуемые и вызов из write() своего __io_putchar(). Вопрос по прежнему актуален: 1)где внятное описание этого всего
А вот и в syscalls.c в исходниках с левого гитхаба newlib\libc\sys\arm\ с атрибутом weak 

int __attribute__((weak))

_write (int file, const void * ptr, size_t len)

{

int slot = findslot (remap_handle (file));

int x = _swiwrite (file, ptr, len);

if (x == -1 || x == len)

return error (-1);

if (slot != MAX_OPEN_FILES)

openfiles[slot].pos += len - x;

return len - x;

}


Но видел и write() -> printf ("%c", b[i]);

А дальше посредством макропроцессора такая Дичь... Например:

#ifdef STRING_ONLY

# ifdef _FVWRITE_IN_STREAMIO

# define __SPRINT __ssprint_r

# else

# define __SPRINT __ssputs_r

# endif

#else

# ifdef _FVWRITE_IN_STREAMIO

# define __SPRINT __sprint_r

# else

# define __SPRINT __sfputs_r

# endif

#endif


Вот и что в качестве нижнего уровня реализовывать? То есть общего знаменателя нет?