More than 7.5KB saved by slight refactoring of printing to serial line

This commit is contained in:
DRracer 2019-07-12 10:10:56 +02:00
parent a38f37aa06
commit a3fde091ab
4 changed files with 63 additions and 76 deletions

View File

@ -79,9 +79,9 @@ extern FILE _uartout;
#define SERIAL_PROTOCOL_F(x,y) (MYSERIAL.print(x,y)) #define SERIAL_PROTOCOL_F(x,y) (MYSERIAL.print(x,y))
#define SERIAL_PROTOCOLPGM(x) (serialprintPGM(PSTR(x))) #define SERIAL_PROTOCOLPGM(x) (serialprintPGM(PSTR(x)))
#define SERIAL_PROTOCOLRPGM(x) (serialprintPGM((x))) #define SERIAL_PROTOCOLRPGM(x) (serialprintPGM((x)))
#define SERIAL_PROTOCOLLN(x) (MYSERIAL.print(x),MYSERIAL.write('\n')) #define SERIAL_PROTOCOLLN(x) (MYSERIAL.println(x)/*,MYSERIAL.write('\n')*/)
#define SERIAL_PROTOCOLLNPGM(x) (serialprintPGM(PSTR(x)),MYSERIAL.write('\n')) #define SERIAL_PROTOCOLLNPGM(x) (serialprintPGM(PSTR(x)),MYSERIAL.println()/*write('\n')*/)
#define SERIAL_PROTOCOLLNRPGM(x) (serialprintPGM((x)),MYSERIAL.write('\n')) #define SERIAL_PROTOCOLLNRPGM(x) (serialprintPGM((x)),MYSERIAL.println()/*write('\n')*/)
extern const char errormagic[] PROGMEM; extern const char errormagic[] PROGMEM;
@ -111,15 +111,9 @@ void serial_echopair_P(const char *s_P, unsigned long v);
//Things to write to serial from Program memory. Saves 400 to 2k of RAM. //Things to write to serial from Program memory. Saves 400 to 2k of RAM.
FORCE_INLINE void serialprintPGM(const char *str) // Making this FORCE_INLINE is not a good idea when running out of FLASH
{ // I'd rather skip a few CPU ticks than 5.5KB (!!) of FLASH
char ch=pgm_read_byte(str); void serialprintPGM(const char *str);
while(ch)
{
MYSERIAL.write(ch);
ch=pgm_read_byte(++str);
}
}
bool is_buffer_empty(); bool is_buffer_empty();
void get_command(); void get_command();

View File

