SERIAL_ECHOPAIR implies, eventually, two calls to MYSERIAL.print. One
of these has FORCE_INLINE for a per-character loop, and both involve
constructing a method call rather than a simple function call.
Produce better and smaller code by providing three specialised
functions serial_echopair. This saves 672 bytes of program memory
(with EEPROM_SETTINGS enabled).
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
#define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x)
#define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(x)
-#define SERIAL_ECHOPAIR(name,value) {SERIAL_ECHOPGM(name);SERIAL_ECHO(value);}
+#define SERIAL_ECHOPAIR(name,value) (serial_echopair(PSTR(name),(value)))
+
+void serial_echopair(const PROGMEM char *s, float v);
+void serial_echopair(const PROGMEM char *s, double v);
+void serial_echopair(const PROGMEM char *s, unsigned long v);
//things to write to serial from Programmemory. saves 400 to 2k of RAM.
void get_arc_coordinates();
+void serial_echopair(const PROGMEM char *s, float v)
+ { serialprintPGM(s); SERIAL_ECHO(v); }
+void serial_echopair(const PROGMEM char *s, double v)
+ { serialprintPGM(s); SERIAL_ECHO(v); }
+void serial_echopair(const PROGMEM char *s, unsigned long v)
+ { serialprintPGM(s); SERIAL_ECHO(v); }
+
extern "C"{
extern unsigned int __bss_end;
extern unsigned int __heap_start;