From 1b14bdb55e8dd1bdbcc410f16a500802c741741c Mon Sep 17 00:00:00 2001 From: Michel Pollet Date: Wed, 6 Jun 2012 08:47:20 +0100 Subject: [PATCH] uart: Made the stdio buffer non-static Thanks to sebastien.besombes@gmail.com for the report Signed-off-by: Michel Pollet --- simavr/sim/avr_uart.c | 16 +++++++++------- simavr/sim/avr_uart.h | 3 +++ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/simavr/sim/avr_uart.c b/simavr/sim/avr_uart.c index 9fc5611..8adfe54 100644 --- a/simavr/sim/avr_uart.c +++ b/simavr/sim/avr_uart.c @@ -34,6 +34,7 @@ #include #include #include +#include #include "avr_uart.h" #include "sim_hex.h" @@ -156,13 +157,14 @@ static void avr_uart_write(struct avr_t * avr, avr_io_addr_t addr, uint8_t v, vo p->usec_per_byte, avr_uart_txc_raise, p); // should be uart speed dependent if (p->flags & AVR_UART_FLAG_STDIO) { - static char buf[128]; - static int l = 0; - buf[l++] = v < ' ' ? '.' : v; - buf[l] = 0; - if (v == '\n' || l == 127) { - l = 0; - printf( FONT_GREEN "%s\n" FONT_DEFAULT, buf); + const int maxsize = 256; + if (!p->stdio_out) + p->stdio_out = malloc(maxsize); + p->stdio_out[p->stdio_len++] = v < ' ' ? '.' : v; + p->stdio_out[p->stdio_len] = 0; + if (v == '\n' || p->stdio_len == maxsize) { + p->stdio_len = 0; + printf( FONT_GREEN "%s\n" FONT_DEFAULT, p->stdio_out); } } TRACE(printf("UDR%c(%02x) = %02x\n", p->name, addr, v);) diff --git a/simavr/sim/avr_uart.h b/simavr/sim/avr_uart.h index dc9e805..933af11 100644 --- a/simavr/sim/avr_uart.h +++ b/simavr/sim/avr_uart.h @@ -106,6 +106,9 @@ typedef struct avr_uart_t { uint32_t flags; avr_cycle_count_t usec_per_byte; + + uint8_t * stdio_out; + int stdio_len; // current size in the stdio output } avr_uart_t; /* takes a uint32_t* as parameter */ -- 2.39.5