ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
1301390 Топик полностью
Dingo (15.04.2023 18:05, просмотров: 257) ответил Dingo на printf(), __io_putchar, _write(), --specs=nosys.specs, --nano.specs и вот это вот всё: хочу сделать печать на UART при использовании printf(). Что для этого надо для arm-none-eabi? Понятно, что можно сделать через snprintf() и свой буфер, но есть впечатление, что это изобретение велосипеда. Вот только беда - к существующему нет внятного описания. Или я поисковикам вопрос не смог задать правильно.
Немного по поискам, может кому-то облегчит их и сократит путь. И о причинах. Главное - хотелось как и задумано пользоваться printf() как стандартной и всем понятой функцией просто подключив <stdio.h>. У меня - не получилось. Потому что не "просто вывести на консоль", а консоль это stdout, который есть файл, который есть устройство, ... в доме который построил Джек. В моём случае FILE (в т.ч. stdout) содержит поле _write с 

прототипом int (*) (_reent *, void *, const char *, int) и можно было бы заменить на свою функцию при инициализации, но представил, сколько всего бедный char переживёт, прежде чем доберётся до UART - плюнул и решил свой примерно xprintf через vsnprintf (флеш сейчас(пока что?) не экономлю). Строки --specs=*.specs задают компилятору файлы с информацией линкеру, у меня лежат рядом с библиотеками. То есть это lib/nano.specs Про specs

https://stackoverflow.com/questions/65453293/what-are-nosys-nano-rdimon-terms-when-using-arm-gcc

Про _write без IDE с автодополнением даже не увидел бы возможности, тоже примечательно.