Для 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