ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
1300870 Топик полностью
Dingo (13.04.2023 16:48, просмотров: 258) ответил Zoro на гнусный компилятор - это от слова "гнусный". Эта скотиняка в зависимости от аргументов для printf() делает разные "деревья вызовов". Но по идее любое дерево упирается в один "корень" - вот его и надо "замещать". в моём случае (частный) это outbyte(ch)
Печать символьной строки без форматирования через % вызывает puts_r [opennet: int _puts_r(void *reent, const char *s); ] которая дёргает swbuf_r() [ int _EXFUN(__swbuf_r, (struct _reent *, int, FILE *)); ] А вот кто и как потом с этим буфером работает - загадка... Сам __swbuf_r инициализирует внутри, __swsetup_r . _write_r ещё есть в listing lss с вызовом _write с таким дизассемблером 

Disassembly of section .text._write:

0002d1cc <_write>:

2d1cc: e59f300c ldr r3, [pc, #12] ; 2d1e0 <_write+0x14>

2d1d0: e3a02058 mov r2, #88 ; 0x58

2d1d4: e5832000 str r2, [r3]

2d1d8: e3e00000 mvn r0, #0

2d1dc: e12fff1e bx lr ; === Но тут что-то вызывает!!!

2d1e0: 00080004 .word 0x00080004


Думаю, что тут заглушка и есть, сильно уж мало

А вот и исходник вроде как

_ssize_t

_write_r (struct _reent *ptr,

int fd,

const void *buf,

size_t cnt)

{

_ssize_t ret;

errno = 0;

if ((ret = (_ssize_t)_write (fd, buf, cnt)) == -1 && errno != 0)

__errno_r(ptr) = errno;

return ret;

}