projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Add program flash function
[fw/altos]
/
src
/
core
/
ao_stdio.c
diff --git
a/src/core/ao_stdio.c
b/src/core/ao_stdio.c
index 656b23c9e88fadc5f65b560af8487692d2b27c89..977d74b1800bdafc2cc24be64bcc99331f608ed1 100644
(file)
--- a/
src/core/ao_stdio.c
+++ b/
src/core/ao_stdio.c
@@
-96,13
+96,15
@@
flush(void)
__xdata uint8_t ao_stdin_ready;
char
__xdata uint8_t ao_stdin_ready;
char
-getchar(void) __reentrant
__critical
+getchar(void) __reentrant
{
{
-
char
c;
- int8_t stdio
= ao_cur_stdio
;
+
int
c;
+ int8_t stdio;
+ ao_arch_block_interrupts();
+ stdio = ao_cur_stdio;
for (;;) {
for (;;) {
- c = ao_stdios[stdio].pollchar();
+ c = ao_stdios[stdio].
_
pollchar();
if (c != AO_READ_AGAIN)
break;
if (++stdio == ao_num_stdios)
if (c != AO_READ_AGAIN)
break;
if (++stdio == ao_num_stdios)
@@
-111,6
+113,7
@@
getchar(void) __reentrant __critical
ao_sleep(&ao_stdin_ready);
}
ao_cur_stdio = stdio;
ao_sleep(&ao_stdin_ready);
}
ao_cur_stdio = stdio;
+ ao_arch_release_interrupts();
return c;
}
return c;
}
@@
-121,13
+124,13
@@
ao_echo(void)
}
int8_t
}
int8_t
-ao_add_stdio(
char (*
pollchar)(void),
+ao_add_stdio(
int (*_
pollchar)(void),
void (*putchar)(char),
void (*flush)(void)) __reentrant
{
if (ao_num_stdios == AO_NUM_STDIOS)
ao_panic(AO_PANIC_STDIO);
void (*putchar)(char),
void (*flush)(void)) __reentrant
{
if (ao_num_stdios == AO_NUM_STDIOS)
ao_panic(AO_PANIC_STDIO);
- ao_stdios[ao_num_stdios].
pollchar =
pollchar;
+ 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].echo = 1;
ao_stdios[ao_num_stdios].putchar = putchar;
ao_stdios[ao_num_stdios].flush = flush;
ao_stdios[ao_num_stdios].echo = 1;