From 8468f22e581a29baac58bd2ef3257b0d048b146a Mon Sep 17 00:00:00 2001 From: Markus Hitter Date: Sun, 4 Jul 2010 18:34:24 +0200 Subject: [PATCH] Eliminate serial_writechar_P(). serial_writechar() perfoms better and uses less memory. Also, reviewed all code for usage of single-character strings. --- mendel/gcode.c | 6 +++--- mendel/serial.c | 14 ++++++++------ mendel/serial.h | 1 - 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/mendel/gcode.c b/mendel/gcode.c index d8bceba..01e0a58 100644 --- a/mendel/gcode.c +++ b/mendel/gcode.c @@ -332,14 +332,14 @@ void scan_char(uint8_t c) { else { serial_writestr_P(PSTR("Expected checksum ")); serwrite_uint8(next_target.checksum_calculated); - serial_writestr_P(PSTR("\n")); + serial_writechar('\n'); request_resend(); } } else { serial_writestr_P(PSTR("Expected line number ")); serwrite_uint32(next_target.N_expected); - serial_writestr_P(PSTR("\n")); + serial_writechar('\n'); request_resend(); } @@ -735,6 +735,6 @@ void process_gcode_command(GCODE_COMMAND *gcmd) { void request_resend() { serial_writestr_P(PSTR("Resend:")); serwrite_uint8(next_target.N); - serial_writestr_P(PSTR("\n")); + serial_writechar('\n'); } diff --git a/mendel/serial.c b/mendel/serial.c index 767bdeb..13703c2 100644 --- a/mendel/serial.c +++ b/mendel/serial.c @@ -163,19 +163,21 @@ void serial_writestr(uint8_t *data) /* Write from FLASH -*/ -void serial_writechar_P(PGM_P data) -{ - serial_writechar(pgm_read_byte(data)); -} + Extensions to output flash memory pointers. This prevents the data to + become part of the .data segment instead of the .code segment. That means + less memory is consumed for multi-character writes. + + For single character writes (i.e. '\n' instead of "\n"), using + serial_writechar() directly is the better choice. +*/ void serial_writeblock_P(PGM_P data, int datalen) { int i; for (i = 0; i < datalen; i++) - serial_writechar_P(&data[i]); + serial_writechar(pgm_read_byte(&data[i])); } void serial_writestr_P(PGM_P data) diff --git a/mendel/serial.h b/mendel/serial.h index 1f30c2c..73a7b18 100644 --- a/mendel/serial.h +++ b/mendel/serial.h @@ -24,7 +24,6 @@ void serial_writeblock(void *data, int datalen); void serial_writestr(uint8_t *data); // write from flash -void serial_writechar_P(PGM_P data); void serial_writeblock_P(PGM_P data, int datalen); void serial_writestr_P(PGM_P data);