Skip to content

Commit 6cdf50c

Browse files
authored
Reset ANSI colors to default before newline (#556)
UART output is printed in color as follows: AVR_LOG(avr, LOG_OUTPUT, FONT_GREEN "%s\n" FONT_DEFAULT, ...); Trace and error messages are formatted similarly, with FONT_DEFAULT following the newline. As these messages go to stdout, which defaults to being line-buffered, the FONT_DEFAULT ANSI escape code is not output to the terminal right away, and stays in the stdout output buffer. If this is followed by a message printed to stderr, which is unbuffered, that second message will be unduly colored. Fix this by sending FONT_DEFAULT before the newline. While we are at it, remove a stray FONT_DEFAULT from a LOG_WARNING uncolored message.
1 parent 7aaf8a6 commit 6cdf50c

File tree

3 files changed

+8
-10
lines changed

3 files changed

+8
-10
lines changed

simavr/sim/avr_uart.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ avr_uart_udr_write(
277277
if (v == '\n' || p->stdio_len == maxsize) {
278278
p->stdio_len = 0;
279279
AVR_LOG(avr, LOG_OUTPUT,
280-
FONT_GREEN "%s\n" FONT_DEFAULT, p->stdio_out);
280+
FONT_GREEN "%s" FONT_DEFAULT "\n", p->stdio_out);
281281
}
282282
}
283283
TRACE(printf("UDR%c(%02x) = %02x\n", p->name, addr, v);)

simavr/sim/sim_core.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ void crash(avr_t* avr)
136136

137137
for (int i = OLD_PC_SIZE-1; i > 0; i--) {
138138
int pci = (avr->trace_data->old_pci + i) & 0xf;
139-
printf(FONT_RED "*** %04x: %-25s RESET -%d; sp %04x\n" FONT_DEFAULT,
139+
printf(FONT_RED "*** %04x: %-25s RESET -%d; sp %04x" FONT_DEFAULT "\n",
140140
avr->trace_data->old[pci].pc,
141141
avr->trace_data->codeline ?
142142
avr->trace_data->codeline[avr->trace_data->old[pci].pc>>1] :
@@ -220,8 +220,7 @@ void avr_core_watch_write(avr_t *avr, uint16_t addr, uint8_t v)
220220
}
221221
if (addr < 32) {
222222
AVR_LOG(avr, LOG_ERROR, FONT_RED
223-
"CORE: *** Invalid write address PC=%04x SP=%04x O=%04x Address %04x=%02x low registers\n"
224-
FONT_DEFAULT,
223+
"CORE: *** Invalid write address PC=%04x SP=%04x O=%04x Address %04x=%02x low registers" FONT_DEFAULT "\n",
225224
avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc), addr, v);
226225
crash(avr);
227226
}
@@ -233,7 +232,7 @@ void avr_core_watch_write(avr_t *avr, uint16_t addr, uint8_t v)
233232
*/
234233
if (avr->trace_data->stack_frame_index > 1 && addr > avr->trace_data->stack_frame[avr->trace_data->stack_frame_index-2].sp) {
235234
printf( FONT_RED "%04x : munching stack "
236-
"SP %04x, A=%04x <= %02x\n" FONT_DEFAULT,
235+
"SP %04x, A=%04x <= %02x" FONT_DEFAULT "\n",
237236
avr->pc, _avr_sp_get(avr), addr, v);
238237
}
239238
#endif
@@ -252,8 +251,7 @@ uint8_t avr_core_watch_read(avr_t *avr, uint16_t addr)
252251
if (addr > avr->ramend) {
253252
AVR_LOG(avr, LOG_WARNING,
254253
"CORE: *** Wrapping read address "
255-
"PC=%04x SP=%04x O=%04x Address %04x %% %04x --> %04x\n"
256-
FONT_DEFAULT,
254+
"PC=%04x SP=%04x O=%04x Address %04x %% %04x --> %04x\n",
257255
avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc),
258256
addr, (avr->ramend + 1), addr % (avr->ramend + 1));
259257
addr = addr % (avr->ramend + 1);
@@ -464,13 +462,13 @@ static void _avr_invalid_opcode(avr_t * avr)
464462
}
465463
avr->pc += 2; // Step over.
466464
#if CONFIG_SIMAVR_TRACE
467-
printf( FONT_RED "*** %04x: %-25s Invalid Opcode SP=%04x O=%04x \n" FONT_DEFAULT,
465+
printf( FONT_RED "*** %04x: %-25s Invalid Opcode SP=%04x O=%04x" FONT_DEFAULT "\n",
468466
avr->pc,
469467
avr->trace_data->codeline[avr->pc>>1],
470468
_avr_sp_get(avr),
471469
_avr_flash_read16le(avr, avr->pc));
472470
#else
473-
AVR_LOG(avr, LOG_ERROR, FONT_RED "CORE: *** %04x: Invalid Opcode SP=%04x O=%04x \n" FONT_DEFAULT,
471+
AVR_LOG(avr, LOG_ERROR, FONT_RED "CORE: *** %04x: Invalid Opcode SP=%04x O=%04x" FONT_DEFAULT "\n",
474472
avr->pc, _avr_sp_get(avr), _avr_flash_read16le(avr, avr->pc));
475473
#endif
476474
}

simavr/sim/sim_core.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void avr_dump_state(avr_t * avr);
8080
#define DUMP_STACK() \
8181
for (int i = avr->trace_data->stack_frame_index; i; i--) {\
8282
int pci = i-1;\
83-
printf(FONT_RED "*** %04x: %-25s sp %04x\n" FONT_DEFAULT,\
83+
printf(FONT_RED "*** %04x: %-25s sp %04x" FONT_DEFAULT "\n",\
8484
avr->trace_data->stack_frame[pci].pc, \
8585
avr->trace_data->codeline ? avr->trace_data->codeline[avr->trace_data->stack_frame[pci].pc>>1]->symbol : "unknown", \
8686
avr->trace_data->stack_frame[pci].sp);\

0 commit comments

Comments
 (0)