УРА! Некропост!
Народ, что за фигня: функция printf каким-то образом тихо оверрайдится в зависимости от того, как заканчивается строка. Пример:
printf(" Disk: disk not initialized or not inserted.
\n");
printf(" Disk: attempting to initialize...
\r");
Дизассемблер:
74 printf(" Disk: disk not initialized or not inserted.\n");
0x08000894: ldr r0, [pc, #68] ; (0x80008dc <main+144>)
0x08000896: bl 0x8001054
<puts> 75 printf(" Disk: attempting to initialize...\r");
0x0800089a: ldr r0, [pc, #68] ; (0x80008e0 <main+148>)
0x0800089c: bl 0x8001028
<printf>Вот кто и где это делает?
Добавлено спустя 1 минуту 14 секунд:А, причем еще и строку правит, т.е. подменяет "\n" на 0
Добавлено спустя 2 минуты 11 секунд:Среда - CooCox IDE, проблемы начались после прикручивания FatFS. Что-то мне кажется я где-то в коде видел строку "replaces \n blah blah blah", но теперь же фиг найдешь. А главное, непонятно, что искать.
Добавлено спустя 3 минуты 12 секунд:Блин, нашел в ff.c вот такое:
#if _USE_STRFUNC >= 2
if (c == '\n') f_putc ('\r', fil); /* LF -> CRLF conversion */
#endif
Но как оно умудряется перехватывать вызовы функций из stdio?
Добавлено спустя 15 минут 1 секунду:http://www.ciselant.de/projects/gcc_pri ... rintf.htmlThe string constant in line 4 changed from "hello worldn" to "hello world". The call printf on line 16 changed to call puts on line 14.
Нихрина себе. Нету у меня никакой оптимизации...
Добавлено спустя 7 минут 15 секунд:Ага, попалась гадина...
> gcc-4.0.2
-fno-builtin -O0 example1.c
> nm --undefined-only a.out
w __gmon_start__
w _Jv_RegisterClasses
U __libc_start_main@@GLIBC_2.0
U printf@@GLIBC_2.0
Или
> gcc-4.0.2
-fno-builtin-printf -O0 example1.c
> nm --undefined-only a.out
w __gmon_start__
w _Jv_RegisterClasses
U __libc_start_main@@GLIBC_2.0
U printf@@GLIBC_2.0