Для avr есть - https://www.nongnu.org/avr-libc/user-ma … io_8h.html
Для stm32 нет
Или где-то что-то какое-то всё-таки есть?
stdio
Сообщений 1 страница 26 из 26
Поделиться12019-07-03 19:11:10
Поделиться22019-07-03 22:08:36
А какая вообще связь... между АВР и stdio... и для СТМ32 тем более ??? И что это вообще означает "Для stm32 нет" ???
Поделиться32019-07-04 07:19:11
Как это нет? Есть в newlib оно. syscalls.c только подпихнуть с заглушками, или nosys.spec использовать или -flto чтобы выкинуть отсылки на функции левые.
PS: речь о gcc, за другое понятия не имею, да и не нужно другое ничего.
Отредактировано NStorm (2019-07-04 07:19:42)
Поделиться42019-07-04 08:44:06
А я бы бил ломами по рукам тех, кто пихает куда ни попадя printf'ы и прочую гадость, коей на микроконтроллерах нет места!
Абдуринщики вообще иной раз до такого маразма доходят, что на своих абдуринах флоаты и даже даблы используют! А когда я вижу тригонометрические функции из math.h, мне становится совсем плохо...
Поделиться52019-07-04 09:49:23
Все ф-ции stdio работают на avr, для этого специально переделана libc [avr-libc]
Принципиальная разница с армами в том, что такое FILE для avr и arm
Вот например fgetc(uart1) - на avr сделать легко и просто, а как на stm32 ?
Отредактировано vt (2019-07-04 11:01:41)
Поделиться62019-07-04 18:35:11
А её разве нет в newlib для stm32?
https://github.com/eblot/newlib/blob/ma … io/fgetc.c
Не проверял и никогда не пользовался даже на AVR если честно. Может spec какой включить надо? Сейчас проверить негде особо.
Поделиться72019-07-05 09:04:57
NStorm, fgetc [и другим файловым ф-циям] из newlib вначале нужна fopen
А с fopen на мк проблемы )
Отредактировано vt (2019-07-05 10:44:36)
Поделиться82019-07-05 09:46:40
Ну и что??? Вся эта шняга большого серого брата... никогда на МК нормально работать не будет... даже на АВР... Проще сразу забыть...
Поделиться92019-07-05 09:59:20
Эта шняга вообще-то неотъемлемая часть си
Для avr она сделана и работает
А для кортексов - "здесь играйте, здесь не играйте, здесь рыбу заворачивали" )
Поделиться102019-07-05 12:03:25
Эта шняга вообще-то неотъемлемая часть си
Посмеялся...
В ноте к МСС18 прямо было написано... "только номинально, ограничено и без гарантий"... Если даже ИАР и Кейл этим не заморачиваются... значит это никому и не нужно...
Поделиться112019-07-05 13:55:56
даже ИАР и Кейл
Тоже посмеялся )
Поделиться122019-07-05 14:07:06
Над чем посмеялся??? Над "неотъемлемая часть си"??? Действительно... смешно... ))))))
Поделиться132019-07-05 14:31:48
HHIMERA, а как же Керниган и Ритчи, последние главы не читать?
Нет уж, если си, то со всеми плюшками
Или не си
Или трусы надеть, или крестик снять )
Поделиться142019-07-05 15:06:36
Если тебе надо, чтобы у тебя на микроконтроллере были stdin/stdout/stderr, то напиши соответствующие обертки над сисвызовами _write, _read и т.п.
Только нафиг оно нужно-то? Все эти говна из stdio годятся лишь для компьютера, на микроконтроллере это — жутчайший оверхед и признак абдурины головного мозга.
Поделиться152019-07-05 15:14:25
Не stdin/stdout/stderr, а usartN, spiN, i2cN и т.д. вплоть до gpio и adc
И о каком оверхеде речь, если всё "аппаратно", с dma и всё такое
Ф-ции stdio с буферами работают, не с железом
Отредактировано vt (2019-07-05 15:29:01)
Поделиться162019-07-05 16:03:32
getc [и другим файловым ф-циям] из newlib вначале нужна fopen
Ни fopen, а FILE *stream - тут и свой можно сделать. Ну и да, оберточки свои придется писать. Пока так вроде и советуют делать. Видимо вот прям такого, как в avr-libc не сделали.
Но честно, тоже не доверил бы такое библиотекам на кортексах. Ладно в AVR - всё просто и вариантов особо нет. А тут будет либа - да фиг его знает, как оно там сделано. Через DMA или еще как. Через жопу сделают как HAL... Ну т.е. ладно бы было к ним доверие, но нет ведь его.
Поделиться172019-07-05 16:17:39
И о каком оверхеде речь, если всё "аппаратно", с dma и всё такое
Ну так я и говорю: чтобы все работало, ты сам должен нижний уровень написать.
А оверхед как раз из-за использования говнофункций: printf/scanf и т.п.
Не надо STM32 превращать в абдурину всякими калокубами и stdio!
Поделиться182019-07-05 16:30:22
Вот что такое FILE в newlib
struct __sFILE { unsigned char *_p; /* current position in (some) buffer */ int _r; /* read space left for getc() */ int _w; /* write space left for putc() */ short _flags; /* flags, below; this FILE is free if 0 */ short _file; /* fileno, if Unix descriptor, else -1 */ struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ int _lbfsize; /* 0 or -_bf._size, for inline putc */ #ifdef _REENT_SMALL struct _reent *_data; #endif /* operations */ void * _cookie; /* cookie passed to io functions */ _READ_WRITE_RETURN_TYPE (*_read) (struct _reent *, void *, char *, _READ_WRITE_BUFSIZE_TYPE); _READ_WRITE_RETURN_TYPE (*_write) (struct _reent *, void *, const char *, _READ_WRITE_BUFSIZE_TYPE); _fpos_t (*_seek) (struct _reent *, void *, _fpos_t, int); int (*_close) (struct _reent *, void *); /* separate buffer for long sequences of ungetc() */ struct __sbuf _ub; /* ungetc buffer */ unsigned char *_up; /* saved _p when _p is doing ungetc data */ int _ur; /* saved _r when _r is counting ungetc data */ /* tricks to meet minimum requirements even when malloc() fails */ unsigned char _ubuf[3]; /* guarantee an ungetc() buffer */ unsigned char _nbuf[1]; /* guarantee a getc() buffer */ /* separate buffer for fgetline() when line crosses buffer boundary */ struct __sbuf _lb; /* buffer for fgetline() */ /* Unix stdio files get aligned to block boundaries on fseek() */ int _blksize; /* stat.st_blksize (may be != _bf._size) */ _off_t _offset; /* current lseek offset */ #ifndef _REENT_SMALL struct _reent *_data; /* Here for binary compatibility? Remove? */ #endif #ifndef __SINGLE_THREAD__ _flock_t _lock; /* for thread-safety locking */ #endif _mbstate_t _mbstate; /* for wide char stdio functions. */ int _flags2; /* for future use */ };
А вот что такое FILE в avr-libc
struct __file { char *buf; /* buffer pointer */ unsigned char unget; /* ungetc() buffer */ uint8_t flags; /* flags, see below */ #define __SRD 0x0001 /* OK to read */ #define __SWR 0x0002 /* OK to write */ #define __SSTR 0x0004 /* this is an sprintf/snprintf string */ #define __SPGM 0x0008 /* fmt string is in progmem */ #define __SERR 0x0010 /* found error */ #define __SEOF 0x0020 /* found EOF */ #define __SUNGET 0x040 /* ungetc() happened */ #define __SMALLOC 0x80 /* handle is malloc()ed */ #if 0 /* possible future extensions, will require uint16_t flags */ #define __SRW 0x0100 /* open for reading & writing */ #define __SLBF 0x0200 /* line buffered */ #define __SNBF 0x0400 /* unbuffered */ #define __SMBF 0x0800 /* buf is from malloc */ #endif int size; /* size of buffer */ int len; /* characters read or written so far */ int (*put)(char, struct __file *); /* function to write one char to device */ int (*get)(struct __file *); /* function to read one char from device */ void *udata; /* User defined and accessible data. */ };
Поделиться192019-07-05 16:55:29
Не надо STM32 превращать в абдурину всякими калокубами и stdio!
Ладно куб, но stdio !?
Это ты на что покушаешься - на основы основ? )
Поделиться202019-07-05 17:02:57
stdio только на компьютере нужен, чтобы не изобретать каждый раз printf. А на МК оно нафиг не сдалось!
Поделиться212019-07-05 17:07:12
Вместо stdio каждый изобретает какую-то myio_v100500
И где после этого переносимость и повторное использование сишного софта на мк?
За что боролись [с ассемблером]?
Как белки в колесе )
Отредактировано vt (2019-07-05 17:20:12)
Поделиться222019-07-05 19:21:52
И где после этого переносимость и повторное использование сишного софта на мк?
Так бери сниппет, да копируй себе на здоровье. Я со своими так и делаю... Зато не сжирает лишний килобайт флеша и не тормозит так сильно.
Поделиться232019-07-06 08:57:54
Кто ищет, тот найдёт
Нашлось кое-что интересное
Finding a Libc for tiny embedded ARM systems - https://keithp.com/blogs/embedded-arm-libc/
Поделиться242019-07-06 10:13:27
Я так понял он портировал avr-libc для STM32? Занятно )
Поделиться252019-07-06 10:32:30
Нет, он только в newlib заменил родную stdio на stdio из avr-libc
Портировать всю libc это убиться )
Там на главной сайта есть ссылка на готовый дебиановский пакет с бинарниками
Автор кстати - это https://en.wikipedia.org/wiki/Keith_Packard
Отредактировано vt (2019-07-06 11:31:30)
Поделиться262019-07-08 09:21:27
В Espressif пошли другим путём - добавли к newlib Virtual filesystem
https://docs.espressif.com/projects/esp … e/vfs.html