@ -96,7 +96,7 @@ class MarlinSerial //: public Stream
static int read(void); static int read(void);
static void flush(void); static void flush(void);
static FORCE_INLINE int available(void) static /*FORCE_INLINE*/ int available(void)
{ {
return (unsigned int)(RX_BUFFER_SIZE + rx_buffer.head - rx_buffer.tail) % RX_BUFFER_SIZE; return (unsigned int)(RX_BUFFER_SIZE + rx_buffer.head - rx_buffer.tail) % RX_BUFFER_SIZE;
} }
@ -184,14 +184,14 @@ class MarlinSerial //: public Stream
public: public:
static FORCE_INLINE void write(const char *str) static /*FORCE_INLINE*/ void write(const char *str)
{ {
while (*str) while (*str)
write(*str++); write(*str++);
} }
static FORCE_INLINE void write(const uint8_t *buffer, size_t size) static /*FORCE_INLINE*/ void write(const uint8_t *buffer, size_t size)
{ {
while (size--) while (size--)
write(*buffer++); write(*buffer++);

View File

@ -411,6 +411,24 @@ void serial_echopair_P(const char *s_P, double v)
void serial_echopair_P(const char *s_P, unsigned long v) void serial_echopair_P(const char *s_P, unsigned long v)
{ serialprintPGM(s_P); SERIAL_ECHO(v); } { serialprintPGM(s_P); SERIAL_ECHO(v); }
/*FORCE_INLINE*/ void serialprintPGM(const char *str)
{
#if 0
char ch=pgm_read_byte(str);
while(ch)
{
MYSERIAL.write(ch);
ch=pgm_read_byte(++str);
}
#else
// hmm, same size as the above version, the compiler did a good job optimizing the above
while( uint8_t ch = pgm_read_byte(str) ){
MYSERIAL.write((char)ch);
++str;
}
#endif
}
#ifdef SDSUPPORT #ifdef SDSUPPORT
#include "SdFatUtil.h" #include "SdFatUtil.h"
int freeMemory() { return SdFatUtil::FreeRam(); } int freeMemory() { return SdFatUtil::FreeRam(); }

View File

@ -3954,6 +3954,13 @@ void lcd_menu_show_sensors_state() // NOT static due to using ins
} }
} }
void prusa_statistics_err(char c){
SERIAL_ECHO("{[ERR:");
SERIAL_ECHO(c);
SERIAL_ECHO(']');
prusa_stat_farm_number();
}
void prusa_statistics(int _message, uint8_t _fil_nr) { void prusa_statistics(int _message, uint8_t _fil_nr) {
#ifdef DEBUG_DISABLE_PRUSA_STATISTICS #ifdef DEBUG_DISABLE_PRUSA_STATISTICS
return; return;
@ -3964,113 +3971,92 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
case 0: // default message case 0: // default message
if (busy_state == PAUSED_FOR_USER) if (busy_state == PAUSED_FOR_USER)
{ {
SERIAL_ECHO("{");
prusa_stat_printerstatus(15);
prusa_stat_farm_number();
prusa_stat_printinfo();
SERIAL_ECHOLN("}");
status_number = 15; status_number = 15;
} }
else if (isPrintPaused || card.paused) else if (isPrintPaused || card.paused)
{ {
SERIAL_ECHO("{");
prusa_stat_printerstatus(14);
prusa_stat_farm_number();
prusa_stat_printinfo();
SERIAL_ECHOLN("}");
status_number = 14; status_number = 14;
} }
else if (IS_SD_PRINTING || loading_flag) else if (IS_SD_PRINTING || loading_flag)
{ {
SERIAL_ECHO("{");
prusa_stat_printerstatus(4);
prusa_stat_farm_number();
prusa_stat_printinfo();
SERIAL_ECHOLN("}");
status_number = 4; status_number = 4;
} }
else else
{ {
SERIAL_ECHO("{");
prusa_stat_printerstatus(1);
prusa_stat_farm_number();
prusa_stat_diameter();
SERIAL_ECHOLN("}");
status_number = 1; status_number = 1;
} }
SERIAL_ECHO('{');
prusa_stat_printerstatus(status_number);
prusa_stat_farm_number();
prusa_stat_printinfo();
break; break;
case 1: // 1 heating case 1: // 1 heating
farm_status = 2; farm_status = 2;
SERIAL_ECHO("{"); SERIAL_ECHO('{');
prusa_stat_printerstatus(2); prusa_stat_printerstatus(2);
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}");
status_number = 2; status_number = 2;
farm_timer = 1; farm_timer = 1;
break; break;
case 2: // heating done case 2: // heating done
farm_status = 3; farm_status = 3;
SERIAL_ECHO("{"); SERIAL_ECHO('{');
prusa_stat_printerstatus(3); prusa_stat_printerstatus(3);
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}"); SERIAL_ECHOLN('}');
status_number = 3; status_number = 3;
farm_timer = 1; farm_timer = 1;
if (IS_SD_PRINTING || loading_flag) if (IS_SD_PRINTING || loading_flag)
{ {
farm_status = 4; farm_status = 4;
SERIAL_ECHO("{"); SERIAL_ECHO('{');
prusa_stat_printerstatus(4); prusa_stat_printerstatus(4);
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}");
status_number = 4; status_number = 4;
} }
else else
{ {
SERIAL_ECHO("{"); SERIAL_ECHO('{');
prusa_stat_printerstatus(3); prusa_stat_printerstatus(3);
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}");
status_number = 3; status_number = 3;
} }
farm_timer = 1; farm_timer = 1;
break; break;
case 3: // filament change case 3: // filament change
// must do a return here to prevent doing SERIAL_ECHOLN("}") at the very end of this function
// saved a considerable amount of FLASH
return;
break; break;
case 4: // print succesfull case 4: // print succesfull
SERIAL_ECHO("{[RES:1][FIL:"); SERIAL_ECHO("{[RES:1][FIL:");
MYSERIAL.print(int(_fil_nr)); MYSERIAL.print(int(_fil_nr));
SERIAL_ECHO("]"); SERIAL_ECHO(']');
prusa_stat_printerstatus(status_number); prusa_stat_printerstatus(status_number);
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}");
farm_timer = 2; farm_timer = 2;
break; break;
case 5: // print not succesfull case 5: // print not succesfull
SERIAL_ECHO("{[RES:0][FIL:"); SERIAL_ECHO("{[RES:0][FIL:");
MYSERIAL.print(int(_fil_nr)); MYSERIAL.print(int(_fil_nr));
SERIAL_ECHO("]"); SERIAL_ECHO(']');
prusa_stat_printerstatus(status_number); prusa_stat_printerstatus(status_number);
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}");
farm_timer = 2; farm_timer = 2;
break; break;
case 6: // print done case 6: // print done
SERIAL_ECHO("{[PRN:8]"); SERIAL_ECHO("{[PRN:8]");
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}");
status_number = 8; status_number = 8;
farm_timer = 2; farm_timer = 2;
break; break;
case 7: // print done - stopped case 7: // print done - stopped
SERIAL_ECHO("{[PRN:9]"); SERIAL_ECHO("{[PRN:9]");
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}");
status_number = 9; status_number = 9;
farm_timer = 2; farm_timer = 2;
break; break;
@ -4078,49 +4064,38 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
SERIAL_ECHO("{[PRN:0][PFN:"); SERIAL_ECHO("{[PRN:0][PFN:");
status_number = 0; status_number = 0;
SERIAL_ECHO(farm_no); SERIAL_ECHO(farm_no);
SERIAL_ECHOLN("]}"); SERIAL_ECHO(']');
farm_timer = 2; farm_timer = 2;
break; break;
case 20: // echo farm no case 20: // echo farm no
SERIAL_ECHO("{"); SERIAL_ECHO('{');
prusa_stat_printerstatus(status_number); prusa_stat_printerstatus(status_number);
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}");
farm_timer = 4; farm_timer = 4;
break; break;
case 21: // temperatures case 21: // temperatures
SERIAL_ECHO("{"); SERIAL_ECHO('{');
prusa_stat_temperatures(); prusa_stat_temperatures();
prusa_stat_farm_number(); prusa_stat_farm_number();
prusa_stat_printerstatus(status_number); prusa_stat_printerstatus(status_number);
SERIAL_ECHOLN("}");
break; break;
case 22: // waiting for filament change case 22: // waiting for filament change
SERIAL_ECHO("{[PRN:5]"); SERIAL_ECHO("{[PRN:5]");
prusa_stat_farm_number(); prusa_stat_farm_number();
SERIAL_ECHOLN("}");
status_number = 5; status_number = 5;
break; break;
case 90: // Error - Thermal Runaway case 90: // Error - Thermal Runaway
SERIAL_ECHO("{[ERR:1]"); prusa_statistics_err('1');
prusa_stat_farm_number();
SERIAL_ECHOLN("}");
break; break;
case 91: // Error - Thermal Runaway Preheat case 91: // Error - Thermal Runaway Preheat
SERIAL_ECHO("{[ERR:2]"); prusa_statistics_err('2');
prusa_stat_farm_number();
SERIAL_ECHOLN("}");
break; break;
case 92: // Error - Min temp case 92: // Error - Min temp
SERIAL_ECHO("{[ERR:3]"); prusa_statistics_err('3');
prusa_stat_farm_number();
SERIAL_ECHOLN("}");
break; break;
case 93: // Error - Max temp case 93: // Error - Max temp
SERIAL_ECHO("{[ERR:4]"); prusa_statistics_err('4');
prusa_stat_farm_number();
SERIAL_ECHOLN("}");
break; break;
case 99: // heartbeat case 99: // heartbeat
@ -4128,11 +4103,11 @@ void prusa_statistics(int _message, uint8_t _fil_nr) {
prusa_stat_temperatures(); prusa_stat_temperatures();
SERIAL_ECHO("[PFN:"); SERIAL_ECHO("[PFN:");
SERIAL_ECHO(farm_no); SERIAL_ECHO(farm_no);
SERIAL_ECHO("]"); SERIAL_ECHO(']');
SERIAL_ECHOLN("}");
break; break;
} }
SERIAL_ECHOLN('}');
} }
@ -4140,19 +4115,19 @@ static void prusa_stat_printerstatus(int _status)
{ {
SERIAL_ECHO("[PRN:"); SERIAL_ECHO("[PRN:");
SERIAL_ECHO(_status); SERIAL_ECHO(_status);
SERIAL_ECHO("]"); SERIAL_ECHO(']');
} }
static void prusa_stat_farm_number() { static void prusa_stat_farm_number() {
SERIAL_ECHO("[PFN:"); SERIAL_ECHO("[PFN:");
SERIAL_ECHO(farm_no); SERIAL_ECHO(farm_no);
SERIAL_ECHO("]"); SERIAL_ECHO(']');
} }
static void prusa_stat_diameter() { static void prusa_stat_diameter() {
SERIAL_ECHO("[DIA:"); SERIAL_ECHO("[DIA:");
SERIAL_ECHO(eeprom_read_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM)); SERIAL_ECHO(eeprom_read_word((uint16_t*)EEPROM_NOZZLE_DIAMETER_uM));
SERIAL_ECHO("]"); SERIAL_ECHO(']');
} }
static void prusa_stat_temperatures() static void prusa_stat_temperatures()
@ -4165,7 +4140,7 @@ static void prusa_stat_temperatures()
SERIAL_ECHO(current_temperature[0]); SERIAL_ECHO(current_temperature[0]);
SERIAL_ECHO("][ATB:"); SERIAL_ECHO("][ATB:");
SERIAL_ECHO(current_temperature_bed); SERIAL_ECHO(current_temperature_bed);
SERIAL_ECHO("]"); SERIAL_ECHO(']');
} }
static void prusa_stat_printinfo() static void prusa_stat_printinfo()
@ -4189,7 +4164,7 @@ static void prusa_stat_printinfo()
} }
SERIAL_ECHO("][FWR:"); SERIAL_ECHO("][FWR:");
SERIAL_ECHO(FW_VERSION); SERIAL_ECHO(FW_VERSION);
SERIAL_ECHO("]"); SERIAL_ECHO(']');
prusa_stat_diameter(); prusa_stat_diameter();
} }