eeprom: provide smaller code for SERIAL_ECHOPAIR
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 and SDSUPPORT enabled). Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
This commit is contained in:
		| @@ -84,7 +84,11 @@ const char echomagic[] PROGMEM ="echo:"; | |||||||
| #define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x) | #define SERIAL_ECHOLN(x) SERIAL_PROTOCOLLN(x) | ||||||
| #define SERIAL_ECHOLNPGM(x) SERIAL_PROTOCOLLNPGM(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_P(PSTR(name),(value))) | ||||||
|  |  | ||||||
|  | void serial_echopair_P(const char *s_P, float v); | ||||||
|  | void serial_echopair_P(const char *s_P, double v); | ||||||
|  | void serial_echopair_P(const char *s_P, unsigned long v); | ||||||
|  |  | ||||||
|  |  | ||||||
| //things to write to serial from Programmemory. saves 400 to 2k of RAM. | //things to write to serial from Programmemory. saves 400 to 2k of RAM. | ||||||
|   | |||||||
| @@ -203,6 +203,13 @@ bool Stopped=false; | |||||||
|  |  | ||||||
| void get_arc_coordinates(); | void get_arc_coordinates(); | ||||||
|  |  | ||||||
|  | void serial_echopair_P(const char *s_P, float v) | ||||||
|  |     { serialprintPGM(s_P); SERIAL_ECHO(v); } | ||||||
|  | void serial_echopair_P(const char *s_P, double v) | ||||||
|  |     { serialprintPGM(s_P); SERIAL_ECHO(v); } | ||||||
|  | void serial_echopair_P(const char *s_P, unsigned long v) | ||||||
|  |     { serialprintPGM(s_P); SERIAL_ECHO(v); } | ||||||
|  |  | ||||||
| extern "C"{ | extern "C"{ | ||||||
|   extern unsigned int __bss_end; |   extern unsigned int __bss_end; | ||||||
|   extern unsigned int __heap_start; |   extern unsigned int __heap_start; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user