X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fkernel%2Fao_stdio.c;h=c578c57cd920b3bc6ea5e4af4c1af8520cfd8283;hb=d225adc3af9e5726d436cbbdbf8dcc5837e50804;hp=227499c81524ae4a3d521bf25ad4a460f7882cd5;hpb=7c04888cf9809e0c73f0813c74e8dd972facde3a;p=fw%2Faltos diff --git a/src/kernel/ao_stdio.c b/src/kernel/ao_stdio.c index 227499c8..c578c57c 100644 --- a/src/kernel/ao_stdio.c +++ b/src/kernel/ao_stdio.c @@ -72,13 +72,13 @@ #define AO_NUM_STDIOS (HAS_USB + PACKET_HAS_SLAVE + USE_SERIAL_STDIN + CONSOLE_STDIN) -__xdata struct ao_stdio ao_stdios[AO_NUM_STDIOS]; +struct ao_stdio ao_stdios[AO_NUM_STDIOS]; #if AO_NUM_STDIOS > 1 -__pdata int8_t ao_cur_stdio; -__pdata int8_t ao_num_stdios; +int8_t ao_cur_stdio; +int8_t ao_num_stdios; #else -__pdata int8_t ao_cur_stdio; +int8_t ao_cur_stdio; #define ao_cur_stdio 0 #define ao_num_stdios 0 #endif @@ -108,10 +108,10 @@ flush(void) ao_stdios[ao_cur_stdio].flush(); } -__xdata uint8_t ao_stdin_ready; +uint8_t ao_stdin_ready; char -ao_getchar(void) __reentrant +ao_getchar(void) { int c; int8_t stdio; @@ -145,13 +145,13 @@ ao_echo(void) int8_t ao_add_stdio(int (*_pollchar)(void), void (*putchar)(char), - void (*flush)(void)) __reentrant + void (*_flush)(void)) { if (ao_num_stdios == AO_NUM_STDIOS) ao_panic(AO_PANIC_STDIO); ao_stdios[ao_num_stdios]._pollchar = _pollchar; ao_stdios[ao_num_stdios].putchar = putchar; - ao_stdios[ao_num_stdios].flush = flush; + ao_stdios[ao_num_stdios].flush = _flush; ao_stdios[ao_num_stdios].echo = 1; #if AO_NUM_STDIOS > 1 return ao_num_stdios++; @@ -188,4 +188,20 @@ ao_flushc(FILE *ignore) static FILE __stdio = FDEV_SETUP_STREAM(ao_putc, ao_getc, ao_flushc, _FDEV_SETUP_RW); +#ifdef PICOLIBC_STDIO_GLOBALS + +#ifdef __strong_reference +#define STDIO_ALIAS(x) __strong_reference(stdin, x); +#else +#define STDIO_ALIAS(x) FILE *const x = &__stdio; +#endif + +FILE *const stdin = &__stdio; +STDIO_ALIAS(stdout); +STDIO_ALIAS(stderr); + +#else + FILE *const __iob[3] = { &__stdio, &__stdio, &__stdio }; + +#endif