Преглед на файлове

🎨 Fewer serial macros

Scott Lahteine преди 2 години
родител
ревизия
754b31918a
променени са 100 файла, в които са добавени 546 реда и са изтрити 558 реда
  1. 5
    5
      Marlin/src/HAL/AVR/fastio.cpp
  2. 8
    8
      Marlin/src/HAL/AVR/pinsDebug.h
  3. 17
    17
      Marlin/src/HAL/DUE/eeprom_flash.cpp
  4. 1
    1
      Marlin/src/HAL/DUE/pinsDebug.h
  5. 1
    1
      Marlin/src/HAL/ESP32/wifi.cpp
  6. 4
    4
      Marlin/src/HAL/LPC1768/eeprom_sdcard.cpp
  7. 1
    1
      Marlin/src/HAL/SAMD51/pinsDebug.h
  8. 8
    8
      Marlin/src/HAL/STM32/eeprom_flash.cpp
  9. 1
    1
      Marlin/src/HAL/STM32/pinsDebug.h
  10. 3
    3
      Marlin/src/HAL/STM32/usb_host.cpp
  11. 3
    3
      Marlin/src/HAL/shared/Delay.cpp
  12. 2
    2
      Marlin/src/MarlinCore.cpp
  13. 6
    6
      Marlin/src/core/bug_on.h
  14. 8
    14
      Marlin/src/core/debug_out.h
  15. 1
    1
      Marlin/src/core/serial.cpp
  16. 15
    21
      Marlin/src/core/serial.h
  17. 6
    6
      Marlin/src/core/utility.cpp
  18. 2
    2
      Marlin/src/feature/backlash.cpp
  19. 5
    5
      Marlin/src/feature/bedlevel/abl/abl.cpp
  20. 1
    1
      Marlin/src/feature/bedlevel/ubl/ubl.cpp
  21. 4
    4
      Marlin/src/feature/bedlevel/ubl/ubl.h
  22. 30
    30
      Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
  23. 7
    7
      Marlin/src/feature/binary_stream.h
  24. 4
    4
      Marlin/src/feature/bltouch.cpp
  25. 4
    4
      Marlin/src/feature/dac/stepper_dac.cpp
  26. 27
    27
      Marlin/src/feature/encoder_i2c.cpp
  27. 6
    6
      Marlin/src/feature/encoder_i2c.h
  28. 17
    17
      Marlin/src/feature/fwretract.cpp
  29. 3
    3
      Marlin/src/feature/joystick.cpp
  30. 1
    1
      Marlin/src/feature/max7219.cpp
  31. 1
    1
      Marlin/src/feature/meatpack.cpp
  32. 2
    2
      Marlin/src/feature/mixing.cpp
  33. 1
    1
      Marlin/src/feature/mixing.h
  34. 9
    9
      Marlin/src/feature/mmu/mmu2.cpp
  35. 9
    9
      Marlin/src/feature/pause.cpp
  36. 17
    17
      Marlin/src/feature/powerloss.cpp
  37. 2
    2
      Marlin/src/feature/probe_temp_comp.cpp
  38. 4
    4
      Marlin/src/feature/repeat.cpp
  39. 1
    1
      Marlin/src/feature/runout.cpp
  40. 3
    3
      Marlin/src/feature/runout.h
  41. 2
    2
      Marlin/src/feature/tmc_util.cpp
  42. 2
    2
      Marlin/src/feature/tmc_util.h
  43. 1
    1
      Marlin/src/feature/twibus.cpp
  44. 1
    1
      Marlin/src/gcode/bedlevel/G26.cpp
  45. 7
    7
      Marlin/src/gcode/bedlevel/G35.cpp
  46. 5
    5
      Marlin/src/gcode/bedlevel/M420.cpp
  47. 9
    9
      Marlin/src/gcode/bedlevel/abl/G29.cpp
  48. 3
    3
      Marlin/src/gcode/bedlevel/mbl/G29.cpp
  49. 2
    2
      Marlin/src/gcode/calibrate/G28.cpp
  50. 3
    3
      Marlin/src/gcode/calibrate/G33.cpp
  51. 13
    13
      Marlin/src/gcode/calibrate/G34_M422.cpp
  52. 37
    37
      Marlin/src/gcode/calibrate/G425.cpp
  53. 5
    5
      Marlin/src/gcode/calibrate/G76_M192_M871.cpp
  54. 18
    18
      Marlin/src/gcode/calibrate/M100.cpp
  55. 3
    3
      Marlin/src/gcode/calibrate/M425.cpp
  56. 4
    4
      Marlin/src/gcode/calibrate/M48.cpp
  57. 2
    2
      Marlin/src/gcode/calibrate/M665.cpp
  58. 9
    9
      Marlin/src/gcode/calibrate/M666.cpp
  59. 9
    9
      Marlin/src/gcode/config/M200-M205.cpp
  60. 10
    10
      Marlin/src/gcode/config/M217.cpp
  61. 1
    1
      Marlin/src/gcode/config/M218.cpp
  62. 1
    1
      Marlin/src/gcode/config/M220.cpp
  63. 1
    1
      Marlin/src/gcode/config/M221.cpp
  64. 1
    1
      Marlin/src/gcode/config/M281.cpp
  65. 4
    4
      Marlin/src/gcode/config/M301.cpp
  66. 1
    1
      Marlin/src/gcode/config/M302.cpp
  67. 1
    1
      Marlin/src/gcode/config/M309.cpp
  68. 6
    6
      Marlin/src/gcode/config/M43.cpp
  69. 5
    5
      Marlin/src/gcode/config/M92.cpp
  70. 4
    4
      Marlin/src/gcode/control/M111.cpp
  71. 1
    1
      Marlin/src/gcode/control/M211.cpp
  72. 15
    15
      Marlin/src/gcode/control/M605.cpp
  73. 2
    2
      Marlin/src/gcode/control/M993_M994.cpp
  74. 1
    1
      Marlin/src/gcode/control/T.cpp
  75. 3
    3
      Marlin/src/gcode/eeprom/M500-M504.cpp
  76. 1
    1
      Marlin/src/gcode/feature/L6470/M122.cpp
  77. 6
    6
      Marlin/src/gcode/feature/L6470/M906.cpp
  78. 14
    14
      Marlin/src/gcode/feature/L6470/M916-918.cpp
  79. 5
    5
      Marlin/src/gcode/feature/advance/M900.cpp
  80. 1
    1
      Marlin/src/gcode/feature/controllerfan/M710.cpp
  81. 1
    1
      Marlin/src/gcode/feature/digipot/M907-M910.cpp
  82. 2
    2
      Marlin/src/gcode/feature/filwidth/M404-M407.cpp
  83. 3
    3
      Marlin/src/gcode/feature/mixing/M166.cpp
  84. 1
    1
      Marlin/src/gcode/feature/password/M510-M512.cpp
  85. 1
    1
      Marlin/src/gcode/feature/pause/G60.cpp
  86. 2
    2
      Marlin/src/gcode/feature/pause/G61.cpp
  87. 2
    2
      Marlin/src/gcode/feature/pause/M603.cpp
  88. 1
    1
      Marlin/src/gcode/feature/power_monitor/M430.cpp
  89. 1
    1
      Marlin/src/gcode/feature/powerloss/M413.cpp
  90. 2
    2
      Marlin/src/gcode/feature/runout/M412.cpp
  91. 19
    19
      Marlin/src/gcode/feature/trinamic/M906.cpp
  92. 30
    30
      Marlin/src/gcode/feature/trinamic/M911-M914.cpp
  93. 3
    3
      Marlin/src/gcode/gcode.cpp
  94. 3
    3
      Marlin/src/gcode/gcode_d.cpp
  95. 2
    2
      Marlin/src/gcode/geometry/G53-G59.cpp
  96. 1
    1
      Marlin/src/gcode/geometry/M206_M428.cpp
  97. 1
    1
      Marlin/src/gcode/host/M114.cpp
  98. 1
    1
      Marlin/src/gcode/host/M115.cpp
  99. 1
    1
      Marlin/src/gcode/host/M360.cpp
  100. 0
    0
      Marlin/src/gcode/lcd/M145.cpp

+ 5
- 5
Marlin/src/HAL/AVR/fastio.cpp Целия файл

@@ -267,11 +267,11 @@ uint16_t set_pwm_frequency_hz(const_float_t hz, const float dca, const float dcb
267 267
     SET_WGM(5, FAST_PWM_ICRn);            // Fast PWM with ICR5 as TOP
268 268
 
269 269
     //SERIAL_ECHOLNPGM("Timer 5 Settings:");
270
-    //SERIAL_ECHOLNPAIR("  Prescaler=", prescaler);
271
-    //SERIAL_ECHOLNPAIR("        TOP=", ICR5);
272
-    //SERIAL_ECHOLNPAIR("      OCR5A=", OCR5A);
273
-    //SERIAL_ECHOLNPAIR("      OCR5B=", OCR5B);
274
-    //SERIAL_ECHOLNPAIR("      OCR5C=", OCR5C);
270
+    //SERIAL_ECHOLNPGM("  Prescaler=", prescaler);
271
+    //SERIAL_ECHOLNPGM("        TOP=", ICR5);
272
+    //SERIAL_ECHOLNPGM("      OCR5A=", OCR5A);
273
+    //SERIAL_ECHOLNPGM("      OCR5B=", OCR5B);
274
+    //SERIAL_ECHOLNPGM("      OCR5C=", OCR5C);
275 275
   }
276 276
   else {
277 277
     // Restore the default for Timer 5

+ 8
- 8
Marlin/src/HAL/AVR/pinsDebug.h Целия файл

@@ -235,9 +235,9 @@ static void print_is_also_tied() { SERIAL_ECHOPGM(" is also tied to this pin");
235 235
 
236 236
 inline void com_print(const uint8_t N, const uint8_t Z) {
237 237
   const uint8_t *TCCRA = (uint8_t*)TCCR_A(N);
238
-  SERIAL_ECHOPAIR("    COM", AS_DIGIT(N));
238
+  SERIAL_ECHOPGM("    COM", AS_DIGIT(N));
239 239
   SERIAL_CHAR(Z);
240
-  SERIAL_ECHOPAIR(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
240
+  SERIAL_ECHOPGM(": ", int((*TCCRA >> (6 - Z * 2)) & 0x03));
241 241
 }
242 242
 
243 243
 void timer_prefix(uint8_t T, char L, uint8_t N) {  // T - timer    L - pwm  N - WGM bit layout
@@ -247,7 +247,7 @@ void timer_prefix(uint8_t T, char L, uint8_t N) {  // T - timer    L - pwm  N -
247 247
   uint8_t WGM = (((*TCCRB & _BV(WGM_2)) >> 1) | (*TCCRA & (_BV(WGM_0) | _BV(WGM_1))));
248 248
   if (N == 4) WGM |= ((*TCCRB & _BV(WGM_3)) >> 1);
249 249
 
250
-  SERIAL_ECHOPAIR("    TIMER", AS_DIGIT(T));
250
+  SERIAL_ECHOPGM("    TIMER", AS_DIGIT(T));
251 251
   SERIAL_CHAR(L);
252 252
   SERIAL_ECHO_SP(3);
253 253
 
@@ -259,14 +259,14 @@ void timer_prefix(uint8_t T, char L, uint8_t N) {  // T - timer    L - pwm  N -
259 259
     const uint16_t *OCRVAL16 = (uint16_t*)OCR_VAL(T, L - 'A');
260 260
     PWM_PRINT(*OCRVAL16);
261 261
   }
262
-  SERIAL_ECHOPAIR("    WGM: ", WGM);
262
+  SERIAL_ECHOPGM("    WGM: ", WGM);
263 263
   com_print(T,L);
264
-  SERIAL_ECHOPAIR("    CS: ", (*TCCRB & (_BV(CS_0) | _BV(CS_1) | _BV(CS_2)) ));
265
-  SERIAL_ECHOPAIR("    TCCR", AS_DIGIT(T), "A: ", *TCCRA);
266
-  SERIAL_ECHOPAIR("    TCCR", AS_DIGIT(T), "B: ", *TCCRB);
264
+  SERIAL_ECHOPGM("    CS: ", (*TCCRB & (_BV(CS_0) | _BV(CS_1) | _BV(CS_2)) ));
265
+  SERIAL_ECHOPGM("    TCCR", AS_DIGIT(T), "A: ", *TCCRA);
266
+  SERIAL_ECHOPGM("    TCCR", AS_DIGIT(T), "B: ", *TCCRB);
267 267
 
268 268
   const uint8_t *TMSK = (uint8_t*)TIMSK(T);
269
-  SERIAL_ECHOPAIR("    TIMSK", AS_DIGIT(T), ": ", *TMSK);
269
+  SERIAL_ECHOPGM("    TIMSK", AS_DIGIT(T), ": ", *TMSK);
270 270
 
271 271
   const uint8_t OCIE = L - 'A' + 1;
272 272
   if (N == 3) { if (WGM == 0 || WGM == 2 || WGM ==  4 || WGM ==  6) err_is_counter(); }

+ 17
- 17
Marlin/src/HAL/DUE/eeprom_flash.cpp Целия файл

@@ -200,9 +200,9 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
200 200
     pageContents[i] = (((uint32_t*)data)[i]) | (~(pageContents[i] ^ ((uint32_t*)data)[i]));
201 201
 
202 202
   DEBUG_ECHO_START();
203
-  DEBUG_ECHOLNPAIR("EEPROM PageWrite   ", page);
204
-  DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
205
-  DEBUG_ECHOLNPAIR(" base address     ", (uint32_t)getFlashStorage(0));
203
+  DEBUG_ECHOLNPGM("EEPROM PageWrite   ", page);
204
+  DEBUG_ECHOLNPGM(" in FLASH address ", (uint32_t)addrflash);
205
+  DEBUG_ECHOLNPGM(" base address     ", (uint32_t)getFlashStorage(0));
206 206
   DEBUG_FLUSH();
207 207
 
208 208
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
@@ -246,7 +246,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
246 246
     __enable_irq();
247 247
 
248 248
     DEBUG_ECHO_START();
249
-    DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ", page);
249
+    DEBUG_ECHOLNPGM("EEPROM Unlock failure for page ", page);
250 250
     return false;
251 251
   }
252 252
 
@@ -271,7 +271,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
271 271
     __enable_irq();
272 272
 
273 273
     DEBUG_ECHO_START();
274
-    DEBUG_ECHOLNPAIR("EEPROM Write failure for page ", page);
274
+    DEBUG_ECHOLNPGM("EEPROM Write failure for page ", page);
275 275
 
276 276
     return false;
277 277
   }
@@ -287,7 +287,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
287 287
 
288 288
     #ifdef EE_EMU_DEBUG
289 289
       DEBUG_ECHO_START();
290
-      DEBUG_ECHOLNPAIR("EEPROM Verify Write failure for page ", page);
290
+      DEBUG_ECHOLNPGM("EEPROM Verify Write failure for page ", page);
291 291
 
292 292
       ee_Dump( page, (uint32_t *)addrflash);
293 293
       ee_Dump(-page, data);
@@ -306,7 +306,7 @@ static bool ee_PageWrite(uint16_t page, const void *data) {
306 306
           }
307 307
         }
308 308
       }
309
-      DEBUG_ECHOLNPAIR("--> Differing bits: ", count);
309
+      DEBUG_ECHOLNPGM("--> Differing bits: ", count);
310 310
     #endif
311 311
 
312 312
     return false;
@@ -326,9 +326,9 @@ static bool ee_PageErase(uint16_t page) {
326 326
   uint32_t addrflash = uint32_t(getFlashStorage(page));
327 327
 
328 328
   DEBUG_ECHO_START();
329
-  DEBUG_ECHOLNPAIR("EEPROM PageErase  ", page);
330
-  DEBUG_ECHOLNPAIR(" in FLASH address ", (uint32_t)addrflash);
331
-  DEBUG_ECHOLNPAIR(" base address     ", (uint32_t)getFlashStorage(0));
329
+  DEBUG_ECHOLNPGM("EEPROM PageErase  ", page);
330
+  DEBUG_ECHOLNPGM(" in FLASH address ", (uint32_t)addrflash);
331
+  DEBUG_ECHOLNPGM(" base address     ", (uint32_t)getFlashStorage(0));
332 332
   DEBUG_FLUSH();
333 333
 
334 334
   // Get the page relative to the start of the EFC controller, and the EFC controller to use
@@ -371,7 +371,7 @@ static bool ee_PageErase(uint16_t page) {
371 371
     __enable_irq();
372 372
 
373 373
     DEBUG_ECHO_START();
374
-    DEBUG_ECHOLNPAIR("EEPROM Unlock failure for page ",page);
374
+    DEBUG_ECHOLNPGM("EEPROM Unlock failure for page ",page);
375 375
 
376 376
     return false;
377 377
   }
@@ -395,7 +395,7 @@ static bool ee_PageErase(uint16_t page) {
395 395
     __enable_irq();
396 396
 
397 397
     DEBUG_ECHO_START();
398
-    DEBUG_ECHOLNPAIR("EEPROM Erase failure for page ",page);
398
+    DEBUG_ECHOLNPGM("EEPROM Erase failure for page ",page);
399 399
 
400 400
     return false;
401 401
   }
@@ -411,7 +411,7 @@ static bool ee_PageErase(uint16_t page) {
411 411
   for (i = 0; i < PageSize >> 2; i++) {
412 412
     if (*aligned_src++ != 0xFFFFFFFF) {
413 413
       DEBUG_ECHO_START();
414
-      DEBUG_ECHOLNPAIR("EEPROM Verify Erase failure for page ",page);
414
+      DEBUG_ECHOLNPGM("EEPROM Verify Erase failure for page ",page);
415 415
       ee_Dump(page, (uint32_t *)addrflash);
416 416
       return false;
417 417
     }
@@ -922,7 +922,7 @@ static void ee_Init() {
922 922
   if (curGroup >= GroupCount) curGroup = 0;
923 923
 
924 924
   DEBUG_ECHO_START();
925
-  DEBUG_ECHOLNPAIR("EEPROM Current Group: ",curGroup);
925
+  DEBUG_ECHOLNPGM("EEPROM Current Group: ",curGroup);
926 926
   DEBUG_FLUSH();
927 927
 
928 928
   // Now, validate that all the other group pages are empty
@@ -932,7 +932,7 @@ static void ee_Init() {
932 932
     for (int page = 0; page < PagesPerGroup; page++) {
933 933
       if (!ee_IsPageClean(grp * PagesPerGroup + page)) {
934 934
         DEBUG_ECHO_START();
935
-        DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on group ", grp);
935
+        DEBUG_ECHOLNPGM("EEPROM Page ", page, " not clean on group ", grp);
936 936
         DEBUG_FLUSH();
937 937
         ee_PageErase(grp * PagesPerGroup + page);
938 938
       }
@@ -949,14 +949,14 @@ static void ee_Init() {
949 949
   }
950 950
 
951 951
   DEBUG_ECHO_START();
952
-  DEBUG_ECHOLNPAIR("EEPROM Active page: ", curPage);
952
+  DEBUG_ECHOLNPGM("EEPROM Active page: ", curPage);
953 953
   DEBUG_FLUSH();
954 954
 
955 955
   // Make sure the pages following the first clean one are also clean
956 956
   for (int page = curPage + 1; page < PagesPerGroup; page++) {
957 957
     if (!ee_IsPageClean(curGroup * PagesPerGroup + page)) {
958 958
       DEBUG_ECHO_START();
959
-      DEBUG_ECHOLNPAIR("EEPROM Page ", page, " not clean on active group ", curGroup);
959
+      DEBUG_ECHOLNPGM("EEPROM Page ", page, " not clean on active group ", curGroup);
960 960
       DEBUG_FLUSH();
961 961
       ee_Dump(curGroup * PagesPerGroup + page, getFlashStorage(curGroup * PagesPerGroup + page));
962 962
       ee_PageErase(curGroup * PagesPerGroup + page);

+ 1
- 1
Marlin/src/HAL/DUE/pinsDebug.h Целия файл

@@ -87,7 +87,7 @@ bool GET_PINMODE(int8_t pin) {  // 1: output, 0: input
87 87
 void pwm_details(int32_t pin) {
88 88
   if (pwm_status(pin)) {
89 89
     uint32_t chan = g_APinDescription[pin].ulPWMChannel;
90
-    SERIAL_ECHOPAIR("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
90
+    SERIAL_ECHOPGM("PWM = ", PWM_INTERFACE->PWM_CH_NUM[chan].PWM_CDTY);
91 91
   }
92 92
 }
93 93
 

+ 1
- 1
Marlin/src/HAL/ESP32/wifi.cpp Целия файл

@@ -59,7 +59,7 @@ void wifi_init() {
59 59
 
60 60
   MDNS.addService("http", "tcp", 80);
61 61
 
62
-  SERIAL_ECHOLNPAIR("Successfully connected to WiFi with SSID '" WIFI_SSID "', hostname: '" WIFI_HOSTNAME "', IP address: ", WiFi.localIP().toString().c_str());
62
+  SERIAL_ECHOLNPGM("Successfully connected to WiFi with SSID '" WIFI_SSID "', hostname: '" WIFI_HOSTNAME "', IP address: ", WiFi.localIP().toString().c_str());
63 63
 }
64 64
 
65 65
 #endif // WIFISUPPORT

+ 4
- 4
Marlin/src/HAL/LPC1768/eeprom_sdcard.cpp Целия файл

@@ -84,15 +84,15 @@ static void debug_rw(const bool write, int &pos, const uint8_t *value, const siz
84 84
   PGM_P const rw_str = write ? PSTR("write") : PSTR("read");
85 85
   SERIAL_CHAR(' ');
86 86
   SERIAL_ECHOPGM_P(rw_str);
87
-  SERIAL_ECHOLNPAIR("_data(", pos, ",", value, ",", size, ", ...)");
87
+  SERIAL_ECHOLNPGM("_data(", pos, ",", value, ",", size, ", ...)");
88 88
   if (total) {
89 89
     SERIAL_ECHOPGM(" f_");
90 90
     SERIAL_ECHOPGM_P(rw_str);
91
-    SERIAL_ECHOPAIR("()=", s, "\n size=", size, "\n bytes_");
92
-    SERIAL_ECHOLNPAIR_P(write ? PSTR("written=") : PSTR("read="), total);
91
+    SERIAL_ECHOPGM("()=", s, "\n size=", size, "\n bytes_");
92
+    SERIAL_ECHOLNPGM_P(write ? PSTR("written=") : PSTR("read="), total);
93 93
   }
94 94
   else
95
-    SERIAL_ECHOLNPAIR(" f_lseek()=", s);
95
+    SERIAL_ECHOLNPGM(" f_lseek()=", s);
96 96
 }
97 97
 
98 98
 // File function return codes for type FRESULT. This goes away soon, but

+ 1
- 1
Marlin/src/HAL/SAMD51/pinsDebug.h Целия файл

@@ -48,7 +48,7 @@ bool GET_PINMODE(int8_t pin) {  // 1: output, 0: input
48 48
 void pwm_details(int32_t pin) {
49 49
   if (pwm_status(pin)) {
50 50
     //uint32_t chan = g_APinDescription[pin].ulPWMChannel TODO when fast pwm is operative;
51
-    //SERIAL_ECHOPAIR("PWM = ", duty);
51
+    //SERIAL_ECHOPGM("PWM = ", duty);
52 52
   }
53 53
 }
54 54
 

+ 8
- 8
Marlin/src/HAL/STM32/eeprom_flash.cpp Целия файл

@@ -133,7 +133,7 @@ bool PersistentStore::access_start() {
133 133
         // load current settings
134 134
         uint8_t *eeprom_data = (uint8_t *)SLOT_ADDRESS(current_slot);
135 135
         for (int i = 0; i < MARLIN_EEPROM_SIZE; i++) ram_eeprom[i] = eeprom_data[i];
136
-        DEBUG_ECHOLNPAIR("EEPROM loaded from slot ", current_slot, ".");
136
+        DEBUG_ECHOLNPGM("EEPROM loaded from slot ", current_slot, ".");
137 137
       }
138 138
       eeprom_data_written = false;
139 139
     }
@@ -179,9 +179,9 @@ bool PersistentStore::access_finish() {
179 179
         ENABLE_ISRS();
180 180
         TERN_(HAS_PAUSE_SERVO_OUTPUT, RESUME_SERVO_OUTPUT());
181 181
         if (status != HAL_OK) {
182
-          DEBUG_ECHOLNPAIR("HAL_FLASHEx_Erase=", status);
183
-          DEBUG_ECHOLNPAIR("GetError=", HAL_FLASH_GetError());
184
-          DEBUG_ECHOLNPAIR("SectorError=", SectorError);
182
+          DEBUG_ECHOLNPGM("HAL_FLASHEx_Erase=", status);
183
+          DEBUG_ECHOLNPGM("GetError=", HAL_FLASH_GetError());
184
+          DEBUG_ECHOLNPGM("SectorError=", SectorError);
185 185
           LOCK_FLASH();
186 186
           return false;
187 187
         }
@@ -204,9 +204,9 @@ bool PersistentStore::access_finish() {
204 204
           offset += sizeof(uint32_t);
205 205
         }
206 206
         else {
207
-          DEBUG_ECHOLNPAIR("HAL_FLASH_Program=", status);
208
-          DEBUG_ECHOLNPAIR("GetError=", HAL_FLASH_GetError());
209
-          DEBUG_ECHOLNPAIR("address=", address);
207
+          DEBUG_ECHOLNPGM("HAL_FLASH_Program=", status);
208
+          DEBUG_ECHOLNPGM("GetError=", HAL_FLASH_GetError());
209
+          DEBUG_ECHOLNPGM("address=", address);
210 210
           success = false;
211 211
           break;
212 212
         }
@@ -216,7 +216,7 @@ bool PersistentStore::access_finish() {
216 216
 
217 217
       if (success) {
218 218
         eeprom_data_written = false;
219
-        DEBUG_ECHOLNPAIR("EEPROM saved to slot ", current_slot, ".");
219
+        DEBUG_ECHOLNPGM("EEPROM saved to slot ", current_slot, ".");
220 220
       }
221 221
 
222 222
       return success;

+ 1
- 1
Marlin/src/HAL/STM32/pinsDebug.h Целия файл

@@ -237,7 +237,7 @@ void pwm_details(const pin_t Ard_num) {
237 237
       if (over_7) pin_number -= 8;
238 238
 
239 239
       uint8_t alt_func = (alt_all >> (4 * pin_number)) & 0x0F;
240
-      SERIAL_ECHOPAIR("Alt Function: ", alt_func);
240
+      SERIAL_ECHOPGM("Alt Function: ", alt_func);
241 241
       if (alt_func < 10) SERIAL_CHAR(' ');
242 242
       SERIAL_ECHOPGM(" - ");
243 243
       switch (alt_func) {

+ 3
- 3
Marlin/src/HAL/STM32/usb_host.cpp Целия файл

@@ -88,9 +88,9 @@ void USBHost::setUsbTaskState(uint8_t state) {
88 88
     capacity = info.capacity.block_nbr / 2000;
89 89
     block_size = info.capacity.block_size;
90 90
     block_count = info.capacity.block_nbr;
91
-    // SERIAL_ECHOLNPAIR("info.capacity.block_nbr : %ld\n", info.capacity.block_nbr);
92
-    // SERIAL_ECHOLNPAIR("info.capacity.block_size: %d\n", info.capacity.block_size);
93
-    // SERIAL_ECHOLNPAIR("capacity                : %d MB\n", capacity);
91
+    //SERIAL_ECHOLNPGM("info.capacity.block_nbr : %ld\n", info.capacity.block_nbr);
92
+    //SERIAL_ECHOLNPGM("info.capacity.block_size: %d\n", info.capacity.block_size);
93
+    //SERIAL_ECHOLNPGM("capacity                : %d MB\n", capacity);
94 94
   }
95 95
 };
96 96
 

+ 3
- 3
Marlin/src/HAL/shared/Delay.cpp Целия файл

@@ -110,16 +110,16 @@
110 110
       auto report_call_time = [](PGM_P const name, PGM_P const unit, const uint32_t cycles, const uint32_t total, const bool do_flush=true) {
111 111
         SERIAL_ECHOPGM("Calling ");
112 112
         SERIAL_ECHOPGM_P(name);
113
-        SERIAL_ECHOLNPAIR(" for ", cycles);
113
+        SERIAL_ECHOLNPGM(" for ", cycles);
114 114
         SERIAL_ECHOPGM_P(unit);
115
-        SERIAL_ECHOLNPAIR(" took: ", total);
115
+        SERIAL_ECHOLNPGM(" took: ", total);
116 116
         SERIAL_ECHOPGM_P(unit);
117 117
         if (do_flush) SERIAL_FLUSHTX();
118 118
       };
119 119
 
120 120
       uint32_t s, e;
121 121
 
122
-      SERIAL_ECHOLNPAIR("Computed delay calibration value: ", ASM_CYCLES_PER_ITERATION);
122
+      SERIAL_ECHOLNPGM("Computed delay calibration value: ", ASM_CYCLES_PER_ITERATION);
123 123
       SERIAL_FLUSH();
124 124
       // Display the results of the calibration above
125 125
       constexpr uint32_t testValues[] = { 1, 5, 10, 20, 50, 100, 150, 200, 350, 500, 750, 1000 };

+ 2
- 2
Marlin/src/MarlinCore.cpp Целия файл

@@ -798,7 +798,7 @@ inline void manage_inactivity(const bool no_stepper_sleep=false) {
798 798
 void idle(bool no_stepper_sleep/*=false*/) {
799 799
   #if ENABLED(MARLIN_DEV_MODE)
800 800
     static uint16_t idle_depth = 0;
801
-    if (++idle_depth > 5) SERIAL_ECHOLNPAIR("idle() call depth: ", idle_depth);
801
+    if (++idle_depth > 5) SERIAL_ECHOLNPGM("idle() call depth: ", idle_depth);
802 802
   #endif
803 803
 
804 804
   // Core Marlin activities
@@ -1623,7 +1623,7 @@ void setup() {
1623 1623
   #if BOTH(HAS_WIRED_LCD, SHOW_BOOTSCREEN)
1624 1624
     const millis_t elapsed = millis() - bootscreen_ms;
1625 1625
     #if ENABLED(MARLIN_DEV_MODE)
1626
-      SERIAL_ECHOLNPAIR("elapsed=", elapsed);
1626
+      SERIAL_ECHOLNPGM("elapsed=", elapsed);
1627 1627
     #endif
1628 1628
     SETUP_RUN(ui.bootscreen_completion(elapsed));
1629 1629
   #endif

+ 6
- 6
Marlin/src/core/bug_on.h Целия файл

@@ -20,19 +20,19 @@
20 20
  */
21 21
 #pragma once
22 22
 
23
-// We need SERIAL_ECHOPAIR and macros.h
23
+// We need SERIAL_ECHOPGM and macros.h
24 24
 #include "serial.h"
25 25
 
26 26
 #if ENABLED(POSTMORTEM_DEBUGGING)
27 27
   // Useful macro for stopping the CPU on an unexpected condition
28
-  // This is used like SERIAL_ECHOPAIR, that is: a key-value call of the local variables you want
28
+  // This is used like SERIAL_ECHOPGM, that is: a key-value call of the local variables you want
29 29
   // to dump to the serial port before stopping the CPU.
30
-                          // \/ Don't replace by SERIAL_ECHOPAIR since ONLY_FILENAME cannot be transformed to a PGM string on Arduino and it breaks building
31
-  #define BUG_ON(V...) do { SERIAL_ECHO(ONLY_FILENAME); SERIAL_ECHO(__LINE__); SERIAL_ECHOLNPGM(": "); SERIAL_ECHOLNPAIR(V); SERIAL_FLUSHTX(); *(char*)0 = 42; } while(0)
30
+                          // \/ Don't replace by SERIAL_ECHOPGM since ONLY_FILENAME cannot be transformed to a PGM string on Arduino and it breaks building
31
+  #define BUG_ON(V...) do { SERIAL_ECHO(ONLY_FILENAME); SERIAL_ECHO(__LINE__); SERIAL_ECHOLNPGM(": "); SERIAL_ECHOLNPGM(V); SERIAL_FLUSHTX(); *(char*)0 = 42; } while(0)
32 32
 #elif ENABLED(MARLIN_DEV_MODE)
33 33
   // Don't stop the CPU here, but at least dump the bug on the serial port
34
-                          // \/ Don't replace by SERIAL_ECHOPAIR since ONLY_FILENAME cannot be transformed to a PGM string on Arduino and it breaks building
35
-  #define BUG_ON(V...) do { SERIAL_ECHO(ONLY_FILENAME); SERIAL_ECHO(__LINE__); SERIAL_ECHOLNPGM(": BUG!"); SERIAL_ECHOLNPAIR(V); SERIAL_FLUSHTX(); } while(0)
34
+                          // \/ Don't replace by SERIAL_ECHOPGM since ONLY_FILENAME cannot be transformed to a PGM string on Arduino and it breaks building
35
+  #define BUG_ON(V...) do { SERIAL_ECHO(ONLY_FILENAME); SERIAL_ECHO(__LINE__); SERIAL_ECHOLNPGM(": BUG!"); SERIAL_ECHOLNPGM(V); SERIAL_FLUSHTX(); } while(0)
36 36
 #else
37 37
   // Release mode, let's ignore the bug
38 38
   #define BUG_ON(V...) NOOP

+ 8
- 14
Marlin/src/core/debug_out.h Целия файл

@@ -27,7 +27,6 @@
27 27
 //
28 28
 
29 29
 #undef DEBUG_SECTION
30
-#undef DEBUG_ECHOPGM_P
31 30
 #undef DEBUG_ECHO_START
32 31
 #undef DEBUG_ERROR_START
33 32
 #undef DEBUG_CHAR
@@ -37,12 +36,10 @@
37 36
 #undef DEBUG_ECHOLN
38 37
 #undef DEBUG_ECHOPGM
39 38
 #undef DEBUG_ECHOLNPGM
40
-#undef DEBUG_ECHOPAIR
41
-#undef DEBUG_ECHOPAIR_P
39
+#undef DEBUG_ECHOPGM_P
40
+#undef DEBUG_ECHOLNPGM_P
42 41
 #undef DEBUG_ECHOPAIR_F
43 42
 #undef DEBUG_ECHOPAIR_F_P
44
-#undef DEBUG_ECHOLNPAIR
45
-#undef DEBUG_ECHOLNPAIR_P
46 43
 #undef DEBUG_ECHOLNPAIR_F
47 44
 #undef DEBUG_ECHOLNPAIR_F_P
48 45
 #undef DEBUG_ECHO_MSG
@@ -69,12 +66,12 @@
69 66
   #define DEBUG_ECHOLN            SERIAL_ECHOLN
70 67
   #define DEBUG_ECHOPGM           SERIAL_ECHOPGM
71 68
   #define DEBUG_ECHOLNPGM         SERIAL_ECHOLNPGM
72
-  #define DEBUG_ECHOPAIR          SERIAL_ECHOPAIR
73
-  #define DEBUG_ECHOPAIR_P        SERIAL_ECHOPAIR_P
69
+  #define DEBUG_ECHOPGM           SERIAL_ECHOPGM
70
+  #define DEBUG_ECHOPGM_P         SERIAL_ECHOPGM_P
74 71
   #define DEBUG_ECHOPAIR_F        SERIAL_ECHOPAIR_F
75 72
   #define DEBUG_ECHOPAIR_F_P      SERIAL_ECHOPAIR_F_P
76
-  #define DEBUG_ECHOLNPAIR        SERIAL_ECHOLNPAIR
77
-  #define DEBUG_ECHOLNPAIR_P      SERIAL_ECHOLNPAIR_P
73
+  #define DEBUG_ECHOLNPGM         SERIAL_ECHOLNPGM
74
+  #define DEBUG_ECHOLNPGM_P       SERIAL_ECHOLNPGM_P
78 75
   #define DEBUG_ECHOLNPAIR_F      SERIAL_ECHOLNPAIR_F
79 76
   #define DEBUG_ECHOLNPAIR_F_P    SERIAL_ECHOLNPAIR_F_P
80 77
   #define DEBUG_ECHO_MSG          SERIAL_ECHO_MSG
@@ -89,7 +86,6 @@
89 86
 #else
90 87
 
91 88
   #define DEBUG_SECTION(...)        NOOP
92
-  #define DEBUG_ECHOPGM_P(P)          NOOP
93 89
   #define DEBUG_ECHO_START()        NOOP
94 90
   #define DEBUG_ERROR_START()       NOOP
95 91
   #define DEBUG_CHAR(...)           NOOP
@@ -99,12 +95,10 @@
99 95
   #define DEBUG_ECHOLN(...)         NOOP
100 96
   #define DEBUG_ECHOPGM(...)        NOOP
101 97
   #define DEBUG_ECHOLNPGM(...)      NOOP
102
-  #define DEBUG_ECHOPAIR(...)       NOOP
103
-  #define DEBUG_ECHOPAIR_P(...)     NOOP
98
+  #define DEBUG_ECHOPGM_P(...)      NOOP
99
+  #define DEBUG_ECHOLNPGM_P(...)    NOOP
104 100
   #define DEBUG_ECHOPAIR_F(...)     NOOP
105 101
   #define DEBUG_ECHOPAIR_F_P(...)   NOOP
106
-  #define DEBUG_ECHOLNPAIR(...)     NOOP
107
-  #define DEBUG_ECHOLNPAIR_P(...)   NOOP
108 102
   #define DEBUG_ECHOLNPAIR_F(...)   NOOP
109 103
   #define DEBUG_ECHOLNPAIR_F_P(...) NOOP
110 104
   #define DEBUG_ECHO_MSG(...)       NOOP

+ 1
- 1
Marlin/src/core/serial.cpp Целия файл

@@ -96,7 +96,7 @@ void print_bin(uint16_t val) {
96 96
 
97 97
 void print_pos(LINEAR_AXIS_ARGS(const_float_t), PGM_P const prefix/*=nullptr*/, PGM_P const suffix/*=nullptr*/) {
98 98
   if (prefix) serialprintPGM(prefix);
99
-  SERIAL_ECHOPAIR_P(
99
+  SERIAL_ECHOPGM_P(
100 100
     LIST_N(DOUBLE(LINEAR_AXES), SP_X_STR, x, SP_Y_STR, y, SP_Z_STR, z, SP_I_STR, i, SP_J_STR, j, SP_K_STR, k)
101 101
   );
102 102
   if (suffix) serialprintPGM(suffix); else SERIAL_EOL();

+ 15
- 21
Marlin/src/core/serial.h Целия файл

@@ -188,44 +188,44 @@ inline void SERIAL_FLUSHTX()  { SERIAL_IMPL.flushTX(); }
188 188
 void serialprintPGM(PGM_P str);
189 189
 
190 190
 //
191
-// SERIAL_ECHOPAIR... macros are used to output string-value pairs.
191
+// SERIAL_ECHOPGM... macros are used to output string-value pairs.
192 192
 //
193 193
 
194 194
 // Print up to 20 pairs of values. Odd elements must be literal strings.
195 195
 #define __SEP_N(N,V...)           _SEP_##N(V)
196 196
 #define _SEP_N(N,V...)            __SEP_N(N,V)
197 197
 #define _SEP_N_REF()              _SEP_N
198
-#define _SEP_1(s)                 SERIAL_ECHOPGM(s);
198
+#define _SEP_1(s)                 serialprintPGM(PSTR(s));
199 199
 #define _SEP_2(s,v)               serial_echopair_PGM(PSTR(s),v);
200 200
 #define _SEP_3(s,v,V...)          _SEP_2(s,v); DEFER2(_SEP_N_REF)()(TWO_ARGS(V),V);
201
-#define SERIAL_ECHOPAIR(V...)     do{ EVAL(_SEP_N(TWO_ARGS(V),V)); }while(0)
201
+#define SERIAL_ECHOPGM(V...)      do{ EVAL(_SEP_N(TWO_ARGS(V),V)); }while(0)
202 202
 
203 203
 // Print up to 20 pairs of values followed by newline. Odd elements must be literal strings.
204 204
 #define __SELP_N(N,V...)          _SELP_##N(V)
205 205
 #define _SELP_N(N,V...)           __SELP_N(N,V)
206 206
 #define _SELP_N_REF()             _SELP_N
207
-#define _SELP_1(s)                SERIAL_ECHOLNPGM(s);
207
+#define _SELP_1(s)                serialprintPGM(PSTR(s "\n"));
208 208
 #define _SELP_2(s,v)              serial_echopair_PGM(PSTR(s),v); SERIAL_EOL();
209 209
 #define _SELP_3(s,v,V...)         _SEP_2(s,v); DEFER2(_SELP_N_REF)()(TWO_ARGS(V),V);
210
-#define SERIAL_ECHOLNPAIR(V...)   do{ EVAL(_SELP_N(TWO_ARGS(V),V)); }while(0)
210
+#define SERIAL_ECHOLNPGM(V...)    do{ EVAL(_SELP_N(TWO_ARGS(V),V)); }while(0)
211 211
 
212 212
 // Print up to 20 pairs of values. Odd elements must be PSTR pointers.
213 213
 #define __SEP_N_P(N,V...)         _SEP_##N##_P(V)
214 214
 #define _SEP_N_P(N,V...)          __SEP_N_P(N,V)
215 215
 #define _SEP_N_P_REF()            _SEP_N_P
216
-#define _SEP_1_P(s)               serialprintPGM(s);
217
-#define _SEP_2_P(s,v)             serial_echopair_PGM(s,v);
218
-#define _SEP_3_P(s,v,V...)        _SEP_2_P(s,v); DEFER2(_SEP_N_P_REF)()(TWO_ARGS(V),V);
219
-#define SERIAL_ECHOPAIR_P(V...)   do{ EVAL(_SEP_N_P(TWO_ARGS(V),V)); }while(0)
216
+#define _SEP_1_P(p)               serialprintPGM(p);
217
+#define _SEP_2_P(p,v)             serial_echopair_PGM(p,v);
218
+#define _SEP_3_P(p,v,V...)        _SEP_2_P(p,v); DEFER2(_SEP_N_P_REF)()(TWO_ARGS(V),V);
219
+#define SERIAL_ECHOPGM_P(V...)    do{ EVAL(_SEP_N_P(TWO_ARGS(V),V)); }while(0)
220 220
 
221 221
 // Print up to 20 pairs of values followed by newline. Odd elements must be PSTR pointers.
222 222
 #define __SELP_N_P(N,V...)        _SELP_##N##_P(V)
223 223
 #define _SELP_N_P(N,V...)         __SELP_N_P(N,V)
224 224
 #define _SELP_N_P_REF()           _SELP_N_P
225
-#define _SELP_1_P(s)              { serialprintPGM(s); SERIAL_EOL(); }
226
-#define _SELP_2_P(s,v)            { serial_echopair_PGM(s,v); SERIAL_EOL(); }
227
-#define _SELP_3_P(s,v,V...)       { _SEP_2_P(s,v); DEFER2(_SELP_N_P_REF)()(TWO_ARGS(V),V); }
228
-#define SERIAL_ECHOLNPAIR_P(V...) do{ EVAL(_SELP_N_P(TWO_ARGS(V),V)); }while(0)
225
+#define _SELP_1_P(p)              { serialprintPGM(p); SERIAL_EOL(); }
226
+#define _SELP_2_P(p,v)            { serial_echopair_PGM(p,v); SERIAL_EOL(); }
227
+#define _SELP_3_P(p,v,V...)       { _SEP_2_P(p,v); DEFER2(_SELP_N_P_REF)()(TWO_ARGS(V),V); }
228
+#define SERIAL_ECHOLNPGM_P(V...)  do{ EVAL(_SELP_N_P(TWO_ARGS(V),V)); }while(0)
229 229
 
230 230
 #ifdef AllowDifferentTypeInList
231 231
 
@@ -261,12 +261,6 @@ void serialprintPGM(PGM_P str);
261 261
 
262 262
 #endif
263 263
 
264
-#define SERIAL_ECHOPGM_P(P)         (serialprintPGM(P))
265
-#define SERIAL_ECHOLNPGM_P(P)       do{ serialprintPGM(P); SERIAL_EOL(); }while(0)
266
-
267
-#define SERIAL_ECHOPGM(S)           (serialprintPGM(PSTR(S)))
268
-#define SERIAL_ECHOLNPGM(S)         (serialprintPGM(PSTR(S "\n")))
269
-
270 264
 #define SERIAL_ECHOPAIR_F_P(P,V...) do{ serialprintPGM(P); SERIAL_ECHO_F(V); }while(0)
271 265
 #define SERIAL_ECHOLNPAIR_F_P(V...) do{ SERIAL_ECHOPAIR_F_P(V); SERIAL_EOL(); }while(0)
272 266
 
@@ -277,8 +271,8 @@ void serialprintPGM(PGM_P str);
277 271
 #define SERIAL_ERROR_START()        serial_error_start()
278 272
 #define SERIAL_EOL()                SERIAL_CHAR('\n')
279 273
 
280
-#define SERIAL_ECHO_MSG(V...)       do{ SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR(V); }while(0)
281
-#define SERIAL_ERROR_MSG(V...)      do{ SERIAL_ERROR_START(); SERIAL_ECHOLNPAIR(V); }while(0)
274
+#define SERIAL_ECHO_MSG(V...)       do{ SERIAL_ECHO_START();  SERIAL_ECHOLNPGM(V); }while(0)
275
+#define SERIAL_ERROR_MSG(V...)      do{ SERIAL_ERROR_START(); SERIAL_ECHOLNPGM(V); }while(0)
282 276
 
283 277
 #define SERIAL_ECHO_SP(C)           serial_spaces(C)
284 278
 

+ 6
- 6
Marlin/src/core/utility.cpp Целия файл

@@ -79,9 +79,9 @@ void safe_delay(millis_t ms) {
79 79
     #if HAS_BED_PROBE
80 80
 
81 81
       #if !HAS_PROBE_XY_OFFSET
82
-        SERIAL_ECHOPAIR("Probe Offset X0 Y0 Z", probe.offset.z, " (");
82
+        SERIAL_ECHOPGM("Probe Offset X0 Y0 Z", probe.offset.z, " (");
83 83
       #else
84
-        SERIAL_ECHOPAIR_P(PSTR("Probe Offset X"), probe.offset_xy.x, SP_Y_STR, probe.offset_xy.y, SP_Z_STR, probe.offset.z);
84
+        SERIAL_ECHOPGM_P(PSTR("Probe Offset X"), probe.offset_xy.x, SP_Y_STR, probe.offset_xy.y, SP_Z_STR, probe.offset.z);
85 85
         if (probe.offset_xy.x > 0)
86 86
           SERIAL_ECHOPGM(" (Right");
87 87
         else if (probe.offset_xy.x < 0)
@@ -119,7 +119,7 @@ void safe_delay(millis_t ms) {
119 119
         SERIAL_ECHOLNPGM(" (enabled)");
120 120
         #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
121 121
           if (planner.z_fade_height)
122
-            SERIAL_ECHOLNPAIR("Z Fade: ", planner.z_fade_height);
122
+            SERIAL_ECHOLNPGM("Z Fade: ", planner.z_fade_height);
123 123
         #endif
124 124
         #if ABL_PLANAR
125 125
           SERIAL_ECHOPGM("ABL Adjustment");
@@ -140,7 +140,7 @@ void safe_delay(millis_t ms) {
140 140
           SERIAL_ECHO(ftostr43sign(rz, '+'));
141 141
           #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
142 142
             if (planner.z_fade_height) {
143
-              SERIAL_ECHOPAIR(" (", ftostr43sign(rz * planner.fade_scaling_factor_for_z(current_position.z), '+'));
143
+              SERIAL_ECHOPGM(" (", ftostr43sign(rz * planner.fade_scaling_factor_for_z(current_position.z), '+'));
144 144
               SERIAL_CHAR(')');
145 145
             }
146 146
           #endif
@@ -156,10 +156,10 @@ void safe_delay(millis_t ms) {
156 156
       SERIAL_ECHOPGM("Mesh Bed Leveling");
157 157
       if (planner.leveling_active) {
158 158
         SERIAL_ECHOLNPGM(" (enabled)");
159
-        SERIAL_ECHOPAIR("MBL Adjustment Z", ftostr43sign(mbl.get_z(current_position), '+'));
159
+        SERIAL_ECHOPGM("MBL Adjustment Z", ftostr43sign(mbl.get_z(current_position), '+'));
160 160
         #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
161 161
           if (planner.z_fade_height) {
162
-            SERIAL_ECHOPAIR(" (", ftostr43sign(
162
+            SERIAL_ECHOPGM(" (", ftostr43sign(
163 163
               mbl.get_z(current_position, planner.fade_scaling_factor_for_z(current_position.z)), '+'
164 164
             ));
165 165
             SERIAL_CHAR(')');

+ 2
- 2
Marlin/src/feature/backlash.cpp Целия файл

@@ -134,12 +134,12 @@ void Backlash::add_correction_steps(const int32_t &da, const int32_t &db, const
134 134
           switch (axis) {
135 135
             case CORE_AXIS_1:
136 136
               //block->steps[CORE_AXIS_2] += influence_distance_mm[axis] * planner.settings.axis_steps_per_mm[CORE_AXIS_2];
137
-              //SERIAL_ECHOLNPAIR("CORE_AXIS_1 dir change. distance=", distance_mm[axis], " r.err=", residual_error[axis],
137
+              //SERIAL_ECHOLNPGM("CORE_AXIS_1 dir change. distance=", distance_mm[axis], " r.err=", residual_error[axis],
138 138
               //  " da=", da, " db=", db, " block->steps[axis]=", block->steps[axis], " err_corr=", error_correction);
139 139
               break;
140 140
             case CORE_AXIS_2:
141 141
               //block->steps[CORE_AXIS_1] += influence_distance_mm[axis] * planner.settings.axis_steps_per_mm[CORE_AXIS_1];;
142
-              //SERIAL_ECHOLNPAIR("CORE_AXIS_2 dir change. distance=", distance_mm[axis], " r.err=", residual_error[axis],
142
+              //SERIAL_ECHOLNPGM("CORE_AXIS_2 dir change. distance=", distance_mm[axis], " r.err=", residual_error[axis],
143 143
               //  " da=", da, " db=", db, " block->steps[axis]=", block->steps[axis], " err_corr=", error_correction);
144 144
               break;
145 145
             case NORMAL_AXIS: break;

+ 5
- 5
Marlin/src/feature/bedlevel/abl/abl.cpp Целия файл

@@ -336,11 +336,11 @@ float bilinear_z_offset(const xy_pos_t &raw) {
336 336
   /*
337 337
   static float last_offset = 0;
338 338
   if (ABS(last_offset - offset) > 0.2) {
339
-    SERIAL_ECHOLNPAIR("Sudden Shift at x=", rel.x, " / ", bilinear_grid_spacing.x, " -> thisg.x=", thisg.x);
340
-    SERIAL_ECHOLNPAIR(" y=", rel.y, " / ", bilinear_grid_spacing.y, " -> thisg.y=", thisg.y);
341
-    SERIAL_ECHOLNPAIR(" ratio.x=", ratio.x, " ratio.y=", ratio.y);
342
-    SERIAL_ECHOLNPAIR(" z1=", z1, " z2=", z2, " z3=", z3, " z4=", z4);
343
-    SERIAL_ECHOLNPAIR(" L=", L, " R=", R, " offset=", offset);
339
+    SERIAL_ECHOLNPGM("Sudden Shift at x=", rel.x, " / ", bilinear_grid_spacing.x, " -> thisg.x=", thisg.x);
340
+    SERIAL_ECHOLNPGM(" y=", rel.y, " / ", bilinear_grid_spacing.y, " -> thisg.y=", thisg.y);
341
+    SERIAL_ECHOLNPGM(" ratio.x=", ratio.x, " ratio.y=", ratio.y);
342
+    SERIAL_ECHOLNPGM(" z1=", z1, " z2=", z2, " z3=", z3, " z4=", z4);
343
+    SERIAL_ECHOLNPGM(" L=", L, " R=", R, " offset=", offset);
344 344
   }
345 345
   last_offset = offset;
346 346
   //*/

+ 1
- 1
Marlin/src/feature/bedlevel/ubl/ubl.cpp Целия файл

@@ -51,7 +51,7 @@ void unified_bed_leveling::report_current_mesh() {
51 51
   GRID_LOOP(x, y)
52 52
     if (!isnan(z_values[x][y])) {
53 53
       SERIAL_ECHO_START();
54
-      SERIAL_ECHOPAIR("  M421 I", x, " J", y);
54
+      SERIAL_ECHOPGM("  M421 I", x, " J", y);
55 55
       SERIAL_ECHOLNPAIR_F_P(SP_Z_STR, z_values[x][y], 4);
56 56
       serial_delay(75); // Prevent Printrun from exploding
57 57
     }

+ 4
- 4
Marlin/src/feature/bedlevel/ubl/ubl.h Целия файл

@@ -208,7 +208,7 @@ public:
208 208
 
209 209
       if (DEBUGGING(LEVELING)) {
210 210
         if (WITHIN(x1_i, 0, (GRID_MAX_POINTS_X) - 1)) DEBUG_ECHOPGM("yi"); else DEBUG_ECHOPGM("x1_i");
211
-        DEBUG_ECHOLNPAIR(" out of bounds in z_correction_for_x_on_horizontal_mesh_line(rx0=", rx0, ",x1_i=", x1_i, ",yi=", yi, ")");
211
+        DEBUG_ECHOLNPGM(" out of bounds in z_correction_for_x_on_horizontal_mesh_line(rx0=", rx0, ",x1_i=", x1_i, ",yi=", yi, ")");
212 212
       }
213 213
 
214 214
       // The requested location is off the mesh. Return UBL_Z_RAISE_WHEN_OFF_MESH or NAN.
@@ -231,7 +231,7 @@ public:
231 231
 
232 232
       if (DEBUGGING(LEVELING)) {
233 233
         if (WITHIN(xi, 0, (GRID_MAX_POINTS_X) - 1)) DEBUG_ECHOPGM("y1_i"); else DEBUG_ECHOPGM("xi");
234
-        DEBUG_ECHOLNPAIR(" out of bounds in z_correction_for_y_on_vertical_mesh_line(ry0=", ry0, ", xi=", xi, ", y1_i=", y1_i, ")");
234
+        DEBUG_ECHOLNPGM(" out of bounds in z_correction_for_y_on_vertical_mesh_line(ry0=", ry0, ", xi=", xi, ", y1_i=", y1_i, ")");
235 235
       }
236 236
 
237 237
       // The requested location is off the mesh. Return UBL_Z_RAISE_WHEN_OFF_MESH or NAN.
@@ -275,11 +275,11 @@ public:
275 275
                      // because part of the Mesh is undefined and we don't have the
276 276
                      // information we need to complete the height correction.
277 277
 
278
-      if (DEBUGGING(MESH_ADJUST)) DEBUG_ECHOLNPAIR("??? Yikes! NAN in ");
278
+      if (DEBUGGING(MESH_ADJUST)) DEBUG_ECHOLNPGM("??? Yikes! NAN in ");
279 279
     }
280 280
 
281 281
     if (DEBUGGING(MESH_ADJUST)) {
282
-      DEBUG_ECHOPAIR("get_z_correction(", rx0, ", ", ry0);
282
+      DEBUG_ECHOPGM("get_z_correction(", rx0, ", ", ry0);
283 283
       DEBUG_ECHOLNPAIR_F(") => ", z0, 6);
284 284
     }
285 285
 

+ 30
- 30
Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp Целия файл

@@ -428,7 +428,7 @@ void unified_bed_leveling::G29() {
428 428
             SERIAL_ECHOLNPGM("Mesh invalidated. Probing mesh.");
429 429
           }
430 430
           if (param.V_verbosity > 1) {
431
-            SERIAL_ECHOPAIR("Probing around (", param.XY_pos.x);
431
+            SERIAL_ECHOPGM("Probing around (", param.XY_pos.x);
432 432
             SERIAL_CHAR(',');
433 433
             SERIAL_DECIMAL(param.XY_pos.y);
434 434
             SERIAL_ECHOLNPGM(").\n");
@@ -602,7 +602,7 @@ void unified_bed_leveling::G29() {
602 602
     }
603 603
 
604 604
     if (!WITHIN(param.KLS_storage_slot, 0, a - 1)) {
605
-      SERIAL_ECHOLNPAIR("?Invalid storage slot.\n?Use 0 to ", a - 1);
605
+      SERIAL_ECHOLNPGM("?Invalid storage slot.\n?Use 0 to ", a - 1);
606 606
       return;
607 607
     }
608 608
 
@@ -630,7 +630,7 @@ void unified_bed_leveling::G29() {
630 630
     }
631 631
 
632 632
     if (!WITHIN(param.KLS_storage_slot, 0, a - 1)) {
633
-      SERIAL_ECHOLNPAIR("?Invalid storage slot.\n?Use 0 to ", a - 1);
633
+      SERIAL_ECHOLNPGM("?Invalid storage slot.\n?Use 0 to ", a - 1);
634 634
       goto LEAVE;
635 635
     }
636 636
 
@@ -653,7 +653,7 @@ void unified_bed_leveling::G29() {
653 653
   #endif
654 654
 
655 655
   #ifdef Z_PROBE_END_SCRIPT
656
-    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
656
+    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
657 657
     if (probe_deployed) {
658 658
       planner.synchronize();
659 659
       gcode.process_subcommands_now_P(PSTR(Z_PROBE_END_SCRIPT));
@@ -690,7 +690,7 @@ void unified_bed_leveling::adjust_mesh_to_mean(const bool cflag, const_float_t o
690 690
     if (!isnan(z_values[x][y]))
691 691
       sum_of_diff_squared += sq(z_values[x][y] - mean);
692 692
 
693
-  SERIAL_ECHOLNPAIR("# of samples: ", n);
693
+  SERIAL_ECHOLNPGM("# of samples: ", n);
694 694
   SERIAL_ECHOLNPAIR_F("Mean Mesh Height: ", mean, 6);
695 695
 
696 696
   const float sigma = SQRT(sum_of_diff_squared / (n + 1));
@@ -735,7 +735,7 @@ void unified_bed_leveling::shift_mesh_height() {
735 735
       if (do_ubl_mesh_map) display_map(param.T_map_type);
736 736
 
737 737
       const uint8_t point_num = (GRID_MAX_POINTS - count) + 1;
738
-      SERIAL_ECHOLNPAIR("Probing mesh point ", point_num, "/", GRID_MAX_POINTS, ".");
738
+      SERIAL_ECHOLNPGM("Probing mesh point ", point_num, "/", GRID_MAX_POINTS, ".");
739 739
       TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), point_num, int(GRID_MAX_POINTS)));
740 740
 
741 741
       #if HAS_LCD_MENU
@@ -1450,7 +1450,7 @@ void unified_bed_leveling::smart_fill_mesh() {
1450 1450
         #endif
1451 1451
         if (param.V_verbosity > 3) {
1452 1452
           serial_spaces(16);
1453
-          SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z);
1453
+          SERIAL_ECHOLNPGM("Corrected_Z=", measured_z);
1454 1454
         }
1455 1455
         incremental_LSF(&lsf_results, points[0], measured_z);
1456 1456
       }
@@ -1469,7 +1469,7 @@ void unified_bed_leveling::smart_fill_mesh() {
1469 1469
           measured_z -= get_z_correction(points[1]);
1470 1470
           if (param.V_verbosity > 3) {
1471 1471
             serial_spaces(16);
1472
-            SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z);
1472
+            SERIAL_ECHOLNPGM("Corrected_Z=", measured_z);
1473 1473
           }
1474 1474
           incremental_LSF(&lsf_results, points[1], measured_z);
1475 1475
         }
@@ -1489,7 +1489,7 @@ void unified_bed_leveling::smart_fill_mesh() {
1489 1489
           measured_z -= get_z_correction(points[2]);
1490 1490
           if (param.V_verbosity > 3) {
1491 1491
             serial_spaces(16);
1492
-            SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z);
1492
+            SERIAL_ECHOLNPGM("Corrected_Z=", measured_z);
1493 1493
           }
1494 1494
           incremental_LSF(&lsf_results, points[2], measured_z);
1495 1495
         }
@@ -1517,7 +1517,7 @@ void unified_bed_leveling::smart_fill_mesh() {
1517 1517
           rpos.y = y_min + dy * (zig_zag ? param.J_grid_size - 1 - iy : iy);
1518 1518
 
1519 1519
           if (!abort_flag) {
1520
-            SERIAL_ECHOLNPAIR("Tilting mesh point ", point_num, "/", total_points, "\n");
1520
+            SERIAL_ECHOLNPGM("Tilting mesh point ", point_num, "/", total_points, "\n");
1521 1521
             TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_LCD_TILTING_MESH), point_num, total_points));
1522 1522
 
1523 1523
             measured_z = probe.probe_at_point(rpos, parser.seen_test('E') ? PROBE_PT_STOW : PROBE_PT_RAISE, param.V_verbosity); // TODO: Needs error handling
@@ -1545,7 +1545,7 @@ void unified_bed_leveling::smart_fill_mesh() {
1545 1545
 
1546 1546
             if (param.V_verbosity > 3) {
1547 1547
               serial_spaces(16);
1548
-              SERIAL_ECHOLNPAIR("Corrected_Z=", measured_z);
1548
+              SERIAL_ECHOLNPGM("Corrected_Z=", measured_z);
1549 1549
             }
1550 1550
             incremental_LSF(&lsf_results, rpos, measured_z);
1551 1551
           }
@@ -1648,7 +1648,7 @@ void unified_bed_leveling::smart_fill_mesh() {
1648 1648
         DEBUG_ECHOLNPAIR_F("0 : ", normed(safe_homing_xy, 0), 6);
1649 1649
         d_from(); DEBUG_ECHOPGM("safe home with Z=");
1650 1650
         DEBUG_ECHOLNPAIR_F("mesh value ", normed(safe_homing_xy, get_z_correction(safe_homing_xy)), 6);
1651
-        DEBUG_ECHOPAIR("   Z error = (", Z_SAFE_HOMING_X_POINT, ",", Z_SAFE_HOMING_Y_POINT);
1651
+        DEBUG_ECHOPGM("   Z error = (", Z_SAFE_HOMING_X_POINT, ",", Z_SAFE_HOMING_Y_POINT);
1652 1652
         DEBUG_ECHOLNPAIR_F(") = ", get_z_correction(safe_homing_xy), 6);
1653 1653
       #endif
1654 1654
     } // DEBUGGING(LEVELING)
@@ -1722,7 +1722,7 @@ void unified_bed_leveling::smart_fill_mesh() {
1722 1722
     if (storage_slot == -1)
1723 1723
       SERIAL_ECHOPGM("No Mesh Loaded.");
1724 1724
     else
1725
-      SERIAL_ECHOPAIR("Mesh ", storage_slot, " Loaded.");
1725
+      SERIAL_ECHOPGM("Mesh ", storage_slot, " Loaded.");
1726 1726
     SERIAL_EOL();
1727 1727
     serial_delay(50);
1728 1728
 
@@ -1736,14 +1736,14 @@ void unified_bed_leveling::smart_fill_mesh() {
1736 1736
       SERIAL_ECHOLNPAIR_F("Probe Offset M851 Z", probe.offset.z, 7);
1737 1737
     #endif
1738 1738
 
1739
-    SERIAL_ECHOLNPAIR("MESH_MIN_X  " STRINGIFY(MESH_MIN_X) "=", MESH_MIN_X); serial_delay(50);
1740
-    SERIAL_ECHOLNPAIR("MESH_MIN_Y  " STRINGIFY(MESH_MIN_Y) "=", MESH_MIN_Y); serial_delay(50);
1741
-    SERIAL_ECHOLNPAIR("MESH_MAX_X  " STRINGIFY(MESH_MAX_X) "=", MESH_MAX_X); serial_delay(50);
1742
-    SERIAL_ECHOLNPAIR("MESH_MAX_Y  " STRINGIFY(MESH_MAX_Y) "=", MESH_MAX_Y); serial_delay(50);
1743
-    SERIAL_ECHOLNPAIR("GRID_MAX_POINTS_X  ", GRID_MAX_POINTS_X);             serial_delay(50);
1744
-    SERIAL_ECHOLNPAIR("GRID_MAX_POINTS_Y  ", GRID_MAX_POINTS_Y);             serial_delay(50);
1745
-    SERIAL_ECHOLNPAIR("MESH_X_DIST  ", MESH_X_DIST);
1746
-    SERIAL_ECHOLNPAIR("MESH_Y_DIST  ", MESH_Y_DIST);                         serial_delay(50);
1739
+    SERIAL_ECHOLNPGM("MESH_MIN_X  " STRINGIFY(MESH_MIN_X) "=", MESH_MIN_X); serial_delay(50);
1740
+    SERIAL_ECHOLNPGM("MESH_MIN_Y  " STRINGIFY(MESH_MIN_Y) "=", MESH_MIN_Y); serial_delay(50);
1741
+    SERIAL_ECHOLNPGM("MESH_MAX_X  " STRINGIFY(MESH_MAX_X) "=", MESH_MAX_X); serial_delay(50);
1742
+    SERIAL_ECHOLNPGM("MESH_MAX_Y  " STRINGIFY(MESH_MAX_Y) "=", MESH_MAX_Y); serial_delay(50);
1743
+    SERIAL_ECHOLNPGM("GRID_MAX_POINTS_X  ", GRID_MAX_POINTS_X);             serial_delay(50);
1744
+    SERIAL_ECHOLNPGM("GRID_MAX_POINTS_Y  ", GRID_MAX_POINTS_Y);             serial_delay(50);
1745
+    SERIAL_ECHOLNPGM("MESH_X_DIST  ", MESH_X_DIST);
1746
+    SERIAL_ECHOLNPGM("MESH_Y_DIST  ", MESH_Y_DIST);                         serial_delay(50);
1747 1747
 
1748 1748
     SERIAL_ECHOPGM("X-Axis Mesh Points at: ");
1749 1749
     LOOP_L_N(i, GRID_MAX_POINTS_X) {
@@ -1762,27 +1762,27 @@ void unified_bed_leveling::smart_fill_mesh() {
1762 1762
     SERIAL_EOL();
1763 1763
 
1764 1764
     #if HAS_KILL
1765
-      SERIAL_ECHOLNPAIR("Kill pin on :", KILL_PIN, "  state:", kill_state());
1765
+      SERIAL_ECHOLNPGM("Kill pin on :", KILL_PIN, "  state:", kill_state());
1766 1766
     #endif
1767 1767
 
1768 1768
     SERIAL_EOL();
1769 1769
     serial_delay(50);
1770 1770
 
1771 1771
     #if ENABLED(UBL_DEVEL_DEBUGGING)
1772
-      SERIAL_ECHOLNPAIR("ubl_state_at_invocation :", ubl_state_at_invocation, "\nubl_state_recursion_chk :", ubl_state_recursion_chk);
1772
+      SERIAL_ECHOLNPGM("ubl_state_at_invocation :", ubl_state_at_invocation, "\nubl_state_recursion_chk :", ubl_state_recursion_chk);
1773 1773
       serial_delay(50);
1774 1774
 
1775
-      SERIAL_ECHOLNPAIR("Meshes go from ", hex_address((void*)settings.meshes_start_index()), " to ", hex_address((void*)settings.meshes_end_index()));
1775
+      SERIAL_ECHOLNPGM("Meshes go from ", hex_address((void*)settings.meshes_start_index()), " to ", hex_address((void*)settings.meshes_end_index()));
1776 1776
       serial_delay(50);
1777 1777
 
1778
-      SERIAL_ECHOLNPAIR("sizeof(ubl) :  ", sizeof(ubl));         SERIAL_EOL();
1779
-      SERIAL_ECHOLNPAIR("z_value[][] size: ", sizeof(z_values)); SERIAL_EOL();
1778
+      SERIAL_ECHOLNPGM("sizeof(ubl) :  ", sizeof(ubl));         SERIAL_EOL();
1779
+      SERIAL_ECHOLNPGM("z_value[][] size: ", sizeof(z_values)); SERIAL_EOL();
1780 1780
       serial_delay(25);
1781 1781
 
1782
-      SERIAL_ECHOLNPAIR("EEPROM free for UBL: ", hex_address((void*)(settings.meshes_end_index() - settings.meshes_start_index())));
1782
+      SERIAL_ECHOLNPGM("EEPROM free for UBL: ", hex_address((void*)(settings.meshes_end_index() - settings.meshes_start_index())));
1783 1783
       serial_delay(50);
1784 1784
 
1785
-      SERIAL_ECHOLNPAIR("EEPROM can hold ", settings.calc_num_meshes(), " meshes.\n");
1785
+      SERIAL_ECHOLNPGM("EEPROM can hold ", settings.calc_num_meshes(), " meshes.\n");
1786 1786
       serial_delay(25);
1787 1787
     #endif // UBL_DEVEL_DEBUGGING
1788 1788
 
@@ -1829,7 +1829,7 @@ void unified_bed_leveling::smart_fill_mesh() {
1829 1829
     }
1830 1830
 
1831 1831
     if (!parser.has_value() || !WITHIN(parser.value_int(), 0, a - 1)) {
1832
-      SERIAL_ECHOLNPAIR("?Invalid storage slot.\n?Use 0 to ", a - 1);
1832
+      SERIAL_ECHOLNPGM("?Invalid storage slot.\n?Use 0 to ", a - 1);
1833 1833
       return;
1834 1834
     }
1835 1835
 
@@ -1838,7 +1838,7 @@ void unified_bed_leveling::smart_fill_mesh() {
1838 1838
     float tmp_z_values[GRID_MAX_POINTS_X][GRID_MAX_POINTS_Y];
1839 1839
     settings.load_mesh(param.KLS_storage_slot, &tmp_z_values);
1840 1840
 
1841
-    SERIAL_ECHOLNPAIR("Subtracting mesh in slot ", param.KLS_storage_slot, " from current mesh.");
1841
+    SERIAL_ECHOLNPGM("Subtracting mesh in slot ", param.KLS_storage_slot, " from current mesh.");
1842 1842
 
1843 1843
     GRID_LOOP(x, y) {
1844 1844
       z_values[x][y] -= tmp_z_values[x][y];

+ 7
- 7
Marlin/src/feature/binary_stream.h Целия файл

@@ -146,9 +146,9 @@ public:
146 146
     transfer_timeout = millis() + TIMEOUT;
147 147
     switch (static_cast<FileTransfer>(packet_type)) {
148 148
       case FileTransfer::QUERY:
149
-        SERIAL_ECHOPAIR("PFT:version:", VERSION_MAJOR, ".", VERSION_MINOR, ".", VERSION_PATCH);
149
+        SERIAL_ECHOPGM("PFT:version:", VERSION_MAJOR, ".", VERSION_MINOR, ".", VERSION_PATCH);
150 150
         #if ENABLED(BINARY_STREAM_COMPRESSION)
151
-          SERIAL_ECHOLNPAIR(":compression:heatshrink,", HEATSHRINK_STATIC_WINDOW_BITS, ",", HEATSHRINK_STATIC_LOOKAHEAD_BITS);
151
+          SERIAL_ECHOLNPGM(":compression:heatshrink,", HEATSHRINK_STATIC_WINDOW_BITS, ",", HEATSHRINK_STATIC_LOOKAHEAD_BITS);
152 152
         #else
153 153
           SERIAL_ECHOLNPGM(":compression:none");
154 154
         #endif
@@ -322,7 +322,7 @@ public:
322 322
             if (packet.header.checksum == packet.header_checksum) {
323 323
               // The SYNC control packet is a special case in that it doesn't require the stream sync to be correct
324 324
               if (static_cast<Protocol>(packet.header.protocol()) == Protocol::CONTROL && static_cast<ProtocolControl>(packet.header.type()) == ProtocolControl::SYNC) {
325
-                  SERIAL_ECHOLNPAIR("ss", sync, ",", buffer_size, ",", VERSION_MAJOR, ".", VERSION_MINOR, ".", VERSION_PATCH);
325
+                  SERIAL_ECHOLNPGM("ss", sync, ",", buffer_size, ",", VERSION_MAJOR, ".", VERSION_MINOR, ".", VERSION_PATCH);
326 326
                   stream_state = StreamState::PACKET_RESET;
327 327
                   break;
328 328
               }
@@ -337,7 +337,7 @@ public:
337 337
                   stream_state = StreamState::PACKET_PROCESS;
338 338
               }
339 339
               else if (packet.header.sync == sync - 1) {           // ok response must have been lost
340
-                SERIAL_ECHOLNPAIR("ok", packet.header.sync);  // transmit valid packet received and drop the payload
340
+                SERIAL_ECHOLNPGM("ok", packet.header.sync);  // transmit valid packet received and drop the payload
341 341
                 stream_state = StreamState::PACKET_RESET;
342 342
               }
343 343
               else if (packet_retries) {
@@ -393,7 +393,7 @@ public:
393 393
           packet_retries = 0;
394 394
           bytes_received += packet.header.size;
395 395
 
396
-          SERIAL_ECHOLNPAIR("ok", packet.header.sync); // transmit valid packet received
396
+          SERIAL_ECHOLNPGM("ok", packet.header.sync); // transmit valid packet received
397 397
           dispatch();
398 398
           stream_state = StreamState::PACKET_RESET;
399 399
           break;
@@ -402,7 +402,7 @@ public:
402 402
             packet_retries++;
403 403
             stream_state = StreamState::PACKET_RESET;
404 404
             SERIAL_ECHO_MSG("Resend request ", packet_retries);
405
-            SERIAL_ECHOLNPAIR("rs", sync);
405
+            SERIAL_ECHOLNPGM("rs", sync);
406 406
           }
407 407
           else
408 408
             stream_state = StreamState::PACKET_ERROR;
@@ -412,7 +412,7 @@ public:
412 412
           stream_state = StreamState::PACKET_RESEND;
413 413
           break;
414 414
         case StreamState::PACKET_ERROR:
415
-          SERIAL_ECHOLNPAIR("fe", packet.header.sync);
415
+          SERIAL_ECHOLNPGM("fe", packet.header.sync);
416 416
           reset(); // reset everything, resync required
417 417
           stream_state = StreamState::PACKET_RESET;
418 418
           break;

+ 4
- 4
Marlin/src/feature/bltouch.cpp Целия файл

@@ -39,7 +39,7 @@ void stop();
39 39
 #include "../core/debug_out.h"
40 40
 
41 41
 bool BLTouch::command(const BLTCommand cmd, const millis_t &ms) {
42
-  if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPAIR("BLTouch Command :", cmd);
42
+  if (DEBUGGING(LEVELING)) SERIAL_ECHOLNPGM("BLTouch Command :", cmd);
43 43
   MOVE_SERVO(Z_PROBE_SERVO_NR, cmd);
44 44
   safe_delay(_MAX(ms, (uint32_t)BLTOUCH_DELAY)); // BLTOUCH_DELAY is also the *minimum* delay
45 45
   return triggered();
@@ -64,7 +64,7 @@ void BLTouch::init(const bool set_voltage/*=false*/) {
64 64
   #else
65 65
 
66 66
     if (DEBUGGING(LEVELING)) {
67
-      DEBUG_ECHOLNPAIR("last_written_mode - ", last_written_mode);
67
+      DEBUG_ECHOLNPGM("last_written_mode - ", last_written_mode);
68 68
       DEBUG_ECHOLNPGM("config mode - "
69 69
         #if ENABLED(BLTOUCH_SET_5V_MODE)
70 70
           "BLTOUCH_SET_5V_MODE"
@@ -175,7 +175,7 @@ bool BLTouch::status_proc() {
175 175
   _set_SW_mode();              // Incidentally, _set_SW_mode() will also RESET any active alarm
176 176
   const bool tr = triggered(); // If triggered in SW mode, the pin is up, it is STOWED
177 177
 
178
-  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("BLTouch is ", tr);
178
+  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch is ", tr);
179 179
 
180 180
   if (tr) _stow(); else _deploy();  // Turn off SW mode, reset any trigger, honor pin state
181 181
   return !tr;
@@ -187,7 +187,7 @@ void BLTouch::mode_conv_proc(const bool M5V) {
187 187
    * BLTOUCH V3.0: This will set the mode (twice) and sadly, a STOW is needed at the end, because of the deploy
188 188
    * BLTOUCH V3.1: This will set the mode and store it in the eeprom. The STOW is not needed but does not hurt
189 189
    */
190
-  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("BLTouch Set Mode - ", M5V);
190
+  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("BLTouch Set Mode - ", M5V);
191 191
   _deploy();
192 192
   if (M5V) _set_5V_mode(); else _set_OD_mode();
193 193
   _mode_store();

+ 4
- 4
Marlin/src/feature/dac/stepper_dac.cpp Целия файл

@@ -85,15 +85,15 @@ void StepperDAC::print_values() {
85 85
   if (!dac_present) return;
86 86
   SERIAL_ECHO_MSG("Stepper current values in % (Amps):");
87 87
   SERIAL_ECHO_START();
88
-  SERIAL_ECHOPAIR_P(SP_X_LBL, dac_perc(X_AXIS), PSTR(" ("), dac_amps(X_AXIS), PSTR(")"));
88
+  SERIAL_ECHOPGM_P(SP_X_LBL, dac_perc(X_AXIS), PSTR(" ("), dac_amps(X_AXIS), PSTR(")"));
89 89
   #if HAS_Y_AXIS
90
-    SERIAL_ECHOPAIR_P(SP_Y_LBL, dac_perc(Y_AXIS), PSTR(" ("), dac_amps(Y_AXIS), PSTR(")"));
90
+    SERIAL_ECHOPGM_P(SP_Y_LBL, dac_perc(Y_AXIS), PSTR(" ("), dac_amps(Y_AXIS), PSTR(")"));
91 91
   #endif
92 92
   #if HAS_Z_AXIS
93
-    SERIAL_ECHOPAIR_P(SP_Z_LBL, dac_perc(Z_AXIS), PSTR(" ("), dac_amps(Z_AXIS), PSTR(")"));
93
+    SERIAL_ECHOPGM_P(SP_Z_LBL, dac_perc(Z_AXIS), PSTR(" ("), dac_amps(Z_AXIS), PSTR(")"));
94 94
   #endif
95 95
   #if HAS_EXTRUDERS
96
-    SERIAL_ECHOLNPAIR_P(SP_E_LBL, dac_perc(E_AXIS), PSTR(" ("), dac_amps(E_AXIS), PSTR(")"));
96
+    SERIAL_ECHOLNPGM_P(SP_E_LBL, dac_perc(E_AXIS), PSTR(" ("), dac_amps(E_AXIS), PSTR(")"));
97 97
   #endif
98 98
 }
99 99
 

+ 27
- 27
Marlin/src/feature/encoder_i2c.cpp Целия файл

@@ -49,7 +49,7 @@ void I2CPositionEncoder::init(const uint8_t address, const AxisEnum axis) {
49 49
 
50 50
   initialized = true;
51 51
 
52
-  SERIAL_ECHOLNPAIR("Setting up encoder on ", AS_CHAR(axis_codes[encoderAxis]), " axis, addr = ", address);
52
+  SERIAL_ECHOLNPGM("Setting up encoder on ", AS_CHAR(axis_codes[encoderAxis]), " axis, addr = ", address);
53 53
 
54 54
   position = get_position();
55 55
 }
@@ -67,7 +67,7 @@ void I2CPositionEncoder::update() {
67 67
     /*
68 68
     if (trusted) { //commented out as part of the note below
69 69
       trusted = false;
70
-      SERIAL_ECHOLNPAIR("Fault detected on ", AS_CHAR(axis_codes[encoderAxis]), " axis encoder. Disengaging error correction until module is trusted again.");
70
+      SERIAL_ECHOLNPGM("Fault detected on ", AS_CHAR(axis_codes[encoderAxis]), " axis encoder. Disengaging error correction until module is trusted again.");
71 71
     }
72 72
     */
73 73
     return;
@@ -92,7 +92,7 @@ void I2CPositionEncoder::update() {
92 92
       if (millis() - lastErrorTime > I2CPE_TIME_TRUSTED) {
93 93
         trusted = true;
94 94
 
95
-        SERIAL_ECHOLNPAIR("Untrusted encoder module on ", AS_CHAR(axis_codes[encoderAxis]), " axis has been fault-free for set duration, reinstating error correction.");
95
+        SERIAL_ECHOLNPGM("Untrusted encoder module on ", AS_CHAR(axis_codes[encoderAxis]), " axis has been fault-free for set duration, reinstating error correction.");
96 96
 
97 97
         //the encoder likely lost its place when the error occurred, so we'll reset and use the printer's
98 98
         //idea of where it the axis is to re-initialize
@@ -103,10 +103,10 @@ void I2CPositionEncoder::update() {
103 103
         zeroOffset -= (positionInTicks - get_position());
104 104
 
105 105
         #ifdef I2CPE_DEBUG
106
-          SERIAL_ECHOLNPAIR("Current position is ", pos);
107
-          SERIAL_ECHOLNPAIR("Position in encoder ticks is ", positionInTicks);
108
-          SERIAL_ECHOLNPAIR("New zero-offset of ", zeroOffset);
109
-          SERIAL_ECHOPAIR("New position reads as ", get_position());
106
+          SERIAL_ECHOLNPGM("Current position is ", pos);
107
+          SERIAL_ECHOLNPGM("Position in encoder ticks is ", positionInTicks);
108
+          SERIAL_ECHOLNPGM("New zero-offset of ", zeroOffset);
109
+          SERIAL_ECHOPGM("New position reads as ", get_position());
110 110
           SERIAL_CHAR('(');
111 111
           SERIAL_DECIMAL(mm_from_count(get_position()));
112 112
           SERIAL_ECHOLNPGM(")");
@@ -149,12 +149,12 @@ void I2CPositionEncoder::update() {
149 149
       const int32_t error = get_axis_error_steps(false);
150 150
     #endif
151 151
 
152
-    //SERIAL_ECHOLNPAIR("Axis error steps: ", error);
152
+    //SERIAL_ECHOLNPGM("Axis error steps: ", error);
153 153
 
154 154
     #ifdef I2CPE_ERR_THRESH_ABORT
155 155
       if (ABS(error) > I2CPE_ERR_THRESH_ABORT * planner.settings.axis_steps_per_mm[encoderAxis]) {
156 156
         //kill(PSTR("Significant Error"));
157
-        SERIAL_ECHOLNPAIR("Axis error over threshold, aborting!", error);
157
+        SERIAL_ECHOLNPGM("Axis error over threshold, aborting!", error);
158 158
         safe_delay(5000);
159 159
       }
160 160
     #endif
@@ -173,7 +173,7 @@ void I2CPositionEncoder::update() {
173 173
             LOOP_L_N(i, I2CPE_ERR_PRST_ARRAY_SIZE) sumP += errPrst[i];
174 174
             const int32_t errorP = int32_t(sumP * RECIPROCAL(I2CPE_ERR_PRST_ARRAY_SIZE));
175 175
             SERIAL_CHAR(axis_codes[encoderAxis]);
176
-            SERIAL_ECHOLNPAIR(" : CORRECT ERR ", errorP * planner.steps_to_mm[encoderAxis], "mm");
176
+            SERIAL_ECHOLNPGM(" : CORRECT ERR ", errorP * planner.steps_to_mm[encoderAxis], "mm");
177 177
             babystep.add_steps(encoderAxis, -LROUND(errorP));
178 178
             errPrstIdx = 0;
179 179
           }
@@ -193,7 +193,7 @@ void I2CPositionEncoder::update() {
193 193
       const millis_t ms = millis();
194 194
       if (ELAPSED(ms, nextErrorCountTime)) {
195 195
         SERIAL_CHAR(axis_codes[encoderAxis]);
196
-        SERIAL_ECHOLNPAIR(" : LARGE ERR ", error, "; diffSum=", diffSum);
196
+        SERIAL_ECHOLNPGM(" : LARGE ERR ", error, "; diffSum=", diffSum);
197 197
         errorCount++;
198 198
         nextErrorCountTime = ms + I2CPE_ERR_CNT_DEBOUNCE_MS;
199 199
       }
@@ -213,7 +213,7 @@ void I2CPositionEncoder::set_homed() {
213 213
 
214 214
     #ifdef I2CPE_DEBUG
215 215
       SERIAL_CHAR(axis_codes[encoderAxis]);
216
-      SERIAL_ECHOLNPAIR(" axis encoder homed, offset of ", zeroOffset, " ticks.");
216
+      SERIAL_ECHOLNPGM(" axis encoder homed, offset of ", zeroOffset, " ticks.");
217 217
     #endif
218 218
   }
219 219
 }
@@ -253,7 +253,7 @@ float I2CPositionEncoder::get_axis_error_mm(const bool report) {
253 253
 
254 254
   if (report) {
255 255
     SERIAL_CHAR(axis_codes[encoderAxis]);
256
-    SERIAL_ECHOLNPAIR(" axis target=", target, "mm; actual=", actual, "mm; err=", error, "mm");
256
+    SERIAL_ECHOLNPGM(" axis target=", target, "mm; actual=", actual, "mm; err=", error, "mm");
257 257
   }
258 258
 
259 259
   return error;
@@ -288,7 +288,7 @@ int32_t I2CPositionEncoder::get_axis_error_steps(const bool report) {
288 288
 
289 289
   if (report) {
290 290
     SERIAL_CHAR(axis_codes[encoderAxis]);
291
-    SERIAL_ECHOLNPAIR(" axis target=", target, "; actual=", encoderCountInStepperTicksScaled, "; err=", error);
291
+    SERIAL_ECHOLNPGM(" axis target=", target, "; actual=", encoderCountInStepperTicksScaled, "; err=", error);
292 292
   }
293 293
 
294 294
   if (suppressOutput) {
@@ -424,15 +424,15 @@ void I2CPositionEncoder::calibrate_steps_mm(const uint8_t iter) {
424 424
 
425 425
     travelledDistance = mm_from_count(ABS(stopCount - startCount));
426 426
 
427
-    SERIAL_ECHOLNPAIR("Attempted travel: ", travelDistance, "mm");
428
-    SERIAL_ECHOLNPAIR("   Actual travel:  ", travelledDistance, "mm");
427
+    SERIAL_ECHOLNPGM("Attempted travel: ", travelDistance, "mm");
428
+    SERIAL_ECHOLNPGM("   Actual travel:  ", travelledDistance, "mm");
429 429
 
430 430
     //Calculate new axis steps per unit
431 431
     old_steps_mm = planner.settings.axis_steps_per_mm[encoderAxis];
432 432
     new_steps_mm = (old_steps_mm * travelDistance) / travelledDistance;
433 433
 
434
-    SERIAL_ECHOLNPAIR("Old steps/mm: ", old_steps_mm);
435
-    SERIAL_ECHOLNPAIR("New steps/mm: ", new_steps_mm);
434
+    SERIAL_ECHOLNPGM("Old steps/mm: ", old_steps_mm);
435
+    SERIAL_ECHOLNPGM("New steps/mm: ", new_steps_mm);
436 436
 
437 437
     //Save new value
438 438
     planner.settings.axis_steps_per_mm[encoderAxis] = new_steps_mm;
@@ -449,7 +449,7 @@ void I2CPositionEncoder::calibrate_steps_mm(const uint8_t iter) {
449 449
 
450 450
   if (iter > 1) {
451 451
     total /= (float)iter;
452
-    SERIAL_ECHOLNPAIR("Average steps/mm: ", total);
452
+    SERIAL_ECHOLNPGM("Average steps/mm: ", total);
453 453
   }
454 454
 
455 455
   ec = oldec;
@@ -675,18 +675,18 @@ void I2CPositionEncodersMgr::change_module_address(const uint8_t oldaddr, const
675 675
   // First check 'new' address is not in use
676 676
   Wire.beginTransmission(I2C_ADDRESS(newaddr));
677 677
   if (!Wire.endTransmission()) {
678
-    SERIAL_ECHOLNPAIR("?There is already a device with that address on the I2C bus! (", newaddr, ")");
678
+    SERIAL_ECHOLNPGM("?There is already a device with that address on the I2C bus! (", newaddr, ")");
679 679
     return;
680 680
   }
681 681
 
682 682
   // Now check that we can find the module on the oldaddr address
683 683
   Wire.beginTransmission(I2C_ADDRESS(oldaddr));
684 684
   if (Wire.endTransmission()) {
685
-    SERIAL_ECHOLNPAIR("?No module detected at this address! (", oldaddr, ")");
685
+    SERIAL_ECHOLNPGM("?No module detected at this address! (", oldaddr, ")");
686 686
     return;
687 687
   }
688 688
 
689
-  SERIAL_ECHOLNPAIR("Module found at ", oldaddr, ", changing address to ", newaddr);
689
+  SERIAL_ECHOLNPGM("Module found at ", oldaddr, ", changing address to ", newaddr);
690 690
 
691 691
   // Change the modules address
692 692
   Wire.beginTransmission(I2C_ADDRESS(oldaddr));
@@ -722,11 +722,11 @@ void I2CPositionEncodersMgr::report_module_firmware(const uint8_t address) {
722 722
   // First check there is a module
723 723
   Wire.beginTransmission(I2C_ADDRESS(address));
724 724
   if (Wire.endTransmission()) {
725
-    SERIAL_ECHOLNPAIR("?No module detected at this address! (", address, ")");
725
+    SERIAL_ECHOLNPGM("?No module detected at this address! (", address, ")");
726 726
     return;
727 727
   }
728 728
 
729
-  SERIAL_ECHOLNPAIR("Requesting version info from module at address ", address, ":");
729
+  SERIAL_ECHOLNPGM("Requesting version info from module at address ", address, ":");
730 730
 
731 731
   Wire.beginTransmission(I2C_ADDRESS(address));
732 732
   Wire.write(I2CPE_SET_REPORT_MODE);
@@ -773,13 +773,13 @@ int8_t I2CPositionEncodersMgr::parse() {
773 773
   else if (parser.seenval('I')) {
774 774
 
775 775
     if (!parser.has_value()) {
776
-      SERIAL_ECHOLNPAIR("?I seen, but no index specified! [0-", I2CPE_ENCODER_CNT - 1, "]");
776
+      SERIAL_ECHOLNPGM("?I seen, but no index specified! [0-", I2CPE_ENCODER_CNT - 1, "]");
777 777
       return I2CPE_PARSE_ERR;
778 778
     };
779 779
 
780 780
     I2CPE_idx = parser.value_byte();
781 781
     if (I2CPE_idx >= I2CPE_ENCODER_CNT) {
782
-      SERIAL_ECHOLNPAIR("?Index out of range. [0-", I2CPE_ENCODER_CNT - 1, "]");
782
+      SERIAL_ECHOLNPGM("?Index out of range. [0-", I2CPE_ENCODER_CNT - 1, "]");
783 783
       return I2CPE_PARSE_ERR;
784 784
     }
785 785
 
@@ -954,7 +954,7 @@ void I2CPositionEncodersMgr::M864() {
954 954
     else return;
955 955
   }
956 956
 
957
-  SERIAL_ECHOLNPAIR("Changing module at address ", I2CPE_addr, " to address ", newAddress);
957
+  SERIAL_ECHOLNPGM("Changing module at address ", I2CPE_addr, " to address ", newAddress);
958 958
 
959 959
   change_module_address(I2CPE_addr, newAddress);
960 960
 }

+ 6
- 6
Marlin/src/feature/encoder_i2c.h Целия файл

@@ -236,7 +236,7 @@ class I2CPositionEncodersMgr {
236 236
 
237 237
     static void report_status(const int8_t idx) {
238 238
       CHECK_IDX();
239
-      SERIAL_ECHOLNPAIR("Encoder ", idx, ": ");
239
+      SERIAL_ECHOLNPGM("Encoder ", idx, ": ");
240 240
       encoders[idx].get_raw_count();
241 241
       encoders[idx].passes_test(true);
242 242
     }
@@ -261,32 +261,32 @@ class I2CPositionEncodersMgr {
261 261
 
262 262
     static void report_error_count(const int8_t idx, const AxisEnum axis) {
263 263
       CHECK_IDX();
264
-      SERIAL_ECHOLNPAIR("Error count on ", AS_CHAR(axis_codes[axis]), " axis is ", encoders[idx].get_error_count());
264
+      SERIAL_ECHOLNPGM("Error count on ", AS_CHAR(axis_codes[axis]), " axis is ", encoders[idx].get_error_count());
265 265
     }
266 266
 
267 267
     static void reset_error_count(const int8_t idx, const AxisEnum axis) {
268 268
       CHECK_IDX();
269 269
       encoders[idx].set_error_count(0);
270
-      SERIAL_ECHOLNPAIR("Error count on ", AS_CHAR(axis_codes[axis]), " axis has been reset.");
270
+      SERIAL_ECHOLNPGM("Error count on ", AS_CHAR(axis_codes[axis]), " axis has been reset.");
271 271
     }
272 272
 
273 273
     static void enable_ec(const int8_t idx, const bool enabled, const AxisEnum axis) {
274 274
       CHECK_IDX();
275 275
       encoders[idx].set_ec_enabled(enabled);
276
-      SERIAL_ECHOPAIR("Error correction on ", AS_CHAR(axis_codes[axis]));
276
+      SERIAL_ECHOPGM("Error correction on ", AS_CHAR(axis_codes[axis]));
277 277
       SERIAL_ECHO_TERNARY(encoders[idx].get_ec_enabled(), " axis is ", "en", "dis", "abled.\n");
278 278
     }
279 279
 
280 280
     static void set_ec_threshold(const int8_t idx, const float newThreshold, const AxisEnum axis) {
281 281
       CHECK_IDX();
282 282
       encoders[idx].set_ec_threshold(newThreshold);
283
-      SERIAL_ECHOLNPAIR("Error correct threshold for ", AS_CHAR(axis_codes[axis]), " axis set to ", newThreshold, "mm.");
283
+      SERIAL_ECHOLNPGM("Error correct threshold for ", AS_CHAR(axis_codes[axis]), " axis set to ", newThreshold, "mm.");
284 284
     }
285 285
 
286 286
     static void get_ec_threshold(const int8_t idx, const AxisEnum axis) {
287 287
       CHECK_IDX();
288 288
       const float threshold = encoders[idx].get_ec_threshold();
289
-      SERIAL_ECHOLNPAIR("Error correct threshold for ", AS_CHAR(axis_codes[axis]), " axis is ", threshold, "mm.");
289
+      SERIAL_ECHOLNPGM("Error correct threshold for ", AS_CHAR(axis_codes[axis]), " axis is ", threshold, "mm.");
290 290
     }
291 291
 
292 292
     static int8_t idx_from_axis(const AxisEnum axis) {

+ 17
- 17
Marlin/src/feature/fwretract.cpp Целия файл

@@ -106,20 +106,20 @@ void FWRetract::retract(const bool retracting OPTARG(HAS_MULTI_EXTRUDER, bool sw
106 106
   #endif
107 107
 
108 108
   /* // debugging
109
-    SERIAL_ECHOLNPAIR(
109
+    SERIAL_ECHOLNPGM(
110 110
       "retracting ", AS_DIGIT(retracting),
111 111
       " swapping ", swapping,
112 112
       " active extruder ", active_extruder
113 113
     );
114 114
     LOOP_L_N(i, EXTRUDERS) {
115
-      SERIAL_ECHOLNPAIR("retracted[", i, "] ", AS_DIGIT(retracted[i]));
115
+      SERIAL_ECHOLNPGM("retracted[", i, "] ", AS_DIGIT(retracted[i]));
116 116
       #if HAS_MULTI_EXTRUDER
117
-        SERIAL_ECHOLNPAIR("retracted_swap[", i, "] ", AS_DIGIT(retracted_swap[i]));
117
+        SERIAL_ECHOLNPGM("retracted_swap[", i, "] ", AS_DIGIT(retracted_swap[i]));
118 118
       #endif
119 119
     }
120
-    SERIAL_ECHOLNPAIR("current_position.z ", current_position.z);
121
-    SERIAL_ECHOLNPAIR("current_position.e ", current_position.e);
122
-    SERIAL_ECHOLNPAIR("current_hop ", current_hop);
120
+    SERIAL_ECHOLNPGM("current_position.z ", current_position.z);
121
+    SERIAL_ECHOLNPGM("current_position.e ", current_position.e);
122
+    SERIAL_ECHOLNPGM("current_hop ", current_hop);
123 123
   //*/
124 124
 
125 125
   const float base_retract = TERN1(RETRACT_SYNC_MIXING, (MIXING_STEPPERS))
@@ -181,18 +181,18 @@ void FWRetract::retract(const bool retracting OPTARG(HAS_MULTI_EXTRUDER, bool sw
181 181
   #endif
182 182
 
183 183
   /* // debugging
184
-    SERIAL_ECHOLNPAIR("retracting ", AS_DIGIT(retracting));
185
-    SERIAL_ECHOLNPAIR("swapping ", AS_DIGIT(swapping));
186
-    SERIAL_ECHOLNPAIR("active_extruder ", active_extruder);
184
+    SERIAL_ECHOLNPGM("retracting ", AS_DIGIT(retracting));
185
+    SERIAL_ECHOLNPGM("swapping ", AS_DIGIT(swapping));
186
+    SERIAL_ECHOLNPGM("active_extruder ", active_extruder);
187 187
     LOOP_L_N(i, EXTRUDERS) {
188
-      SERIAL_ECHOLNPAIR("retracted[", i, "] ", AS_DIGIT(retracted[i]));
188
+      SERIAL_ECHOLNPGM("retracted[", i, "] ", AS_DIGIT(retracted[i]));
189 189
       #if HAS_MULTI_EXTRUDER
190
-        SERIAL_ECHOLNPAIR("retracted_swap[", i, "] ", AS_DIGIT(retracted_swap[i]));
190
+        SERIAL_ECHOLNPGM("retracted_swap[", i, "] ", AS_DIGIT(retracted_swap[i]));
191 191
       #endif
192 192
     }
193
-    SERIAL_ECHOLNPAIR("current_position.z ", current_position.z);
194
-    SERIAL_ECHOLNPAIR("current_position.e ", current_position.e);
195
-    SERIAL_ECHOLNPAIR("current_hop ", current_hop);
193
+    SERIAL_ECHOLNPGM("current_position.z ", current_position.z);
194
+    SERIAL_ECHOLNPGM("current_position.e ", current_position.e);
195
+    SERIAL_ECHOLNPGM("current_hop ", current_hop);
196 196
   //*/
197 197
 }
198 198
 
@@ -215,7 +215,7 @@ void FWRetract::M207() {
215 215
 }
216 216
 
217 217
 void FWRetract::M207_report() {
218
-  SERIAL_ECHOLNPAIR_P(
218
+  SERIAL_ECHOLNPGM_P(
219 219
       PSTR("  M207 S"), LINEAR_UNIT(settings.retract_length)
220 220
     , PSTR(" W"), LINEAR_UNIT(settings.swap_retract_length)
221 221
     , PSTR(" F"), LINEAR_UNIT(MMS_TO_MMM(settings.retract_feedrate_mm_s))
@@ -240,7 +240,7 @@ void FWRetract::M208() {
240 240
 }
241 241
 
242 242
 void FWRetract::M208_report() {
243
-  SERIAL_ECHOLNPAIR(
243
+  SERIAL_ECHOLNPGM(
244 244
       "  M208 S", LINEAR_UNIT(settings.retract_recover_extra)
245 245
     , " W", LINEAR_UNIT(settings.swap_retract_recover_extra)
246 246
     , " F", LINEAR_UNIT(MMS_TO_MMM(settings.retract_recover_feedrate_mm_s))
@@ -261,7 +261,7 @@ void FWRetract::M208_report() {
261 261
   }
262 262
 
263 263
   void FWRetract::M209_report() {
264
-    SERIAL_ECHOLNPAIR("  M209 S", AS_DIGIT(autoretract_enabled));
264
+    SERIAL_ECHOLNPGM("  M209 S", AS_DIGIT(autoretract_enabled));
265 265
   }
266 266
 
267 267
 #endif // FWRETRACT_AUTORETRACT

+ 3
- 3
Marlin/src/feature/joystick.cpp Целия файл

@@ -68,13 +68,13 @@ Joystick joystick;
68 68
   void Joystick::report() {
69 69
     SERIAL_ECHOPGM("Joystick");
70 70
     #if HAS_JOY_ADC_X
71
-      SERIAL_ECHOPAIR_P(SP_X_STR, JOY_X(x.raw));
71
+      SERIAL_ECHOPGM_P(SP_X_STR, JOY_X(x.raw));
72 72
     #endif
73 73
     #if HAS_JOY_ADC_Y
74
-      SERIAL_ECHOPAIR_P(SP_Y_STR, JOY_Y(y.raw));
74
+      SERIAL_ECHOPGM_P(SP_Y_STR, JOY_Y(y.raw));
75 75
     #endif
76 76
     #if HAS_JOY_ADC_Z
77
-      SERIAL_ECHOPAIR_P(SP_Z_STR, JOY_Z(z.raw));
77
+      SERIAL_ECHOPGM_P(SP_Z_STR, JOY_Z(z.raw));
78 78
     #endif
79 79
     #if HAS_JOY_ADC_EN
80 80
       SERIAL_ECHO_TERNARY(READ(JOY_EN_PIN), " EN=", "HIGH (dis", "LOW (en", "abled)");

+ 1
- 1
Marlin/src/feature/max7219.cpp Целия файл

@@ -130,7 +130,7 @@ void Max7219::error(const char * const func, const int32_t v1, const int32_t v2/
130 130
     SERIAL_ECHOPGM_P(func);
131 131
     SERIAL_CHAR('(');
132 132
     SERIAL_ECHO(v1);
133
-    if (v2 > 0) SERIAL_ECHOPAIR(", ", v2);
133
+    if (v2 > 0) SERIAL_ECHOPGM(", ", v2);
134 134
     SERIAL_CHAR(')');
135 135
     SERIAL_EOL();
136 136
   #else

+ 1
- 1
Marlin/src/feature/meatpack.cpp Целия файл

@@ -140,7 +140,7 @@ void MeatPack::handle_output_char(const uint8_t c) {
140 140
   #if ENABLED(MP_DEBUG)
141 141
     if (chars_decoded < 1024) {
142 142
       ++chars_decoded;
143
-      DEBUG_ECHOLNPAIR("RB: ", AS_CHAR(c));
143
+      DEBUG_ECHOLNPGM("RB: ", AS_CHAR(c));
144 144
     }
145 145
   #endif
146 146
 }

+ 2
- 2
Marlin/src/feature/mixing.cpp Целия файл

@@ -154,11 +154,11 @@ void Mixer::refresh_collector(const float proportion/*=1.0*/, const uint8_t t/*=
154 154
     cmax = _MAX(cmax, v);
155 155
     csum += v;
156 156
   }
157
-  //SERIAL_ECHOPAIR("Mixer::refresh_collector(", proportion, ", ", t, ") cmax=", cmax, "  csum=", csum, "  color");
157
+  //SERIAL_ECHOPGM("Mixer::refresh_collector(", proportion, ", ", t, ") cmax=", cmax, "  csum=", csum, "  color");
158 158
   const float inv_prop = proportion / csum;
159 159
   MIXER_STEPPER_LOOP(i) {
160 160
     c[i] = color[t][i] * inv_prop;
161
-    //SERIAL_ECHOPAIR(" [", t, "][", i, "] = ", color[t][i], " (", c[i], ")  ");
161
+    //SERIAL_ECHOPGM(" [", t, "][", i, "] = ", color[t][i], " (", c[i], ")  ");
162 162
   }
163 163
   //SERIAL_EOL();
164 164
 }

+ 1
- 1
Marlin/src/feature/mixing.h Целия файл

@@ -152,7 +152,7 @@ class Mixer {
152 152
       MIXER_STEPPER_LOOP(i) mix[i] = mixer_perc_t(100.0f * color[j][i] / ctot);
153 153
 
154 154
       #ifdef MIXER_NORMALIZER_DEBUG
155
-        SERIAL_ECHOPAIR("V-tool ", j, " [ ");
155
+        SERIAL_ECHOPGM("V-tool ", j, " [ ");
156 156
         SERIAL_ECHOLIST_N(MIXING_STEPPERS, color[j][0], color[j][1], color[j][2], color[j][3], color[j][4], color[j][5]);
157 157
         SERIAL_ECHOPGM(" ] to Mix [ ");
158 158
         SERIAL_ECHOLIST_N(MIXING_STEPPERS, mix[0], mix[1], mix[2], mix[3], mix[4], mix[5]);

+ 9
- 9
Marlin/src/feature/mmu/mmu2.cpp Целия файл

@@ -169,7 +169,7 @@ void MMU2::mmu_loop() {
169 169
       if (rx_ok()) {
170 170
         sscanf(rx_buffer, "%huok\n", &version);
171 171
 
172
-        DEBUG_ECHOLNPAIR("MMU => ", version, "\nMMU <= 'S2'");
172
+        DEBUG_ECHOLNPGM("MMU => ", version, "\nMMU <= 'S2'");
173 173
 
174 174
         MMU2_COMMAND("S2");   // Read Build Number
175 175
         state = -3;
@@ -180,7 +180,7 @@ void MMU2::mmu_loop() {
180 180
       if (rx_ok()) {
181 181
         sscanf(rx_buffer, "%huok\n", &buildnr);
182 182
 
183
-        DEBUG_ECHOLNPAIR("MMU => ", buildnr);
183
+        DEBUG_ECHOLNPGM("MMU => ", buildnr);
184 184
 
185 185
         check_version();
186 186
 
@@ -217,7 +217,7 @@ void MMU2::mmu_loop() {
217 217
       if (rx_ok()) {
218 218
         sscanf(rx_buffer, "%hhuok\n", &finda);
219 219
 
220
-        DEBUG_ECHOLNPAIR("MMU => ", finda, "\nMMU - ENABLED");
220
+        DEBUG_ECHOLNPGM("MMU => ", finda, "\nMMU - ENABLED");
221 221
 
222 222
         _enabled = true;
223 223
         state = 1;
@@ -230,7 +230,7 @@ void MMU2::mmu_loop() {
230 230
         if (WITHIN(cmd, MMU_CMD_T0, MMU_CMD_T0 + EXTRUDERS - 1)) {
231 231
           // tool change
232 232
           int filament = cmd - MMU_CMD_T0;
233
-          DEBUG_ECHOLNPAIR("MMU <= T", filament);
233
+          DEBUG_ECHOLNPGM("MMU <= T", filament);
234 234
           tx_printf_P(PSTR("T%d\n"), filament);
235 235
           TERN_(MMU_EXTRUDER_SENSOR, mmu_idl_sens = 1); // enable idler sensor, if any
236 236
           state = 3; // wait for response
@@ -238,7 +238,7 @@ void MMU2::mmu_loop() {
238 238
         else if (WITHIN(cmd, MMU_CMD_L0, MMU_CMD_L0 + EXTRUDERS - 1)) {
239 239
           // load
240 240
           int filament = cmd - MMU_CMD_L0;
241
-          DEBUG_ECHOLNPAIR("MMU <= L", filament);
241
+          DEBUG_ECHOLNPGM("MMU <= L", filament);
242 242
           tx_printf_P(PSTR("L%d\n"), filament);
243 243
           state = 3; // wait for response
244 244
         }
@@ -258,7 +258,7 @@ void MMU2::mmu_loop() {
258 258
         else if (WITHIN(cmd, MMU_CMD_E0, MMU_CMD_E0 + EXTRUDERS - 1)) {
259 259
           // eject filament
260 260
           int filament = cmd - MMU_CMD_E0;
261
-          DEBUG_ECHOLNPAIR("MMU <= E", filament);
261
+          DEBUG_ECHOLNPGM("MMU <= E", filament);
262 262
           tx_printf_P(PSTR("E%d\n"), filament);
263 263
           state = 3; // wait for response
264 264
         }
@@ -271,7 +271,7 @@ void MMU2::mmu_loop() {
271 271
         else if (WITHIN(cmd, MMU_CMD_F0, MMU_CMD_F0 + EXTRUDERS - 1)) {
272 272
           // filament type
273 273
           int filament = cmd - MMU_CMD_F0;
274
-          DEBUG_ECHOLNPAIR("MMU <= F", filament, " ", cmd_arg);
274
+          DEBUG_ECHOLNPGM("MMU <= F", filament, " ", cmd_arg);
275 275
           tx_printf_P(PSTR("F%d %d\n"), filament, cmd_arg);
276 276
           state = 3; // wait for response
277 277
         }
@@ -647,7 +647,7 @@ static void mmu2_not_responding() {
647 647
 
648 648
   void MMU2::mmu_continue_loading() {
649 649
     for (uint8_t i = 0; i < MMU_LOADING_ATTEMPTS_NR; i++) {
650
-      DEBUG_ECHOLNPAIR("Additional load attempt #", i);
650
+      DEBUG_ECHOLNPGM("Additional load attempt #", i);
651 651
       if (FILAMENT_PRESENT()) break;
652 652
       command(MMU_CMD_C0);
653 653
       manage_response(true, true);
@@ -1025,7 +1025,7 @@ void MMU2::execute_extruder_sequence(const E_Step * sequence, int steps) {
1025 1025
     const feedRate_t fr_mm_m = pgm_read_float(&(step->feedRate));
1026 1026
 
1027 1027
     DEBUG_ECHO_START();
1028
-    DEBUG_ECHOLNPAIR("E step ", es, "/", fr_mm_m);
1028
+    DEBUG_ECHOLNPGM("E step ", es, "/", fr_mm_m);
1029 1029
 
1030 1030
     current_position.e += es;
1031 1031
     line_to_current_position(MMM_TO_MMS(fr_mm_m));

+ 9
- 9
Marlin/src/feature/pause.cpp Целия файл

@@ -132,7 +132,7 @@ fil_change_settings_t fc_settings[EXTRUDERS];
132 132
  */
133 133
 static bool ensure_safe_temperature(const bool wait=true, const PauseMode mode=PAUSE_MODE_SAME) {
134 134
   DEBUG_SECTION(est, "ensure_safe_temperature", true);
135
-  DEBUG_ECHOLNPAIR("... wait:", wait, " mode:", mode);
135
+  DEBUG_ECHOLNPGM("... wait:", wait, " mode:", mode);
136 136
 
137 137
   #if ENABLED(PREVENT_COLD_EXTRUSION)
138 138
     if (!DEBUGGING(DRYRUN) && thermalManager.targetTooColdToExtrude(active_extruder))
@@ -178,7 +178,7 @@ bool load_filament(const_float_t slow_load_length/*=0*/, const_float_t fast_load
178 178
                    DXC_ARGS
179 179
 ) {
180 180
   DEBUG_SECTION(lf, "load_filament", true);
181
-  DEBUG_ECHOLNPAIR("... slowlen:", slow_load_length, " fastlen:", fast_load_length, " purgelen:", purge_length, " maxbeep:", max_beep_count, " showlcd:", show_lcd, " pauseforuser:", pause_for_user, " pausemode:", mode DXC_SAY);
181
+  DEBUG_ECHOLNPGM("... slowlen:", slow_load_length, " fastlen:", fast_load_length, " purgelen:", purge_length, " maxbeep:", max_beep_count, " showlcd:", show_lcd, " pauseforuser:", pause_for_user, " pausemode:", mode DXC_SAY);
182 182
 
183 183
   if (!ensure_safe_temperature(false, mode)) {
184 184
     if (show_lcd) ui.pause_show_message(PAUSE_MESSAGE_STATUS, mode);
@@ -315,7 +315,7 @@ bool unload_filament(const_float_t unload_length, const bool show_lcd/*=false*/,
315 315
                      #endif
316 316
 ) {
317 317
   DEBUG_SECTION(uf, "unload_filament", true);
318
-  DEBUG_ECHOLNPAIR("... unloadlen:", unload_length, " showlcd:", show_lcd, " mode:", mode
318
+  DEBUG_ECHOLNPGM("... unloadlen:", unload_length, " showlcd:", show_lcd, " mode:", mode
319 319
     #if BOTH(FILAMENT_UNLOAD_ALL_EXTRUDERS, MIXING_EXTRUDER)
320 320
       , " mixmult:", mix_multiplier
321 321
     #endif
@@ -379,7 +379,7 @@ uint8_t did_pause_print = 0;
379 379
 
380 380
 bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool show_lcd/*=false*/, const_float_t unload_length/*=0*/ DXC_ARGS) {
381 381
   DEBUG_SECTION(pp, "pause_print", true);
382
-  DEBUG_ECHOLNPAIR("... park.x:", park_point.x, " y:", park_point.y, " z:", park_point.z, " unloadlen:", unload_length, " showlcd:", show_lcd DXC_SAY);
382
+  DEBUG_ECHOLNPGM("... park.x:", park_point.x, " y:", park_point.y, " z:", park_point.z, " unloadlen:", unload_length, " showlcd:", show_lcd DXC_SAY);
383 383
 
384 384
   UNUSED(show_lcd);
385 385
 
@@ -430,7 +430,7 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool
430 430
 
431 431
   // Initial retract before move to filament change position
432 432
   if (retract && thermalManager.hotEnoughToExtrude(active_extruder)) {
433
-    DEBUG_ECHOLNPAIR("... retract:", retract);
433
+    DEBUG_ECHOLNPGM("... retract:", retract);
434 434
     unscaled_e_move(retract, PAUSE_PARK_RETRACT_FEEDRATE);
435 435
   }
436 436
 
@@ -472,7 +472,7 @@ bool pause_print(const_float_t retract, const xyz_pos_t &park_point, const bool
472 472
 
473 473
 void show_continue_prompt(const bool is_reload) {
474 474
   DEBUG_SECTION(scp, "pause_print", true);
475
-  DEBUG_ECHOLNPAIR("... is_reload:", is_reload);
475
+  DEBUG_ECHOLNPGM("... is_reload:", is_reload);
476 476
 
477 477
   ui.pause_show_message(is_reload ? PAUSE_MESSAGE_INSERT : PAUSE_MESSAGE_WAITING);
478 478
   SERIAL_ECHO_START();
@@ -481,7 +481,7 @@ void show_continue_prompt(const bool is_reload) {
481 481
 
482 482
 void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep_count/*=0*/ DXC_ARGS) {
483 483
   DEBUG_SECTION(wfc, "wait_for_confirmation", true);
484
-  DEBUG_ECHOLNPAIR("... is_reload:", is_reload, " maxbeep:", max_beep_count DXC_SAY);
484
+  DEBUG_ECHOLNPGM("... is_reload:", is_reload, " maxbeep:", max_beep_count DXC_SAY);
485 485
 
486 486
   bool nozzle_timed_out = false;
487 487
 
@@ -584,10 +584,10 @@ void wait_for_confirmation(const bool is_reload/*=false*/, const int8_t max_beep
584 584
  */
585 585
 void resume_print(const_float_t slow_load_length/*=0*/, const_float_t fast_load_length/*=0*/, const_float_t purge_length/*=ADVANCED_PAUSE_PURGE_LENGTH*/, const int8_t max_beep_count/*=0*/, const celsius_t targetTemp/*=0*/ DXC_ARGS) {
586 586
   DEBUG_SECTION(rp, "resume_print", true);
587
-  DEBUG_ECHOLNPAIR("... slowlen:", slow_load_length, " fastlen:", fast_load_length, " purgelen:", purge_length, " maxbeep:", max_beep_count, " targetTemp:", targetTemp DXC_SAY);
587
+  DEBUG_ECHOLNPGM("... slowlen:", slow_load_length, " fastlen:", fast_load_length, " purgelen:", purge_length, " maxbeep:", max_beep_count, " targetTemp:", targetTemp DXC_SAY);
588 588
 
589 589
   /*
590
-  SERIAL_ECHOLNPAIR(
590
+  SERIAL_ECHOLNPGM(
591 591
     "start of resume_print()\ndual_x_carriage_mode:", dual_x_carriage_mode,
592 592
     "\nextruder_duplication_enabled:", extruder_duplication_enabled,
593 593
     "\nactive_extruder:", active_extruder,

+ 17
- 17
Marlin/src/feature/powerloss.cpp Целия файл

@@ -577,7 +577,7 @@ void PrintJobRecovery::resume() {
577 577
 
578 578
   void PrintJobRecovery::debug(PGM_P const prefix) {
579 579
     DEBUG_ECHOPGM_P(prefix);
580
-    DEBUG_ECHOLNPAIR(" Job Recovery Info...\nvalid_head:", info.valid_head, " valid_foot:", info.valid_foot);
580
+    DEBUG_ECHOLNPGM(" Job Recovery Info...\nvalid_head:", info.valid_head, " valid_foot:", info.valid_foot);
581 581
     if (info.valid_head) {
582 582
       if (info.valid_head == info.valid_foot) {
583 583
         DEBUG_ECHOPGM("current_position: ");
@@ -587,14 +587,14 @@ void PrintJobRecovery::resume() {
587 587
         }
588 588
         DEBUG_EOL();
589 589
 
590
-        DEBUG_ECHOLNPAIR("feedrate: ", info.feedrate);
590
+        DEBUG_ECHOLNPGM("feedrate: ", info.feedrate);
591 591
 
592
-        DEBUG_ECHOLNPAIR("zraise: ", info.zraise, " ", info.flag.raised ? "(before)" : "");
592
+        DEBUG_ECHOLNPGM("zraise: ", info.zraise, " ", info.flag.raised ? "(before)" : "");
593 593
 
594 594
         #if ENABLED(GCODE_REPEAT_MARKERS)
595
-          DEBUG_ECHOLNPAIR("repeat index: ", info.stored_repeat.index);
595
+          DEBUG_ECHOLNPGM("repeat index: ", info.stored_repeat.index);
596 596
           LOOP_L_N(i, info.stored_repeat.index)
597
-            DEBUG_ECHOLNPAIR("..... sdpos: ", info.stored_repeat.marker.sdpos, " count: ", info.stored_repeat.marker.counter);
597
+            DEBUG_ECHOLNPGM("..... sdpos: ", info.stored_repeat.marker.sdpos, " count: ", info.stored_repeat.marker.counter);
598 598
         #endif
599 599
 
600 600
         #if HAS_HOME_OFFSET
@@ -616,12 +616,12 @@ void PrintJobRecovery::resume() {
616 616
         #endif
617 617
 
618 618
         #if HAS_MULTI_EXTRUDER
619
-          DEBUG_ECHOLNPAIR("active_extruder: ", info.active_extruder);
619
+          DEBUG_ECHOLNPGM("active_extruder: ", info.active_extruder);
620 620
         #endif
621 621
 
622 622
         #if DISABLED(NO_VOLUMETRICS)
623 623
           DEBUG_ECHOPGM("filament_size:");
624
-          LOOP_L_N(i, EXTRUDERS) DEBUG_ECHOLNPAIR(" ", info.filament_size[i]);
624
+          LOOP_L_N(i, EXTRUDERS) DEBUG_ECHOLNPGM(" ", info.filament_size[i]);
625 625
           DEBUG_EOL();
626 626
         #endif
627 627
 
@@ -635,7 +635,7 @@ void PrintJobRecovery::resume() {
635 635
         #endif
636 636
 
637 637
         #if HAS_HEATED_BED
638
-          DEBUG_ECHOLNPAIR("target_temperature_bed: ", info.target_temperature_bed);
638
+          DEBUG_ECHOLNPGM("target_temperature_bed: ", info.target_temperature_bed);
639 639
         #endif
640 640
 
641 641
         #if HAS_FAN
@@ -648,7 +648,7 @@ void PrintJobRecovery::resume() {
648 648
         #endif
649 649
 
650 650
         #if HAS_LEVELING
651
-          DEBUG_ECHOLNPAIR("leveling: ", info.flag.leveling ? "ON" : "OFF", "  fade: ", info.fade);
651
+          DEBUG_ECHOLNPGM("leveling: ", info.flag.leveling ? "ON" : "OFF", "  fade: ", info.fade);
652 652
         #endif
653 653
 
654 654
         #if ENABLED(FWRETRACT)
@@ -658,17 +658,17 @@ void PrintJobRecovery::resume() {
658 658
             if (e < EXTRUDERS - 1) DEBUG_CHAR(',');
659 659
           }
660 660
           DEBUG_EOL();
661
-          DEBUG_ECHOLNPAIR("retract_hop: ", info.retract_hop);
661
+          DEBUG_ECHOLNPGM("retract_hop: ", info.retract_hop);
662 662
         #endif
663 663
 
664 664
         // Mixing extruder and gradient
665 665
         #if BOTH(MIXING_EXTRUDER, GRADIENT_MIX)
666
-          DEBUG_ECHOLNPAIR("gradient: ", info.gradient.enabled ? "ON" : "OFF");
666
+          DEBUG_ECHOLNPGM("gradient: ", info.gradient.enabled ? "ON" : "OFF");
667 667
         #endif
668 668
 
669
-        DEBUG_ECHOLNPAIR("sd_filename: ", info.sd_filename);
670
-        DEBUG_ECHOLNPAIR("sdpos: ", info.sdpos);
671
-        DEBUG_ECHOLNPAIR("print_job_elapsed: ", info.print_job_elapsed);
669
+        DEBUG_ECHOLNPGM("sd_filename: ", info.sd_filename);
670
+        DEBUG_ECHOLNPGM("sdpos: ", info.sdpos);
671
+        DEBUG_ECHOLNPGM("print_job_elapsed: ", info.print_job_elapsed);
672 672
 
673 673
         DEBUG_ECHOPGM("axis_relative:");
674 674
         if (TEST(info.axis_relative, REL_X)) DEBUG_ECHOPGM(" REL_X");
@@ -679,9 +679,9 @@ void PrintJobRecovery::resume() {
679 679
         if (TEST(info.axis_relative, E_MODE_REL)) DEBUG_ECHOPGM(" E_MODE_REL");
680 680
         DEBUG_EOL();
681 681
 
682
-        DEBUG_ECHOLNPAIR("flag.dryrun: ", AS_DIGIT(info.flag.dryrun));
683
-        DEBUG_ECHOLNPAIR("flag.allow_cold_extrusion: ", AS_DIGIT(info.flag.allow_cold_extrusion));
684
-        DEBUG_ECHOLNPAIR("flag.volumetric_enabled: ", AS_DIGIT(info.flag.volumetric_enabled));
682
+        DEBUG_ECHOLNPGM("flag.dryrun: ", AS_DIGIT(info.flag.dryrun));
683
+        DEBUG_ECHOLNPGM("flag.allow_cold_extrusion: ", AS_DIGIT(info.flag.allow_cold_extrusion));
684
+        DEBUG_ECHOLNPGM("flag.volumetric_enabled: ", AS_DIGIT(info.flag.volumetric_enabled));
685 685
       }
686 686
       else
687 687
         DEBUG_ECHOLNPGM("INVALID DATA");

+ 2
- 2
Marlin/src/feature/probe_temp_comp.cpp Целия файл

@@ -75,7 +75,7 @@ void ProbeTempComp::print_offsets() {
75 75
         #endif
76 76
         PSTR("Probe")
77 77
       );
78
-      SERIAL_ECHOLNPAIR(
78
+      SERIAL_ECHOLNPGM(
79 79
         " temp: ", temp,
80 80
         "C; Offset: ", i < 0 ? 0.0f : sensor_z_offsets[s][i], " um"
81 81
       );
@@ -117,7 +117,7 @@ bool ProbeTempComp::finish_calibration(const TempSensorID tsi) {
117 117
   // Extrapolate
118 118
   float k, d;
119 119
   if (calib_idx < measurements) {
120
-    SERIAL_ECHOLNPAIR("Got ", calib_idx, " measurements. ");
120
+    SERIAL_ECHOLNPGM("Got ", calib_idx, " measurements. ");
121 121
     if (linear_regression(tsi, k, d)) {
122 122
       SERIAL_ECHOPGM("Applying linear extrapolation");
123 123
       calib_idx--;

+ 4
- 4
Marlin/src/feature/repeat.cpp Целия файл

@@ -43,7 +43,7 @@ void Repeat::add_marker(const uint32_t sdpos, const uint16_t count) {
43 43
     marker[index].sdpos = sdpos;
44 44
     marker[index].counter = count ?: -1;
45 45
     index++;
46
-    DEBUG_ECHOLNPAIR("Add Marker ", index, " at ", sdpos, " (", count, ")");
46
+    DEBUG_ECHOLNPGM("Add Marker ", index, " at ", sdpos, " (", count, ")");
47 47
   }
48 48
 }
49 49
 
@@ -53,14 +53,14 @@ void Repeat::loop() {
53 53
   else {
54 54
     const uint8_t ind = index - 1;      // Active marker's index
55 55
     if (!marker[ind].counter) {         // Did its counter run out?
56
-      DEBUG_ECHOLNPAIR("Pass Marker ", index);
56
+      DEBUG_ECHOLNPGM("Pass Marker ", index);
57 57
       index--;                          //  Carry on. Previous marker on the next 'M808'.
58 58
     }
59 59
     else {
60 60
       card.setIndex(marker[ind].sdpos); // Loop back to the marker.
61 61
       if (marker[ind].counter > 0)      // Ignore a negative (or zero) counter.
62 62
         --marker[ind].counter;          // Decrement the counter. If zero this 'M808' will be skipped next time.
63
-      DEBUG_ECHOLNPAIR("Goto Marker ", index, " at ", marker[ind].sdpos, " (", marker[ind].counter, ")");
63
+      DEBUG_ECHOLNPGM("Goto Marker ", index, " at ", marker[ind].sdpos, " (", marker[ind].counter, ")");
64 64
     }
65 65
   }
66 66
 }
@@ -69,7 +69,7 @@ void Repeat::cancel() { LOOP_L_N(i, index) marker[i].counter = 0; }
69 69
 
70 70
 void Repeat::early_parse_M808(char * const cmd) {
71 71
   if (is_command_M808(cmd)) {
72
-    DEBUG_ECHOLNPAIR("Parsing \"", cmd, "\"");
72
+    DEBUG_ECHOLNPGM("Parsing \"", cmd, "\"");
73 73
     parser.parse(cmd);
74 74
     if (parser.seen('L'))
75 75
       add_marker(card.getIndex(), parser.value_ushort());

+ 1
- 1
Marlin/src/feature/runout.cpp Целия файл

@@ -132,7 +132,7 @@ void event_filament_runout(const uint8_t extruder) {
132 132
       char script[strlen(FILAMENT_RUNOUT_SCRIPT) + 1];
133 133
       sprintf_P(script, PSTR(FILAMENT_RUNOUT_SCRIPT), tool);
134 134
       #if ENABLED(FILAMENT_RUNOUT_SENSOR_DEBUG)
135
-        SERIAL_ECHOLNPAIR("Runout Command: ", script);
135
+        SERIAL_ECHOLNPGM("Runout Command: ", script);
136 136
       #endif
137 137
       queue.inject(script);
138 138
     #else

+ 3
- 3
Marlin/src/feature/runout.h Целия файл

@@ -145,7 +145,7 @@ class TFilamentMonitor : public FilamentMonitorBase {
145 145
           if (runout_flags) {
146 146
             SERIAL_ECHOPGM("Runout Sensors: ");
147 147
             LOOP_L_N(i, 8) SERIAL_ECHO('0' + TEST(runout_flags, i));
148
-            SERIAL_ECHOPAIR(" -> ", extruder);
148
+            SERIAL_ECHOPGM(" -> ", extruder);
149 149
             if (ran_out) SERIAL_ECHOPGM(" RUN OUT");
150 150
             SERIAL_EOL();
151 151
           }
@@ -317,7 +317,7 @@ class FilamentSensorBase {
317 317
             static uint8_t was_out; // = 0
318 318
             if (out != TEST(was_out, s)) {
319 319
               TBI(was_out, s);
320
-              SERIAL_ECHOLNPAIR_P(PSTR("Filament Sensor "), '0' + s, out ? PSTR(" OUT") : PSTR(" IN"));
320
+              SERIAL_ECHOLNPGM_P(PSTR("Filament Sensor "), '0' + s, out ? PSTR(" OUT") : PSTR(" IN"));
321 321
             }
322 322
           #endif
323 323
         }
@@ -352,7 +352,7 @@ class FilamentSensorBase {
352 352
           if (ELAPSED(ms, t)) {
353 353
             t = millis() + 1000UL;
354 354
             LOOP_L_N(i, NUM_RUNOUT_SENSORS)
355
-              SERIAL_ECHOPAIR_P(i ? PSTR(", ") : PSTR("Remaining mm: "), runout_mm_countdown[i]);
355
+              SERIAL_ECHOPGM_P(i ? PSTR(", ") : PSTR("Remaining mm: "), runout_mm_countdown[i]);
356 356
             SERIAL_EOL();
357 357
           }
358 358
         #endif

+ 2
- 2
Marlin/src/feature/tmc_util.cpp Целия файл

@@ -226,7 +226,7 @@
226 226
     SERIAL_ECHO(timestamp);
227 227
     SERIAL_ECHOPGM(": ");
228 228
     st.printLabel();
229
-    SERIAL_ECHOLNPAIR(" driver overtemperature warning! (", st.getMilliamps(), "mA)");
229
+    SERIAL_ECHOLNPGM(" driver overtemperature warning! (", st.getMilliamps(), "mA)");
230 230
   }
231 231
 
232 232
   template<typename TMC>
@@ -271,7 +271,7 @@
271 271
           st.rms_current(I_rms);
272 272
           #if ENABLED(REPORT_CURRENT_CHANGE)
273 273
             st.printLabel();
274
-            SERIAL_ECHOLNPAIR(" current decreased to ", I_rms);
274
+            SERIAL_ECHOLNPGM(" current decreased to ", I_rms);
275 275
           #endif
276 276
         }
277 277
       }

+ 2
- 2
Marlin/src/feature/tmc_util.h Целия файл

@@ -300,7 +300,7 @@ class TMCMarlin<TMC2660Stepper, AXIS_LETTER, DRIVER_ID, AXIS_ID> : public TMC266
300 300
 template<typename TMC>
301 301
 void tmc_print_current(TMC &st) {
302 302
   st.printLabel();
303
-  SERIAL_ECHOLNPAIR(" driver current: ", st.getMilliamps());
303
+  SERIAL_ECHOLNPGM(" driver current: ", st.getMilliamps());
304 304
 }
305 305
 
306 306
 #if ENABLED(MONITOR_DRIVER_STATUS)
@@ -322,7 +322,7 @@ void tmc_print_current(TMC &st) {
322 322
   template<typename TMC>
323 323
   void tmc_print_pwmthrs(TMC &st) {
324 324
     st.printLabel();
325
-    SERIAL_ECHOLNPAIR(" stealthChop max speed: ", st.get_pwm_thrs());
325
+    SERIAL_ECHOLNPGM(" stealthChop max speed: ", st.get_pwm_thrs());
326 326
   }
327 327
 #endif
328 328
 #if USE_SENSORLESS

+ 1
- 1
Marlin/src/feature/twibus.cpp Целия файл

@@ -84,7 +84,7 @@ void TWIBus::send() {
84 84
 void TWIBus::echoprefix(uint8_t bytes, const char pref[], uint8_t adr) {
85 85
   SERIAL_ECHO_START();
86 86
   SERIAL_ECHOPGM_P(pref);
87
-  SERIAL_ECHOPAIR(": from:", adr, " bytes:", bytes, " data:");
87
+  SERIAL_ECHOPGM(": from:", adr, " bytes:", bytes, " data:");
88 88
 }
89 89
 
90 90
 // static

+ 1
- 1
Marlin/src/gcode/bedlevel/G26.cpp Целия файл

@@ -539,7 +539,7 @@ void GcodeSuite::G26() {
539 539
 
540 540
     if (bedtemp) {
541 541
       if (!WITHIN(bedtemp, 40, BED_MAX_TARGET)) {
542
-        SERIAL_ECHOLNPAIR("?Specified bed temperature not plausible (40-", BED_MAX_TARGET, "C).");
542
+        SERIAL_ECHOLNPGM("?Specified bed temperature not plausible (40-", BED_MAX_TARGET, "C).");
543 543
         return;
544 544
       }
545 545
       g26.bed_temp = bedtemp;

+ 7
- 7
Marlin/src/gcode/bedlevel/G35.cpp Целия файл

@@ -106,19 +106,19 @@ void GcodeSuite::G35() {
106 106
     const float z_probed_height = probe.probe_at_point(tramming_points[i], PROBE_PT_RAISE, 0, true);
107 107
 
108 108
     if (isnan(z_probed_height)) {
109
-      SERIAL_ECHOPAIR("G35 failed at point ", i + 1, " (");
109
+      SERIAL_ECHOPGM("G35 failed at point ", i + 1, " (");
110 110
       SERIAL_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
111 111
       SERIAL_CHAR(')');
112
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, tramming_points[i].x, SP_Y_STR, tramming_points[i].y);
112
+      SERIAL_ECHOLNPGM_P(SP_X_STR, tramming_points[i].x, SP_Y_STR, tramming_points[i].y);
113 113
       err_break = true;
114 114
       break;
115 115
     }
116 116
 
117 117
     if (DEBUGGING(LEVELING)) {
118
-      DEBUG_ECHOPAIR("Probing point ", i + 1, " (");
118
+      DEBUG_ECHOPGM("Probing point ", i + 1, " (");
119 119
       DEBUG_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
120 120
       DEBUG_CHAR(')');
121
-      DEBUG_ECHOLNPAIR_P(SP_X_STR, tramming_points[i].x, SP_Y_STR, tramming_points[i].y, SP_Z_STR, z_probed_height);
121
+      DEBUG_ECHOLNPGM_P(SP_X_STR, tramming_points[i].x, SP_Y_STR, tramming_points[i].y, SP_Z_STR, z_probed_height);
122 122
     }
123 123
 
124 124
     z_measured[i] = z_probed_height;
@@ -138,9 +138,9 @@ void GcodeSuite::G35() {
138 138
 
139 139
       SERIAL_ECHOPGM("Turn ");
140 140
       SERIAL_ECHOPGM_P((char *)pgm_read_ptr(&tramming_point_name[i]));
141
-      SERIAL_ECHOPAIR(" ", (screw_thread & 1) == (adjust > 0) ? "CCW" : "CW", " by ", ABS(full_turns), " turns");
142
-      if (minutes) SERIAL_ECHOPAIR(" and ", ABS(minutes), " minutes");
143
-      if (ENABLED(REPORT_TRAMMING_MM)) SERIAL_ECHOPAIR(" (", -diff, "mm)");
141
+      SERIAL_ECHOPGM(" ", (screw_thread & 1) == (adjust > 0) ? "CCW" : "CW", " by ", ABS(full_turns), " turns");
142
+      if (minutes) SERIAL_ECHOPGM(" and ", ABS(minutes), " minutes");
143
+      if (ENABLED(REPORT_TRAMMING_MM)) SERIAL_ECHOPGM(" (", -diff, "mm)");
144 144
       SERIAL_EOL();
145 145
     }
146 146
   }

+ 5
- 5
Marlin/src/gcode/bedlevel/M420.cpp Целия файл

@@ -76,9 +76,9 @@ void GcodeSuite::M420() {
76 76
         TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(x, y, Z_VALUES(x, y)));
77 77
       }
78 78
       SERIAL_ECHOPGM("Simulated " STRINGIFY(GRID_MAX_POINTS_X) "x" STRINGIFY(GRID_MAX_POINTS_Y) " mesh ");
79
-      SERIAL_ECHOPAIR(" (", x_min);
79
+      SERIAL_ECHOPGM(" (", x_min);
80 80
       SERIAL_CHAR(','); SERIAL_ECHO(y_min);
81
-      SERIAL_ECHOPAIR(")-(", x_max);
81
+      SERIAL_ECHOPGM(")-(", x_max);
82 82
       SERIAL_CHAR(','); SERIAL_ECHO(y_max);
83 83
       SERIAL_ECHOLNPGM(")");
84 84
     }
@@ -108,7 +108,7 @@ void GcodeSuite::M420() {
108 108
 
109 109
         if (!WITHIN(storage_slot, 0, a - 1)) {
110 110
           SERIAL_ECHOLNPGM("?Invalid storage slot.");
111
-          SERIAL_ECHOLNPAIR("?Use 0 to ", a - 1);
111
+          SERIAL_ECHOLNPGM("?Use 0 to ", a - 1);
112 112
           return;
113 113
         }
114 114
 
@@ -128,7 +128,7 @@ void GcodeSuite::M420() {
128 128
       ubl.display_map(parser.byteval('T'));
129 129
       SERIAL_ECHOPGM("Mesh is ");
130 130
       if (!ubl.mesh_is_valid()) SERIAL_ECHOPGM("in");
131
-      SERIAL_ECHOLNPAIR("valid\nStorage slot: ", ubl.storage_slot);
131
+      SERIAL_ECHOLNPGM("valid\nStorage slot: ", ubl.storage_slot);
132 132
     }
133 133
 
134 134
   #endif // AUTO_BED_LEVELING_UBL
@@ -246,7 +246,7 @@ void GcodeSuite::M420_report(const bool forReplay/*=true*/) {
246 246
   report_heading_etc(forReplay, PSTR(
247 247
     TERN(MESH_BED_LEVELING, "Mesh Bed Leveling", TERN(AUTO_BED_LEVELING_UBL, "Unified Bed Leveling", "Auto Bed Leveling"))
248 248
   ));
249
-  SERIAL_ECHOPAIR_P(
249
+  SERIAL_ECHOPGM_P(
250 250
     PSTR("  M420 S"), planner.leveling_active
251 251
     #if ENABLED(ENABLE_LEVELING_FADE_HEIGHT)
252 252
       , SP_Z_STR, LINEAR_UNIT(planner.z_fade_height)

+ 9
- 9
Marlin/src/gcode/bedlevel/abl/G29.cpp Целия файл

@@ -379,7 +379,7 @@ G29_TYPE GcodeSuite::G29() {
379 379
 
380 380
       if (!probe.good_bounds(abl.probe_position_lf, abl.probe_position_rb)) {
381 381
         if (DEBUGGING(LEVELING)) {
382
-          DEBUG_ECHOLNPAIR("G29 L", abl.probe_position_lf.x, " R", abl.probe_position_rb.x,
382
+          DEBUG_ECHOLNPGM("G29 L", abl.probe_position_lf.x, " R", abl.probe_position_rb.x,
383 383
                               " F", abl.probe_position_lf.y, " B", abl.probe_position_rb.y);
384 384
         }
385 385
         SERIAL_ECHOLNPGM("? (L,R,F,B) out of bounds.");
@@ -470,7 +470,7 @@ G29_TYPE GcodeSuite::G29() {
470 470
     if (abl.verbose_level || seenQ) {
471 471
       SERIAL_ECHOPGM("Manual G29 ");
472 472
       if (g29_in_progress)
473
-        SERIAL_ECHOLNPAIR("point ", _MIN(abl.abl_probe_index + 1, abl.abl_points), " of ", abl.abl_points);
473
+        SERIAL_ECHOLNPGM("point ", _MIN(abl.abl_probe_index + 1, abl.abl_points), " of ", abl.abl_points);
474 474
       else
475 475
         SERIAL_ECHOLNPGM("idle");
476 476
     }
@@ -513,7 +513,7 @@ G29_TYPE GcodeSuite::G29() {
513 513
         z_values[abl.meshCount.x][abl.meshCount.y] = newz;
514 514
         TERN_(EXTENSIBLE_UI, ExtUI::onMeshUpdate(abl.meshCount, newz));
515 515
 
516
-        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR_P(PSTR("Save X"), abl.meshCount.x, SP_Y_STR, abl.meshCount.y, SP_Z_STR, abl.measured_z + abl.Z_offset);
516
+        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM_P(PSTR("Save X"), abl.meshCount.x, SP_Y_STR, abl.meshCount.y, SP_Z_STR, abl.measured_z + abl.Z_offset);
517 517
 
518 518
       #endif
519 519
     }
@@ -635,7 +635,7 @@ G29_TYPE GcodeSuite::G29() {
635 635
           // Avoid probing outside the round or hexagonal area
636 636
           if (TERN0(IS_KINEMATIC, !probe.can_reach(abl.probePos))) continue;
637 637
 
638
-          if (abl.verbose_level) SERIAL_ECHOLNPAIR("Probing mesh point ", pt_index, "/", abl.abl_points, ".");
638
+          if (abl.verbose_level) SERIAL_ECHOLNPGM("Probing mesh point ", pt_index, "/", abl.abl_points, ".");
639 639
           TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), int(pt_index), int(abl.abl_points)));
640 640
 
641 641
           abl.measured_z = faux ? 0.001f * random(-100, 101) : probe.probe_at_point(abl.probePos, raise_after, abl.verbose_level);
@@ -680,7 +680,7 @@ G29_TYPE GcodeSuite::G29() {
680 680
       // Probe at 3 arbitrary points
681 681
 
682 682
       LOOP_L_N(i, 3) {
683
-        if (abl.verbose_level) SERIAL_ECHOLNPAIR("Probing point ", i + 1, "/3.");
683
+        if (abl.verbose_level) SERIAL_ECHOLNPGM("Probing point ", i + 1, "/3.");
684 684
         TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/3"), GET_TEXT(MSG_PROBING_POINT), int(i + 1)));
685 685
 
686 686
         // Retain the last probe position
@@ -842,7 +842,7 @@ G29_TYPE GcodeSuite::G29() {
842 842
           && NEAR(current_position.y, abl.probePos.y - probe.offset_xy.y)
843 843
         ) {
844 844
           const float simple_z = current_position.z - abl.measured_z;
845
-          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Probed Z", simple_z, "  Matrix Z", converted.z, "  Discrepancy ", simple_z - converted.z);
845
+          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Probed Z", simple_z, "  Matrix Z", converted.z, "  Discrepancy ", simple_z - converted.z);
846 846
           converted.z = simple_z;
847 847
         }
848 848
 
@@ -855,14 +855,14 @@ G29_TYPE GcodeSuite::G29() {
855 855
     #elif ENABLED(AUTO_BED_LEVELING_BILINEAR)
856 856
 
857 857
       if (!abl.dryrun) {
858
-        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("G29 uncorrected Z:", current_position.z);
858
+        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("G29 uncorrected Z:", current_position.z);
859 859
 
860 860
         // Unapply the offset because it is going to be immediately applied
861 861
         // and cause compensation movement in Z
862 862
         const float fade_scaling_factor = TERN(ENABLE_LEVELING_FADE_HEIGHT, planner.fade_scaling_factor_for_z(current_position.z), 1);
863 863
         current_position.z -= fade_scaling_factor * bilinear_z_offset(current_position);
864 864
 
865
-        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR(" corrected Z:", current_position.z);
865
+        if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM(" corrected Z:", current_position.z);
866 866
       }
867 867
 
868 868
     #endif // ABL_PLANAR
@@ -880,7 +880,7 @@ G29_TYPE GcodeSuite::G29() {
880 880
   TERN_(HAS_BED_PROBE, probe.move_z_after_probing());
881 881
 
882 882
   #ifdef Z_PROBE_END_SCRIPT
883
-    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
883
+    if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Z Probe End Script: ", Z_PROBE_END_SCRIPT);
884 884
     planner.synchronize();
885 885
     process_subcommands_now_P(PSTR(Z_PROBE_END_SCRIPT));
886 886
   #endif

+ 3
- 3
Marlin/src/gcode/bedlevel/mbl/G29.cpp Целия файл

@@ -173,7 +173,7 @@ void GcodeSuite::G29() {
173 173
       if (parser.seenval('I')) {
174 174
         ix = parser.value_int();
175 175
         if (!WITHIN(ix, 0, (GRID_MAX_POINTS_X) - 1)) {
176
-          SERIAL_ECHOLNPAIR("I out of range (0-", (GRID_MAX_POINTS_X) - 1, ")");
176
+          SERIAL_ECHOLNPGM("I out of range (0-", (GRID_MAX_POINTS_X) - 1, ")");
177 177
           return;
178 178
         }
179 179
       }
@@ -183,7 +183,7 @@ void GcodeSuite::G29() {
183 183
       if (parser.seenval('J')) {
184 184
         iy = parser.value_int();
185 185
         if (!WITHIN(iy, 0, (GRID_MAX_POINTS_Y) - 1)) {
186
-          SERIAL_ECHOLNPAIR("J out of range (0-", (GRID_MAX_POINTS_Y) - 1, ")");
186
+          SERIAL_ECHOLNPGM("J out of range (0-", (GRID_MAX_POINTS_Y) - 1, ")");
187 187
           return;
188 188
         }
189 189
       }
@@ -213,7 +213,7 @@ void GcodeSuite::G29() {
213 213
   } // switch(state)
214 214
 
215 215
   if (state == MeshNext) {
216
-    SERIAL_ECHOLNPAIR("MBL G29 point ", _MIN(mbl_probe_index, GRID_MAX_POINTS), " of ", GRID_MAX_POINTS);
216
+    SERIAL_ECHOLNPGM("MBL G29 point ", _MIN(mbl_probe_index, GRID_MAX_POINTS), " of ", GRID_MAX_POINTS);
217 217
     if (mbl_probe_index > 0) TERN_(HAS_STATUS_MESSAGE, ui.status_printf_P(0, PSTR(S_FMT " %i/%i"), GET_TEXT(MSG_PROBING_POINT), _MIN(mbl_probe_index, GRID_MAX_POINTS), int(GRID_MAX_POINTS)));
218 218
   }
219 219
 

+ 2
- 2
Marlin/src/gcode/calibrate/G28.cpp Целия файл

@@ -270,7 +270,7 @@ void GcodeSuite::G28() {
270 270
 
271 271
   #if HAS_HOMING_CURRENT
272 272
     auto debug_current = [](PGM_P const s, const int16_t a, const int16_t b) {
273
-      DEBUG_ECHOPGM_P(s); DEBUG_ECHOLNPAIR(" current: ", a, " -> ", b);
273
+      DEBUG_ECHOPGM_P(s); DEBUG_ECHOLNPGM(" current: ", a, " -> ", b);
274 274
     };
275 275
     #if HAS_CURRENT_HOME(X)
276 276
       const int16_t tmc_save_current_X = stepperX.getMilliamps();
@@ -371,7 +371,7 @@ void GcodeSuite::G28() {
371 371
 
372 372
     if (z_homing_height && (LINEAR_AXIS_GANG(doX, || doY, || TERN0(Z_SAFE_HOMING, doZ), || doI, || doJ, || doK))) {
373 373
       // Raise Z before homing any other axes and z is not already high enough (never lower z)
374
-      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("Raise Z (before homing) by ", z_homing_height);
374
+      if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("Raise Z (before homing) by ", z_homing_height);
375 375
       do_z_clearance(z_homing_height);
376 376
       TERN_(BLTOUCH, bltouch.init());
377 377
     }

+ 3
- 3
Marlin/src/gcode/calibrate/G33.cpp Целия файл

@@ -107,14 +107,14 @@ void print_signed_float(PGM_P const prefix, const_float_t f) {
107 107
  *  - Print the delta settings
108 108
  */
109 109
 static void print_calibration_settings(const bool end_stops, const bool tower_angles) {
110
-  SERIAL_ECHOPAIR(".Height:", delta_height);
110
+  SERIAL_ECHOPGM(".Height:", delta_height);
111 111
   if (end_stops) {
112 112
     print_signed_float(PSTR("Ex"), delta_endstop_adj.a);
113 113
     print_signed_float(PSTR("Ey"), delta_endstop_adj.b);
114 114
     print_signed_float(PSTR("Ez"), delta_endstop_adj.c);
115 115
   }
116 116
   if (end_stops && tower_angles) {
117
-    SERIAL_ECHOPAIR("  Radius:", delta_radius);
117
+    SERIAL_ECHOPGM("  Radius:", delta_radius);
118 118
     SERIAL_EOL();
119 119
     SERIAL_CHAR('.');
120 120
     SERIAL_ECHO_SP(13);
@@ -125,7 +125,7 @@ static void print_calibration_settings(const bool end_stops, const bool tower_an
125 125
     print_signed_float(PSTR("Tz"), delta_tower_angle_trim.c);
126 126
   }
127 127
   if ((!end_stops && tower_angles) || (end_stops && !tower_angles)) { // XOR
128
-    SERIAL_ECHOPAIR("  Radius:", delta_radius);
128
+    SERIAL_ECHOPGM("  Radius:", delta_radius);
129 129
   }
130 130
   SERIAL_EOL();
131 131
 }

+ 13
- 13
Marlin/src/gcode/calibrate/G34_M422.cpp Целия файл

@@ -201,7 +201,7 @@ void GcodeSuite::G34() {
201 201
         if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> probing all positions.");
202 202
 
203 203
         const int iter = iteration + 1;
204
-        SERIAL_ECHOLNPAIR("\nG34 Iteration: ", iter);
204
+        SERIAL_ECHOLNPGM("\nG34 Iteration: ", iter);
205 205
         #if HAS_STATUS_MESSAGE
206 206
           char str[iter_str_len + 2 + 1];
207 207
           sprintf_P(str, msg_iteration, iter);
@@ -221,7 +221,7 @@ void GcodeSuite::G34() {
221 221
           if ((iteration == 0 || i > 0) && z_probe > current_position.z) do_blocking_move_to_z(z_probe);
222 222
 
223 223
           if (DEBUGGING(LEVELING))
224
-            DEBUG_ECHOLNPAIR_P(PSTR("Probing X"), z_stepper_align.xy[iprobe].x, SP_Y_STR, z_stepper_align.xy[iprobe].y);
224
+            DEBUG_ECHOLNPGM_P(PSTR("Probing X"), z_stepper_align.xy[iprobe].x, SP_Y_STR, z_stepper_align.xy[iprobe].y);
225 225
 
226 226
           // Probe a Z height for each stepper.
227 227
           // Probing sanity check is disabled, as it would trigger even in normal cases because
@@ -238,7 +238,7 @@ void GcodeSuite::G34() {
238 238
           // the next iteration of probing. This allows adjustments to be made away from the bed.
239 239
           z_measured[iprobe] = z_probed_height + Z_CLEARANCE_BETWEEN_PROBES;
240 240
 
241
-          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", iprobe + 1, " measured position is ", z_measured[iprobe]);
241
+          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", iprobe + 1, " measured position is ", z_measured[iprobe]);
242 242
 
243 243
           // Remember the minimum measurement to calculate the correction later on
244 244
           z_measured_min = _MIN(z_measured_min, z_measured[iprobe]);
@@ -267,7 +267,7 @@ void GcodeSuite::G34() {
267 267
           linear_fit_data lfd;
268 268
           incremental_LSF_reset(&lfd);
269 269
           LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
270
-            SERIAL_ECHOLNPAIR("PROBEPT_", i, ": ", z_measured[i]);
270
+            SERIAL_ECHOLNPGM("PROBEPT_", i, ": ", z_measured[i]);
271 271
             incremental_LSF(&lfd, z_stepper_align.xy[i], z_measured[i]);
272 272
           }
273 273
           finish_incremental_LSF(&lfd);
@@ -278,7 +278,7 @@ void GcodeSuite::G34() {
278 278
             z_measured_min = _MIN(z_measured_min, z_measured[i]);
279 279
           }
280 280
 
281
-          SERIAL_ECHOLNPAIR(
281
+          SERIAL_ECHOLNPGM(
282 282
             LIST_N(DOUBLE(NUM_Z_STEPPER_DRIVERS),
283 283
               "Calculated Z1=", z_measured[0],
284 284
                         " Z2=", z_measured[1],
@@ -288,7 +288,7 @@ void GcodeSuite::G34() {
288 288
           );
289 289
         #endif
290 290
 
291
-        SERIAL_ECHOLNPAIR("\n"
291
+        SERIAL_ECHOLNPGM("\n"
292 292
           "Z2-Z1=", ABS(z_measured[1] - z_measured[0])
293 293
           #if TRIPLE_Z
294 294
             , " Z3-Z2=", ABS(z_measured[2] - z_measured[1])
@@ -372,8 +372,8 @@ void GcodeSuite::G34() {
372 372
 
373 373
             // Check for less accuracy compared to last move
374 374
             if (decreasing_accuracy(last_z_align_move[zstepper], z_align_abs)) {
375
-              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", zstepper + 1, " last_z_align_move = ", last_z_align_move[zstepper]);
376
-              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", zstepper + 1, " z_align_abs = ", z_align_abs);
375
+              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", zstepper + 1, " last_z_align_move = ", last_z_align_move[zstepper]);
376
+              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", zstepper + 1, " z_align_abs = ", z_align_abs);
377 377
               adjustment_reverse = !adjustment_reverse;
378 378
             }
379 379
 
@@ -385,7 +385,7 @@ void GcodeSuite::G34() {
385 385
           // Stop early if all measured points achieve accuracy target
386 386
           if (z_align_abs > z_auto_align_accuracy) success_break = false;
387 387
 
388
-          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", zstepper + 1, " corrected by ", z_align_move);
388
+          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", zstepper + 1, " corrected by ", z_align_move);
389 389
 
390 390
           // Lock all steppers except one
391 391
           stepper.set_all_z_lock(true, zstepper);
@@ -395,7 +395,7 @@ void GcodeSuite::G34() {
395 395
             // Will match reversed Z steppers on dual steppers. Triple will need more work to map.
396 396
             if (adjustment_reverse) {
397 397
               z_align_move = -z_align_move;
398
-              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("> Z", zstepper + 1, " correction reversed to ", z_align_move);
398
+              if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("> Z", zstepper + 1, " correction reversed to ", z_align_move);
399 399
             }
400 400
           #endif
401 401
 
@@ -421,7 +421,7 @@ void GcodeSuite::G34() {
421 421
       if (err_break)
422 422
         SERIAL_ECHOLNPGM("G34 aborted.");
423 423
       else {
424
-        SERIAL_ECHOLNPAIR("Did ", iteration + (iteration != z_auto_align_iterations), " of ", z_auto_align_iterations);
424
+        SERIAL_ECHOLNPGM("Did ", iteration + (iteration != z_auto_align_iterations), " of ", z_auto_align_iterations);
425 425
         SERIAL_ECHOLNPAIR_F("Accuracy: ", z_maxdiff);
426 426
       }
427 427
 
@@ -541,7 +541,7 @@ void GcodeSuite::M422_report(const bool forReplay/*=true*/) {
541 541
   report_heading(forReplay, PSTR(STR_Z_AUTO_ALIGN));
542 542
   LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
543 543
     report_echo_start(forReplay);
544
-    SERIAL_ECHOLNPAIR_P(
544
+    SERIAL_ECHOLNPGM_P(
545 545
       PSTR("  M422 S"), i + 1,
546 546
       SP_X_STR, z_stepper_align.xy[i].x,
547 547
       SP_Y_STR, z_stepper_align.xy[i].y
@@ -550,7 +550,7 @@ void GcodeSuite::M422_report(const bool forReplay/*=true*/) {
550 550
   #if ENABLED(Z_STEPPER_ALIGN_KNOWN_STEPPER_POSITIONS)
551 551
     LOOP_L_N(i, NUM_Z_STEPPER_DRIVERS) {
552 552
       report_echo_start(forReplay);
553
-      SERIAL_ECHOLNPAIR_P(
553
+      SERIAL_ECHOLNPGM_P(
554 554
         PSTR("  M422 W"), i + 1,
555 555
         SP_X_STR, z_stepper_align.stepper_xy[i].x,
556 556
         SP_Y_STR, z_stepper_align.stepper_xy[i].y

+ 37
- 37
Marlin/src/gcode/calibrate/G425.cpp Целия файл

@@ -354,44 +354,44 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
354 354
   inline void report_measured_faces(const measurements_t &m) {
355 355
     SERIAL_ECHOLNPGM("Sides:");
356 356
     #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z)
357
-      SERIAL_ECHOLNPAIR("  Top: ", m.obj_side[TOP]);
357
+      SERIAL_ECHOLNPGM("  Top: ", m.obj_side[TOP]);
358 358
     #endif
359 359
     #if ENABLED(CALIBRATION_MEASURE_LEFT)
360
-      SERIAL_ECHOLNPAIR("  Left: ", m.obj_side[LEFT]);
360
+      SERIAL_ECHOLNPGM("  Left: ", m.obj_side[LEFT]);
361 361
     #endif
362 362
     #if ENABLED(CALIBRATION_MEASURE_RIGHT)
363
-      SERIAL_ECHOLNPAIR("  Right: ", m.obj_side[RIGHT]);
363
+      SERIAL_ECHOLNPGM("  Right: ", m.obj_side[RIGHT]);
364 364
     #endif
365 365
     #if HAS_Y_AXIS
366 366
       #if ENABLED(CALIBRATION_MEASURE_FRONT)
367
-        SERIAL_ECHOLNPAIR("  Front: ", m.obj_side[FRONT]);
367
+        SERIAL_ECHOLNPGM("  Front: ", m.obj_side[FRONT]);
368 368
       #endif
369 369
       #if ENABLED(CALIBRATION_MEASURE_BACK)
370
-        SERIAL_ECHOLNPAIR("  Back: ", m.obj_side[BACK]);
370
+        SERIAL_ECHOLNPGM("  Back: ", m.obj_side[BACK]);
371 371
       #endif
372 372
     #endif
373 373
     #if LINEAR_AXES >= 4
374 374
       #if ENABLED(CALIBRATION_MEASURE_IMIN)
375
-        SERIAL_ECHOLNPAIR("  " STR_I_MIN ": ", m.obj_side[IMINIMUM]);
375
+        SERIAL_ECHOLNPGM("  " STR_I_MIN ": ", m.obj_side[IMINIMUM]);
376 376
       #endif
377 377
       #if ENABLED(CALIBRATION_MEASURE_IMAX)
378
-        SERIAL_ECHOLNPAIR("  " STR_I_MAX ": ", m.obj_side[IMAXIMUM]);
378
+        SERIAL_ECHOLNPGM("  " STR_I_MAX ": ", m.obj_side[IMAXIMUM]);
379 379
       #endif
380 380
     #endif
381 381
     #if LINEAR_AXES >= 5
382 382
       #if ENABLED(CALIBRATION_MEASURE_JMIN)
383
-        SERIAL_ECHOLNPAIR("  " STR_J_MIN ": ", m.obj_side[JMINIMUM]);
383
+        SERIAL_ECHOLNPGM("  " STR_J_MIN ": ", m.obj_side[JMINIMUM]);
384 384
       #endif
385 385
       #if ENABLED(CALIBRATION_MEASURE_JMAX)
386
-        SERIAL_ECHOLNPAIR("  " STR_J_MAX ": ", m.obj_side[JMAXIMUM]);
386
+        SERIAL_ECHOLNPGM("  " STR_J_MAX ": ", m.obj_side[JMAXIMUM]);
387 387
       #endif
388 388
     #endif
389 389
     #if LINEAR_AXES >= 6
390 390
       #if ENABLED(CALIBRATION_MEASURE_KMIN)
391
-        SERIAL_ECHOLNPAIR("  " STR_K_MIN ": ", m.obj_side[KMINIMUM]);
391
+        SERIAL_ECHOLNPGM("  " STR_K_MIN ": ", m.obj_side[KMINIMUM]);
392 392
       #endif
393 393
       #if ENABLED(CALIBRATION_MEASURE_KMAX)
394
-        SERIAL_ECHOLNPAIR("  " STR_K_MAX ": ", m.obj_side[KMAXIMUM]);
394
+        SERIAL_ECHOLNPGM("  " STR_K_MAX ": ", m.obj_side[KMAXIMUM]);
395 395
       #endif
396 396
     #endif
397 397
     SERIAL_EOL();
@@ -400,20 +400,20 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
400 400
   inline void report_measured_center(const measurements_t &m) {
401 401
     SERIAL_ECHOLNPGM("Center:");
402 402
     #if HAS_X_CENTER
403
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, m.obj_center.x);
403
+      SERIAL_ECHOLNPGM_P(SP_X_STR, m.obj_center.x);
404 404
     #endif
405 405
     #if HAS_Y_CENTER
406
-      SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.obj_center.y);
406
+      SERIAL_ECHOLNPGM_P(SP_Y_STR, m.obj_center.y);
407 407
     #endif
408
-    SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.obj_center.z);
408
+    SERIAL_ECHOLNPGM_P(SP_Z_STR, m.obj_center.z);
409 409
     #if HAS_I_CENTER
410
-      SERIAL_ECHOLNPAIR_P(SP_I_STR, m.obj_center.i);
410
+      SERIAL_ECHOLNPGM_P(SP_I_STR, m.obj_center.i);
411 411
     #endif
412 412
     #if HAS_J_CENTER
413
-      SERIAL_ECHOLNPAIR_P(SP_J_STR, m.obj_center.j);
413
+      SERIAL_ECHOLNPGM_P(SP_J_STR, m.obj_center.j);
414 414
     #endif
415 415
     #if HAS_K_CENTER
416
-      SERIAL_ECHOLNPAIR_P(SP_K_STR, m.obj_center.k);
416
+      SERIAL_ECHOLNPGM_P(SP_K_STR, m.obj_center.k);
417 417
     #endif
418 418
     SERIAL_EOL();
419 419
   }
@@ -422,45 +422,45 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
422 422
     SERIAL_ECHOLNPGM("Backlash:");
423 423
     #if AXIS_CAN_CALIBRATE(X)
424 424
       #if ENABLED(CALIBRATION_MEASURE_LEFT)
425
-        SERIAL_ECHOLNPAIR("  Left: ", m.backlash[LEFT]);
425
+        SERIAL_ECHOLNPGM("  Left: ", m.backlash[LEFT]);
426 426
       #endif
427 427
       #if ENABLED(CALIBRATION_MEASURE_RIGHT)
428
-        SERIAL_ECHOLNPAIR("  Right: ", m.backlash[RIGHT]);
428
+        SERIAL_ECHOLNPGM("  Right: ", m.backlash[RIGHT]);
429 429
       #endif
430 430
     #endif
431 431
     #if HAS_Y_AXIS && AXIS_CAN_CALIBRATE(Y)
432 432
       #if ENABLED(CALIBRATION_MEASURE_FRONT)
433
-        SERIAL_ECHOLNPAIR("  Front: ", m.backlash[FRONT]);
433
+        SERIAL_ECHOLNPGM("  Front: ", m.backlash[FRONT]);
434 434
       #endif
435 435
       #if ENABLED(CALIBRATION_MEASURE_BACK)
436
-        SERIAL_ECHOLNPAIR("  Back: ", m.backlash[BACK]);
436
+        SERIAL_ECHOLNPGM("  Back: ", m.backlash[BACK]);
437 437
       #endif
438 438
     #endif
439 439
     #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z)
440
-      SERIAL_ECHOLNPAIR("  Top: ", m.backlash[TOP]);
440
+      SERIAL_ECHOLNPGM("  Top: ", m.backlash[TOP]);
441 441
     #endif
442 442
     #if LINEAR_AXES >= 4 && AXIS_CAN_CALIBRATE(I)
443 443
       #if ENABLED(CALIBRATION_MEASURE_IMIN)
444
-        SERIAL_ECHOLNPAIR("  " STR_I_MIN ": ", m.backlash[IMINIMUM]);
444
+        SERIAL_ECHOLNPGM("  " STR_I_MIN ": ", m.backlash[IMINIMUM]);
445 445
       #endif
446 446
       #if ENABLED(CALIBRATION_MEASURE_IMAX)
447
-        SERIAL_ECHOLNPAIR("  " STR_I_MAX ": ", m.backlash[IMAXIMUM]);
447
+        SERIAL_ECHOLNPGM("  " STR_I_MAX ": ", m.backlash[IMAXIMUM]);
448 448
       #endif
449 449
     #endif
450 450
     #if LINEAR_AXES >= 5 && AXIS_CAN_CALIBRATE(J)
451 451
       #if ENABLED(CALIBRATION_MEASURE_JMIN)
452
-        SERIAL_ECHOLNPAIR("  " STR_J_MIN ": ", m.backlash[JMINIMUM]);
452
+        SERIAL_ECHOLNPGM("  " STR_J_MIN ": ", m.backlash[JMINIMUM]);
453 453
       #endif
454 454
       #if ENABLED(CALIBRATION_MEASURE_JMAX)
455
-        SERIAL_ECHOLNPAIR("  " STR_J_MAX ": ", m.backlash[JMAXIMUM]);
455
+        SERIAL_ECHOLNPGM("  " STR_J_MAX ": ", m.backlash[JMAXIMUM]);
456 456
       #endif
457 457
     #endif
458 458
     #if LINEAR_AXES >= 6 && AXIS_CAN_CALIBRATE(K)
459 459
       #if ENABLED(CALIBRATION_MEASURE_KMIN)
460
-        SERIAL_ECHOLNPAIR("  " STR_K_MIN ": ", m.backlash[KMINIMUM]);
460
+        SERIAL_ECHOLNPGM("  " STR_K_MIN ": ", m.backlash[KMINIMUM]);
461 461
       #endif
462 462
       #if ENABLED(CALIBRATION_MEASURE_KMAX)
463
-        SERIAL_ECHOLNPAIR("  " STR_K_MAX ": ", m.backlash[KMAXIMUM]);
463
+        SERIAL_ECHOLNPGM("  " STR_K_MAX ": ", m.backlash[KMAXIMUM]);
464 464
       #endif
465 465
     #endif
466 466
     SERIAL_EOL();
@@ -471,22 +471,22 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
471 471
     SERIAL_ECHO(active_extruder);
472 472
     SERIAL_ECHOLNPGM(" Positional Error:");
473 473
     #if HAS_X_CENTER && AXIS_CAN_CALIBRATE(X)
474
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, m.pos_error.x);
474
+      SERIAL_ECHOLNPGM_P(SP_X_STR, m.pos_error.x);
475 475
     #endif
476 476
     #if HAS_Y_CENTER && AXIS_CAN_CALIBRATE(Y)
477
-      SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.pos_error.y);
477
+      SERIAL_ECHOLNPGM_P(SP_Y_STR, m.pos_error.y);
478 478
     #endif
479 479
     #if HAS_Z_AXIS && AXIS_CAN_CALIBRATE(Z)
480
-      SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.pos_error.z);
480
+      SERIAL_ECHOLNPGM_P(SP_Z_STR, m.pos_error.z);
481 481
     #endif
482 482
     #if HAS_I_CENTER && AXIS_CAN_CALIBRATE(I)
483
-      SERIAL_ECHOLNPAIR_P(SP_I_STR, m.pos_error.i);
483
+      SERIAL_ECHOLNPGM_P(SP_I_STR, m.pos_error.i);
484 484
     #endif
485 485
     #if HAS_J_CENTER && AXIS_CAN_CALIBRATE(J)
486
-      SERIAL_ECHOLNPAIR_P(SP_J_STR, m.pos_error.j);
486
+      SERIAL_ECHOLNPGM_P(SP_J_STR, m.pos_error.j);
487 487
     #endif
488 488
     #if HAS_K_CENTER && AXIS_CAN_CALIBRATE(K)
489
-      SERIAL_ECHOLNPAIR_P(SP_Z_STR, m.pos_error.z);
489
+      SERIAL_ECHOLNPGM_P(SP_Z_STR, m.pos_error.z);
490 490
     #endif
491 491
     SERIAL_EOL();
492 492
   }
@@ -494,10 +494,10 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
494 494
   inline void report_measured_nozzle_dimensions(const measurements_t &m) {
495 495
     SERIAL_ECHOLNPGM("Nozzle Tip Outer Dimensions:");
496 496
     #if HAS_X_CENTER
497
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, m.nozzle_outer_dimension.x);
497
+      SERIAL_ECHOLNPGM_P(SP_X_STR, m.nozzle_outer_dimension.x);
498 498
     #endif
499 499
     #if HAS_Y_CENTER
500
-      SERIAL_ECHOLNPAIR_P(SP_Y_STR, m.nozzle_outer_dimension.y);
500
+      SERIAL_ECHOLNPGM_P(SP_Y_STR, m.nozzle_outer_dimension.y);
501 501
     #endif
502 502
     SERIAL_EOL();
503 503
     UNUSED(m);
@@ -509,7 +509,7 @@ inline void probe_sides(measurements_t &m, const float uncertainty) {
509 509
     //
510 510
     inline void report_hotend_offsets() {
511 511
       LOOP_S_L_N(e, 1, HOTENDS)
512
-        SERIAL_ECHOLNPAIR_P(PSTR("T"), e, PSTR(" Hotend Offset X"), hotend_offset[e].x, SP_Y_STR, hotend_offset[e].y, SP_Z_STR, hotend_offset[e].z);
512
+        SERIAL_ECHOLNPGM_P(PSTR("T"), e, PSTR(" Hotend Offset X"), hotend_offset[e].x, SP_Y_STR, hotend_offset[e].y, SP_Z_STR, hotend_offset[e].z);
513 513
     }
514 514
   #endif
515 515
 

+ 5
- 5
Marlin/src/gcode/calibrate/G76_M192_M871.cpp Целия файл

@@ -171,7 +171,7 @@ void GcodeSuite::G76() {
171 171
   millis_t next_temp_report = millis() + 1000;
172 172
 
173 173
   auto report_targets = [&](const celsius_t tb, const celsius_t tp) {
174
-    SERIAL_ECHOLNPAIR("Target Bed:", tb, " Probe:", tp);
174
+    SERIAL_ECHOLNPGM("Target Bed:", tb, " Probe:", tp);
175 175
   };
176 176
 
177 177
   if (do_bed_cal) {
@@ -211,7 +211,7 @@ void GcodeSuite::G76() {
211 211
       if (isnan(measured_z) || target_bed > (BED_MAX_TARGET)) break;
212 212
     }
213 213
 
214
-    SERIAL_ECHOLNPAIR("Retrieved measurements: ", temp_comp.get_index());
214
+    SERIAL_ECHOLNPGM("Retrieved measurements: ", temp_comp.get_index());
215 215
     if (temp_comp.finish_calibration(TSI_BED)) {
216 216
       say_successfully_calibrated();
217 217
       SERIAL_ECHOLNPGM(" bed.");
@@ -255,7 +255,7 @@ void GcodeSuite::G76() {
255 255
       do_blocking_move_to(noz_pos_xyz);
256 256
 
257 257
       say_waiting_for_probe_heating();
258
-      SERIAL_ECHOLNPAIR(" Bed:", target_bed, " Probe:", target_probe);
258
+      SERIAL_ECHOLNPGM(" Bed:", target_bed, " Probe:", target_probe);
259 259
       const millis_t probe_timeout_ms = millis() + SEC_TO_MS(900UL);
260 260
       while (thermalManager.degProbe() < target_probe) {
261 261
         if (report_temps(next_temp_report, probe_timeout_ms)) {
@@ -270,7 +270,7 @@ void GcodeSuite::G76() {
270 270
       if (isnan(measured_z) || target_probe > cali_info_init[TSI_PROBE].end_temp) break;
271 271
     }
272 272
 
273
-    SERIAL_ECHOLNPAIR("Retrieved measurements: ", temp_comp.get_index());
273
+    SERIAL_ECHOLNPGM("Retrieved measurements: ", temp_comp.get_index());
274 274
     if (temp_comp.finish_calibration(TSI_PROBE))
275 275
       say_successfully_calibrated();
276 276
     else
@@ -325,7 +325,7 @@ void GcodeSuite::M871() {
325 325
                                 TSI_PROBE
326 326
                               );
327 327
     if (idx > 0 && temp_comp.set_offset(mod, idx - 1, offset_val))
328
-      SERIAL_ECHOLNPAIR("Set value: ", offset_val);
328
+      SERIAL_ECHOLNPGM("Set value: ", offset_val);
329 329
     else
330 330
       SERIAL_ECHOLNPGM("!Invalid index. Failed to set value (note: value at index 0 is constant).");
331 331
 

+ 18
- 18
Marlin/src/gcode/calibrate/M100.cpp Целия файл

@@ -202,7 +202,7 @@ inline int check_for_free_memory_corruption(PGM_P const title) {
202 202
   char *start_free_memory = free_memory_start, *end_free_memory = free_memory_end;
203 203
   int n = end_free_memory - start_free_memory;
204 204
 
205
-  SERIAL_ECHOLNPAIR("\nfmc() n=", n,
205
+  SERIAL_ECHOLNPGM("\nfmc() n=", n,
206 206
                     "\nfree_memory_start=", hex_address(free_memory_start),
207 207
                     "  end=", hex_address(end_free_memory));
208 208
 
@@ -227,15 +227,15 @@ inline int check_for_free_memory_corruption(PGM_P const title) {
227 227
     if (start_free_memory[i] == TEST_BYTE) {
228 228
       int32_t j = count_test_bytes(start_free_memory + i);
229 229
       if (j > 8) {
230
-        //SERIAL_ECHOPAIR("Found ", j);
231
-        //SERIAL_ECHOLNPAIR(" bytes free at ", hex_address(start_free_memory + i));
230
+        //SERIAL_ECHOPGM("Found ", j);
231
+        //SERIAL_ECHOLNPGM(" bytes free at ", hex_address(start_free_memory + i));
232 232
         i += j;
233 233
         block_cnt++;
234
-        SERIAL_ECHOLNPAIR(" (", block_cnt, ") found=", j);
234
+        SERIAL_ECHOLNPGM(" (", block_cnt, ") found=", j);
235 235
       }
236 236
     }
237 237
   }
238
-  SERIAL_ECHOPAIR("  block_found=", block_cnt);
238
+  SERIAL_ECHOPGM("  block_found=", block_cnt);
239 239
 
240 240
   if (block_cnt != 1)
241 241
     SERIAL_ECHOLNPGM("\nMemory Corruption detected in free memory area.");
@@ -267,7 +267,7 @@ inline void free_memory_pool_report(char * const start_free_memory, const int32_
267 267
     if (*addr == TEST_BYTE) {
268 268
       const int32_t j = count_test_bytes(addr);
269 269
       if (j > 8) {
270
-        SERIAL_ECHOLNPAIR("Found ", j, " bytes free at ", hex_address(addr));
270
+        SERIAL_ECHOLNPGM("Found ", j, " bytes free at ", hex_address(addr));
271 271
         if (j > max_cnt) {
272 272
           max_cnt  = j;
273 273
           max_addr = addr;
@@ -277,11 +277,11 @@ inline void free_memory_pool_report(char * const start_free_memory, const int32_
277 277
       }
278 278
     }
279 279
   }
280
-  if (block_cnt > 1) SERIAL_ECHOLNPAIR(
280
+  if (block_cnt > 1) SERIAL_ECHOLNPGM(
281 281
     "\nMemory Corruption detected in free memory area."
282 282
     "\nLargest free block is ", max_cnt, " bytes at ", hex_address(max_addr)
283 283
   );
284
-  SERIAL_ECHOLNPAIR("check_for_free_memory_corruption() = ", check_for_free_memory_corruption(PSTR("M100 F ")));
284
+  SERIAL_ECHOLNPGM("check_for_free_memory_corruption() = ", check_for_free_memory_corruption(PSTR("M100 F ")));
285 285
 }
286 286
 
287 287
 #if ENABLED(M100_FREE_MEMORY_CORRUPTOR)
@@ -299,7 +299,7 @@ inline void free_memory_pool_report(char * const start_free_memory, const int32_
299 299
     for (uint32_t i = 1; i <= size; i++) {
300 300
       char * const addr = start_free_memory + i * j;
301 301
       *addr = i;
302
-      SERIAL_ECHOPAIR("\nCorrupting address: ", hex_address(addr));
302
+      SERIAL_ECHOPGM("\nCorrupting address: ", hex_address(addr));
303 303
     }
304 304
     SERIAL_EOL();
305 305
   }
@@ -327,8 +327,8 @@ inline void init_free_memory(char *start_free_memory, int32_t size) {
327 327
 
328 328
   for (int32_t i = 0; i < size; i++) {
329 329
     if (start_free_memory[i] != TEST_BYTE) {
330
-      SERIAL_ECHOPAIR("? address : ", hex_address(start_free_memory + i));
331
-      SERIAL_ECHOLNPAIR("=", hex_byte(start_free_memory[i]));
330
+      SERIAL_ECHOPGM("? address : ", hex_address(start_free_memory + i));
331
+      SERIAL_ECHOLNPGM("=", hex_byte(start_free_memory[i]));
332 332
       SERIAL_EOL();
333 333
     }
334 334
   }
@@ -340,14 +340,14 @@ inline void init_free_memory(char *start_free_memory, int32_t size) {
340 340
 void GcodeSuite::M100() {
341 341
   char *sp = top_of_stack();
342 342
   if (!free_memory_end) free_memory_end = sp - MEMORY_END_CORRECTION;
343
-                  SERIAL_ECHOPAIR("\nbss_end               : ", hex_address(end_bss));
344
-  if (heaplimit)  SERIAL_ECHOPAIR("\n__heaplimit           : ", hex_address(heaplimit));
345
-                  SERIAL_ECHOPAIR("\nfree_memory_start     : ", hex_address(free_memory_start));
346
-  if (stacklimit) SERIAL_ECHOPAIR("\n__stacklimit          : ", hex_address(stacklimit));
347
-                  SERIAL_ECHOPAIR("\nfree_memory_end       : ", hex_address(free_memory_end));
343
+                  SERIAL_ECHOPGM("\nbss_end               : ", hex_address(end_bss));
344
+  if (heaplimit)  SERIAL_ECHOPGM("\n__heaplimit           : ", hex_address(heaplimit));
345
+                  SERIAL_ECHOPGM("\nfree_memory_start     : ", hex_address(free_memory_start));
346
+  if (stacklimit) SERIAL_ECHOPGM("\n__stacklimit          : ", hex_address(stacklimit));
347
+                  SERIAL_ECHOPGM("\nfree_memory_end       : ", hex_address(free_memory_end));
348 348
   if (MEMORY_END_CORRECTION)
349
-                  SERIAL_ECHOPAIR("\nMEMORY_END_CORRECTION : ", MEMORY_END_CORRECTION);
350
-                  SERIAL_ECHOLNPAIR("\nStack Pointer       : ", hex_address(sp));
349
+                  SERIAL_ECHOPGM("\nMEMORY_END_CORRECTION : ", MEMORY_END_CORRECTION);
350
+                  SERIAL_ECHOLNPGM("\nStack Pointer       : ", hex_address(sp));
351 351
 
352 352
   // Always init on the first invocation of M100
353 353
   static bool m100_not_initialized = true;

+ 3
- 3
Marlin/src/gcode/calibrate/M425.cpp Целия файл

@@ -86,7 +86,7 @@ void GcodeSuite::M425() {
86 86
     SERIAL_ECHOPGM("Backlash Correction ");
87 87
     if (!backlash.correction) SERIAL_ECHOPGM("in");
88 88
     SERIAL_ECHOLNPGM("active:");
89
-    SERIAL_ECHOLNPAIR("  Correction Amount/Fade-out:     F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)");
89
+    SERIAL_ECHOLNPGM("  Correction Amount/Fade-out:     F", backlash.get_correction(), " (F1.0 = full, F0.0 = none)");
90 90
     SERIAL_ECHOPGM("  Backlash Distance (mm):        ");
91 91
     LOOP_LINEAR_AXES(a) if (axis_can_calibrate(a)) {
92 92
       SERIAL_CHAR(' ', AXIS_CHAR(a));
@@ -95,7 +95,7 @@ void GcodeSuite::M425() {
95 95
     }
96 96
 
97 97
     #ifdef BACKLASH_SMOOTHING_MM
98
-      SERIAL_ECHOLNPAIR("  Smoothing (mm):                 S", backlash.smoothing_mm);
98
+      SERIAL_ECHOLNPGM("  Smoothing (mm):                 S", backlash.smoothing_mm);
99 99
     #endif
100 100
 
101 101
     #if ENABLED(MEASURE_BACKLASH_WHEN_PROBING)
@@ -115,7 +115,7 @@ void GcodeSuite::M425() {
115 115
 
116 116
 void GcodeSuite::M425_report(const bool forReplay/*=true*/) {
117 117
   report_heading_etc(forReplay, PSTR(STR_BACKLASH_COMPENSATION));
118
-  SERIAL_ECHOLNPAIR_P(
118
+  SERIAL_ECHOLNPGM_P(
119 119
     PSTR("  M425 F"), backlash.get_correction()
120 120
     #ifdef BACKLASH_SMOOTHING_MM
121 121
       , PSTR(" S"), LINEAR_UNIT(backlash.smoothing_mm)

+ 4
- 4
Marlin/src/gcode/calibrate/M48.cpp Целия файл

@@ -162,7 +162,7 @@ void GcodeSuite::M48() {
162 162
           #endif
163 163
         );
164 164
         if (verbose_level > 3) {
165
-          SERIAL_ECHOPAIR("Start radius:", radius, " angle:", angle, " dir:");
165
+          SERIAL_ECHOPGM("Start radius:", radius, " angle:", angle, " dir:");
166 166
           if (dir > 0) SERIAL_CHAR('C');
167 167
           SERIAL_ECHOLNPGM("CW");
168 168
         }
@@ -200,7 +200,7 @@ void GcodeSuite::M48() {
200 200
             while (!probe.can_reach(next_pos)) {
201 201
               next_pos *= 0.8f;
202 202
               if (verbose_level > 3)
203
-                SERIAL_ECHOLNPAIR_P(PSTR("Moving inward: X"), next_pos.x, SP_Y_STR, next_pos.y);
203
+                SERIAL_ECHOLNPGM_P(PSTR("Moving inward: X"), next_pos.x, SP_Y_STR, next_pos.y);
204 204
             }
205 205
           #elif HAS_ENDSTOPS
206 206
             // For a rectangular bed just keep the probe in bounds
@@ -209,7 +209,7 @@ void GcodeSuite::M48() {
209 209
           #endif
210 210
 
211 211
           if (verbose_level > 3)
212
-            SERIAL_ECHOLNPAIR_P(PSTR("Going to: X"), next_pos.x, SP_Y_STR, next_pos.y);
212
+            SERIAL_ECHOLNPGM_P(PSTR("Going to: X"), next_pos.x, SP_Y_STR, next_pos.y);
213 213
 
214 214
           do_blocking_move_to_xy(next_pos);
215 215
         } // n_legs loop
@@ -241,7 +241,7 @@ void GcodeSuite::M48() {
241 241
 
242 242
       if (verbose_level > 1) {
243 243
         SERIAL_ECHO(n + 1);
244
-        SERIAL_ECHOPAIR(" of ", n_samples);
244
+        SERIAL_ECHOPGM(" of ", n_samples);
245 245
         SERIAL_ECHOPAIR_F(": z: ", pz, 3);
246 246
         SERIAL_CHAR(' ');
247 247
         dev_report(verbose_level > 2, mean, sigma, min, max);

+ 2
- 2
Marlin/src/gcode/calibrate/M665.cpp Целия файл

@@ -63,7 +63,7 @@
63 63
 
64 64
   void GcodeSuite::M665_report(const bool forReplay/*=true*/) {
65 65
     report_heading_etc(forReplay, PSTR(STR_DELTA_SETTINGS));
66
-    SERIAL_ECHOLNPAIR_P(
66
+    SERIAL_ECHOLNPGM_P(
67 67
         PSTR("  M665 L"), LINEAR_UNIT(delta_diagonal_rod)
68 68
       , PSTR(" R"), LINEAR_UNIT(delta_radius)
69 69
       , PSTR(" H"), LINEAR_UNIT(delta_height)
@@ -133,7 +133,7 @@
133 133
 
134 134
   void GcodeSuite::M665_report(const bool forReplay/*=true*/) {
135 135
     report_heading_etc(forReplay, PSTR(STR_SCARA_SETTINGS " (" STR_SCARA_S TERN_(HAS_SCARA_OFFSET, " " STR_SCARA_P_T_Z) ")"));
136
-    SERIAL_ECHOLNPAIR_P(
136
+    SERIAL_ECHOLNPGM_P(
137 137
       PSTR("  M665 S"), segments_per_second
138 138
       #if HAS_SCARA_OFFSET
139 139
         , SP_P_STR, scara_home_offset.a

+ 9
- 9
Marlin/src/gcode/calibrate/M666.cpp Целия файл

@@ -52,17 +52,17 @@
52 52
           is_err = true;
53 53
         else {
54 54
           delta_endstop_adj[i] = v;
55
-          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("delta_endstop_adj[", AS_CHAR(AXIS_CHAR(i)), "] = ", v);
55
+          if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("delta_endstop_adj[", AS_CHAR(AXIS_CHAR(i)), "] = ", v);
56 56
         }
57 57
       }
58 58
     }
59
-    if (is_err) SERIAL_ECHOLNPAIR("?M666 offsets must be <= 0");
59
+    if (is_err) SERIAL_ECHOLNPGM("?M666 offsets must be <= 0");
60 60
     if (!is_set) M666_report();
61 61
   }
62 62
 
63 63
   void GcodeSuite::M666_report(const bool forReplay/*=true*/) {
64 64
     report_heading_etc(forReplay, PSTR(STR_ENDSTOP_ADJUSTMENT));
65
-    SERIAL_ECHOLNPAIR_P(
65
+    SERIAL_ECHOLNPGM_P(
66 66
         PSTR("  M666 X"), LINEAR_UNIT(delta_endstop_adj.a)
67 67
       , SP_Y_STR, LINEAR_UNIT(delta_endstop_adj.b)
68 68
       , SP_Z_STR, LINEAR_UNIT(delta_endstop_adj.c)
@@ -108,22 +108,22 @@
108 108
     report_heading_etc(forReplay, PSTR(STR_ENDSTOP_ADJUSTMENT));
109 109
     SERIAL_ECHOPGM("  M666");
110 110
     #if ENABLED(X_DUAL_ENDSTOPS)
111
-      SERIAL_ECHOLNPAIR_P(SP_X_STR, LINEAR_UNIT(endstops.x2_endstop_adj));
111
+      SERIAL_ECHOLNPGM_P(SP_X_STR, LINEAR_UNIT(endstops.x2_endstop_adj));
112 112
     #endif
113 113
     #if ENABLED(Y_DUAL_ENDSTOPS)
114
-      SERIAL_ECHOLNPAIR_P(SP_Y_STR, LINEAR_UNIT(endstops.y2_endstop_adj));
114
+      SERIAL_ECHOLNPGM_P(SP_Y_STR, LINEAR_UNIT(endstops.y2_endstop_adj));
115 115
     #endif
116 116
     #if ENABLED(Z_MULTI_ENDSTOPS)
117 117
       #if NUM_Z_STEPPER_DRIVERS >= 3
118
-        SERIAL_ECHOPAIR(" S2 Z", LINEAR_UNIT(endstops.z3_endstop_adj));
118
+        SERIAL_ECHOPGM(" S2 Z", LINEAR_UNIT(endstops.z3_endstop_adj));
119 119
         report_echo_start(forReplay);
120
-        SERIAL_ECHOPAIR("  M666 S3 Z", LINEAR_UNIT(endstops.z3_endstop_adj));
120
+        SERIAL_ECHOPGM("  M666 S3 Z", LINEAR_UNIT(endstops.z3_endstop_adj));
121 121
         #if NUM_Z_STEPPER_DRIVERS >= 4
122 122
           report_echo_start(forReplay);
123
-          SERIAL_ECHOPAIR("  M666 S4 Z", LINEAR_UNIT(endstops.z4_endstop_adj));
123
+          SERIAL_ECHOPGM("  M666 S4 Z", LINEAR_UNIT(endstops.z4_endstop_adj));
124 124
         #endif
125 125
       #else
126
-        SERIAL_ECHOLNPAIR_P(SP_Z_STR, LINEAR_UNIT(endstops.z2_endstop_adj));
126
+        SERIAL_ECHOLNPGM_P(SP_Z_STR, LINEAR_UNIT(endstops.z2_endstop_adj));
127 127
       #endif
128 128
     #endif
129 129
   }

+ 9
- 9
Marlin/src/gcode/config/M200-M205.cpp Целия файл

@@ -84,7 +84,7 @@
84 84
 
85 85
     #if EXTRUDERS == 1
86 86
     {
87
-      SERIAL_ECHOLNPAIR(
87
+      SERIAL_ECHOLNPGM(
88 88
         "  M200 S", parser.volumetric_enabled, " D", LINEAR_UNIT(planner.filament_size[0])
89 89
         #if ENABLED(VOLUMETRIC_EXTRUDER_LIMIT)
90 90
           , " L", LINEAR_UNIT(planner.volumetric_extruder_limit[0])
@@ -92,10 +92,10 @@
92 92
       );
93 93
     }
94 94
     #else
95
-      SERIAL_ECHOLNPAIR("  M200 S", parser.volumetric_enabled);
95
+      SERIAL_ECHOLNPGM("  M200 S", parser.volumetric_enabled);
96 96
       LOOP_L_N(i, EXTRUDERS) {
97 97
         report_echo_start(forReplay);
98
-        SERIAL_ECHOLNPAIR(
98
+        SERIAL_ECHOLNPGM(
99 99
           "  M200 T", i, " D", LINEAR_UNIT(planner.filament_size[i])
100 100
           #if ENABLED(VOLUMETRIC_EXTRUDER_LIMIT)
101 101
             , " L", LINEAR_UNIT(planner.volumetric_extruder_limit[i])
@@ -134,7 +134,7 @@ void GcodeSuite::M201() {
134 134
 
135 135
 void GcodeSuite::M201_report(const bool forReplay/*=true*/) {
136 136
   report_heading_etc(forReplay, PSTR(STR_MAX_ACCELERATION));
137
-  SERIAL_ECHOLNPAIR_P(
137
+  SERIAL_ECHOLNPGM_P(
138 138
     LIST_N(DOUBLE(LINEAR_AXES),
139 139
       PSTR("  M201 X"), LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[X_AXIS]),
140 140
       SP_Y_STR, LINEAR_UNIT(planner.settings.max_acceleration_mm_per_s2[Y_AXIS]),
@@ -150,7 +150,7 @@ void GcodeSuite::M201_report(const bool forReplay/*=true*/) {
150 150
   #if ENABLED(DISTINCT_E_FACTORS)
151 151
     LOOP_L_N(i, E_STEPPERS) {
152 152
       report_echo_start(forReplay);
153
-      SERIAL_ECHOLNPAIR_P(
153
+      SERIAL_ECHOLNPGM_P(
154 154
           PSTR("  M201 T"), i
155 155
         , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_acceleration_mm_per_s2[E_AXIS_N(i)])
156 156
       );
@@ -179,7 +179,7 @@ void GcodeSuite::M203() {
179 179
 
180 180
 void GcodeSuite::M203_report(const bool forReplay/*=true*/) {
181 181
   report_heading_etc(forReplay, PSTR(STR_MAX_FEEDRATES));
182
-  SERIAL_ECHOLNPAIR_P(
182
+  SERIAL_ECHOLNPGM_P(
183 183
     LIST_N(DOUBLE(LINEAR_AXES),
184 184
       PSTR("  M203 X"), LINEAR_UNIT(planner.settings.max_feedrate_mm_s[X_AXIS]),
185 185
       SP_Y_STR, LINEAR_UNIT(planner.settings.max_feedrate_mm_s[Y_AXIS]),
@@ -195,7 +195,7 @@ void GcodeSuite::M203_report(const bool forReplay/*=true*/) {
195 195
   #if ENABLED(DISTINCT_E_FACTORS)
196 196
     LOOP_L_N(i, E_STEPPERS) {
197 197
       SERIAL_ECHO_START();
198
-      SERIAL_ECHOLNPAIR_P(
198
+      SERIAL_ECHOLNPGM_P(
199 199
           PSTR("  M203 T"), i
200 200
         , SP_E_STR, VOLUMETRIC_UNIT(planner.settings.max_feedrate_mm_s[E_AXIS_N(i)])
201 201
       );
@@ -225,7 +225,7 @@ void GcodeSuite::M204() {
225 225
 
226 226
 void GcodeSuite::M204_report(const bool forReplay/*=true*/) {
227 227
   report_heading_etc(forReplay, PSTR(STR_ACCELERATION_P_R_T));
228
-  SERIAL_ECHOLNPAIR_P(
228
+  SERIAL_ECHOLNPGM_P(
229 229
       PSTR("  M204 P"), LINEAR_UNIT(planner.settings.acceleration)
230 230
     , PSTR(" R"), LINEAR_UNIT(planner.settings.retract_acceleration)
231 231
     , SP_T_STR, LINEAR_UNIT(planner.settings.travel_acceleration)
@@ -292,7 +292,7 @@ void GcodeSuite::M205_report(const bool forReplay/*=true*/) {
292 292
     TERN_(HAS_CLASSIC_E_JERK, " E<max_e_jerk>")
293 293
     ")"
294 294
   ));
295
-  SERIAL_ECHOLNPAIR_P(
295
+  SERIAL_ECHOLNPGM_P(
296 296
       PSTR("  M205 B"), LINEAR_UNIT(planner.settings.min_segment_time_us)
297 297
     , PSTR(" S"), LINEAR_UNIT(planner.settings.min_feedrate_mm_s)
298 298
     , SP_T_STR, LINEAR_UNIT(planner.settings.min_travel_feedrate_mm_s)

+ 10
- 10
Marlin/src/gcode/config/M217.cpp Целия файл

@@ -136,33 +136,33 @@ void GcodeSuite::M217_report(const bool forReplay/*=true*/) {
136 136
   SERIAL_ECHOPGM("  M217");
137 137
 
138 138
   #if ENABLED(TOOLCHANGE_FILAMENT_SWAP)
139
-    SERIAL_ECHOPAIR(" S", LINEAR_UNIT(toolchange_settings.swap_length));
140
-    SERIAL_ECHOPAIR_P(SP_B_STR, LINEAR_UNIT(toolchange_settings.extra_resume),
139
+    SERIAL_ECHOPGM(" S", LINEAR_UNIT(toolchange_settings.swap_length));
140
+    SERIAL_ECHOPGM_P(SP_B_STR, LINEAR_UNIT(toolchange_settings.extra_resume),
141 141
                       SP_E_STR, LINEAR_UNIT(toolchange_settings.extra_prime),
142 142
                       SP_P_STR, LINEAR_UNIT(toolchange_settings.prime_speed));
143
-    SERIAL_ECHOPAIR(" R", LINEAR_UNIT(toolchange_settings.retract_speed),
143
+    SERIAL_ECHOPGM(" R", LINEAR_UNIT(toolchange_settings.retract_speed),
144 144
                     " U", LINEAR_UNIT(toolchange_settings.unretract_speed),
145 145
                     " F", toolchange_settings.fan_speed,
146 146
                     " G", toolchange_settings.fan_time);
147 147
 
148 148
     #if ENABLED(TOOLCHANGE_MIGRATION_FEATURE)
149
-      SERIAL_ECHOPAIR(" A", migration.automode);
150
-      SERIAL_ECHOPAIR(" L", LINEAR_UNIT(migration.last));
149
+      SERIAL_ECHOPGM(" A", migration.automode);
150
+      SERIAL_ECHOPGM(" L", LINEAR_UNIT(migration.last));
151 151
     #endif
152 152
 
153 153
     #if ENABLED(TOOLCHANGE_PARK)
154
-      SERIAL_ECHOPAIR(" W", LINEAR_UNIT(toolchange_settings.enable_park));
155
-      SERIAL_ECHOPAIR_P(SP_X_STR, LINEAR_UNIT(toolchange_settings.change_point.x));
156
-      SERIAL_ECHOPAIR_P(SP_Y_STR, LINEAR_UNIT(toolchange_settings.change_point.y));
154
+      SERIAL_ECHOPGM(" W", LINEAR_UNIT(toolchange_settings.enable_park));
155
+      SERIAL_ECHOPGM_P(SP_X_STR, LINEAR_UNIT(toolchange_settings.change_point.x));
156
+      SERIAL_ECHOPGM_P(SP_Y_STR, LINEAR_UNIT(toolchange_settings.change_point.y));
157 157
     #endif
158 158
 
159 159
     #if ENABLED(TOOLCHANGE_FS_PRIME_FIRST_USED)
160
-      SERIAL_ECHOPAIR(" V", LINEAR_UNIT(enable_first_prime));
160
+      SERIAL_ECHOPGM(" V", LINEAR_UNIT(enable_first_prime));
161 161
     #endif
162 162
 
163 163
   #endif
164 164
 
165
-  SERIAL_ECHOLNPAIR_P(SP_Z_STR, LINEAR_UNIT(toolchange_settings.z_raise));
165
+  SERIAL_ECHOLNPGM_P(SP_Z_STR, LINEAR_UNIT(toolchange_settings.z_raise));
166 166
 }
167 167
 
168 168
 #endif // HAS_MULTI_EXTRUDER

+ 1
- 1
Marlin/src/gcode/config/M218.cpp Целия файл

@@ -60,7 +60,7 @@ void GcodeSuite::M218_report(const bool forReplay/*=true*/) {
60 60
   report_heading_etc(forReplay, PSTR(STR_HOTEND_OFFSETS));
61 61
   LOOP_S_L_N(e, 1, HOTENDS) {
62 62
     report_echo_start(forReplay);
63
-    SERIAL_ECHOPAIR_P(
63
+    SERIAL_ECHOPGM_P(
64 64
       PSTR("  M218 T"), e,
65 65
       SP_X_STR, LINEAR_UNIT(hotend_offset[e].x),
66 66
       SP_Y_STR, LINEAR_UNIT(hotend_offset[e].y)

+ 1
- 1
Marlin/src/gcode/config/M220.cpp Целия файл

@@ -44,7 +44,7 @@ void GcodeSuite::M220() {
44 44
   if (parser.seenval('S')) feedrate_percentage = parser.value_int();
45 45
 
46 46
   if (!parser.seen_any()) {
47
-    SERIAL_ECHOPAIR("FR:", feedrate_percentage);
47
+    SERIAL_ECHOPGM("FR:", feedrate_percentage);
48 48
     SERIAL_CHAR('%');
49 49
     SERIAL_EOL();
50 50
   }

+ 1
- 1
Marlin/src/gcode/config/M221.cpp Целия файл

@@ -38,7 +38,7 @@ void GcodeSuite::M221() {
38 38
   else {
39 39
     SERIAL_ECHO_START();
40 40
     SERIAL_CHAR('E', '0' + target_extruder);
41
-    SERIAL_ECHOPAIR(" Flow: ", planner.flow_percentage[target_extruder]);
41
+    SERIAL_ECHOPGM(" Flow: ", planner.flow_percentage[target_extruder]);
42 42
     SERIAL_CHAR('%');
43 43
     SERIAL_EOL();
44 44
   }

+ 1
- 1
Marlin/src/gcode/config/M281.cpp Целия файл

@@ -69,7 +69,7 @@ void GcodeSuite::M281_report(const bool forReplay/*=true*/) {
69 69
         case Z_PROBE_SERVO_NR:
70 70
       #endif
71 71
           report_echo_start(forReplay);
72
-          SERIAL_ECHOLNPAIR("  M281 P", i, " L", servo_angles[i][0], " U", servo_angles[i][1]);
72
+          SERIAL_ECHOLNPGM("  M281 P", i, " L", servo_angles[i][0], " U", servo_angles[i][1]);
73 73
     }
74 74
   }
75 75
 }

+ 4
- 4
Marlin/src/gcode/config/M301.cpp Целия файл

@@ -83,7 +83,7 @@ void GcodeSuite::M301_report(const bool forReplay/*=true*/, const int8_t eindex/
83 83
   HOTEND_LOOP() {
84 84
     if (e == eindex || eindex == -1) {
85 85
       report_echo_start(forReplay);
86
-      SERIAL_ECHOPAIR_P(
86
+      SERIAL_ECHOPGM_P(
87 87
         #if ENABLED(PID_PARAMS_PER_HOTEND)
88 88
           PSTR("  M301 E"), e, SP_P_STR
89 89
         #else
@@ -94,11 +94,11 @@ void GcodeSuite::M301_report(const bool forReplay/*=true*/, const int8_t eindex/
94 94
         , PSTR(" D"), unscalePID_d(PID_PARAM(Kd, e))
95 95
       );
96 96
       #if ENABLED(PID_EXTRUSION_SCALING)
97
-        SERIAL_ECHOPAIR_P(SP_C_STR, PID_PARAM(Kc, e));
98
-        if (e == 0) SERIAL_ECHOPAIR(" L", thermalManager.lpq_len);
97
+        SERIAL_ECHOPGM_P(SP_C_STR, PID_PARAM(Kc, e));
98
+        if (e == 0) SERIAL_ECHOPGM(" L", thermalManager.lpq_len);
99 99
       #endif
100 100
       #if ENABLED(PID_FAN_SCALING)
101
-        SERIAL_ECHOPAIR(" F", PID_PARAM(Kf, e));
101
+        SERIAL_ECHOPGM(" F", PID_PARAM(Kf, e));
102 102
       #endif
103 103
       SERIAL_EOL();
104 104
     }

+ 1
- 1
Marlin/src/gcode/config/M302.cpp Целия файл

@@ -56,7 +56,7 @@ void GcodeSuite::M302() {
56 56
     SERIAL_ECHO_START();
57 57
     SERIAL_ECHOPGM("Cold extrudes are ");
58 58
     SERIAL_ECHOPGM_P(thermalManager.allow_cold_extrude ? PSTR("en") : PSTR("dis"));
59
-    SERIAL_ECHOLNPAIR("abled (min temp ", thermalManager.extrude_min_temp, "C)");
59
+    SERIAL_ECHOLNPGM("abled (min temp ", thermalManager.extrude_min_temp, "C)");
60 60
   }
61 61
 }
62 62
 

+ 1
- 1
Marlin/src/gcode/config/M309.cpp Целия файл

@@ -43,7 +43,7 @@ void GcodeSuite::M309() {
43 43
 
44 44
 void GcodeSuite::M309_report(const bool forReplay/*=true*/) {
45 45
   report_heading_etc(forReplay, PSTR(STR_CHAMBER_PID));
46
-  SERIAL_ECHOLNPAIR(
46
+  SERIAL_ECHOLNPGM(
47 47
       "  M309 P", thermalManager.temp_chamber.pid.Kp
48 48
     , " I", unscalePID_i(thermalManager.temp_chamber.pid.Ki)
49 49
     , " D", unscalePID_d(thermalManager.temp_chamber.pid.Kd)

+ 6
- 6
Marlin/src/gcode/config/M43.cpp Целия файл

@@ -130,7 +130,7 @@ inline void servo_probe_test() {
130 130
 
131 131
     const uint8_t probe_index = parser.byteval('P', Z_PROBE_SERVO_NR);
132 132
 
133
-    SERIAL_ECHOLNPAIR("Servo probe test\n"
133
+    SERIAL_ECHOLNPGM("Servo probe test\n"
134 134
                       ". using index:  ", probe_index,
135 135
                       ", deploy angle: ", servo_angles[probe_index][0],
136 136
                       ", stow angle:   ", servo_angles[probe_index][1]
@@ -143,7 +143,7 @@ inline void servo_probe_test() {
143 143
       #define PROBE_TEST_PIN Z_MIN_PIN
144 144
       constexpr bool probe_inverting = Z_MIN_ENDSTOP_INVERTING;
145 145
 
146
-      SERIAL_ECHOLNPAIR(". Probe Z_MIN_PIN: ", PROBE_TEST_PIN);
146
+      SERIAL_ECHOLNPGM(". Probe Z_MIN_PIN: ", PROBE_TEST_PIN);
147 147
       SERIAL_ECHOPGM(". Z_MIN_ENDSTOP_INVERTING: ");
148 148
 
149 149
     #else
@@ -151,7 +151,7 @@ inline void servo_probe_test() {
151 151
       #define PROBE_TEST_PIN Z_MIN_PROBE_PIN
152 152
       constexpr bool probe_inverting = Z_MIN_PROBE_ENDSTOP_INVERTING;
153 153
 
154
-      SERIAL_ECHOLNPAIR(". Probe Z_MIN_PROBE_PIN: ", PROBE_TEST_PIN);
154
+      SERIAL_ECHOLNPGM(". Probe Z_MIN_PROBE_PIN: ", PROBE_TEST_PIN);
155 155
       SERIAL_ECHOPGM(   ". Z_MIN_PROBE_ENDSTOP_INVERTING: ");
156 156
 
157 157
     #endif
@@ -211,11 +211,11 @@ inline void servo_probe_test() {
211 211
       if (deploy_state != stow_state) {
212 212
         SERIAL_ECHOLNPGM("= Mechanical Switch detected");
213 213
         if (deploy_state) {
214
-          SERIAL_ECHOLNPAIR("  DEPLOYED state: HIGH (logic 1)",
214
+          SERIAL_ECHOLNPGM("  DEPLOYED state: HIGH (logic 1)",
215 215
                             "  STOWED (triggered) state: LOW (logic 0)");
216 216
         }
217 217
         else {
218
-          SERIAL_ECHOLNPAIR("  DEPLOYED state: LOW (logic 0)",
218
+          SERIAL_ECHOLNPGM("  DEPLOYED state: LOW (logic 0)",
219 219
                             "  STOWED (triggered) state: HIGH (logic 1)");
220 220
         }
221 221
         #if ENABLED(BLTOUCH)
@@ -244,7 +244,7 @@ inline void servo_probe_test() {
244 244
         if (probe_counter == 15)
245 245
           SERIAL_ECHOLNPGM(": 30ms or more");
246 246
         else
247
-          SERIAL_ECHOLNPAIR(" (+/- 4ms): ", probe_counter * 2);
247
+          SERIAL_ECHOLNPGM(" (+/- 4ms): ", probe_counter * 2);
248 248
 
249 249
         if (probe_counter >= 4) {
250 250
           if (probe_counter == 15) {

+ 5
- 5
Marlin/src/gcode/config/M92.cpp Целия файл

@@ -78,10 +78,10 @@ void GcodeSuite::M92() {
78 78
                      micro_steps = argH ?: Z_MICROSTEPS;
79 79
       const float z_full_step_mm = micro_steps * planner.steps_to_mm[Z_AXIS];
80 80
       SERIAL_ECHO_START();
81
-      SERIAL_ECHOPAIR("{ micro_steps:", micro_steps, ", z_full_step_mm:", z_full_step_mm);
81
+      SERIAL_ECHOPGM("{ micro_steps:", micro_steps, ", z_full_step_mm:", z_full_step_mm);
82 82
       if (wanted) {
83 83
         const float best = uint16_t(wanted / z_full_step_mm) * z_full_step_mm;
84
-        SERIAL_ECHOPAIR(", best:[", best);
84
+        SERIAL_ECHOPGM(", best:[", best);
85 85
         if (best != wanted) { SERIAL_CHAR(','); SERIAL_DECIMAL(best + z_full_step_mm); }
86 86
         SERIAL_CHAR(']');
87 87
       }
@@ -92,7 +92,7 @@ void GcodeSuite::M92() {
92 92
 
93 93
 void GcodeSuite::M92_report(const bool forReplay/*=true*/, const int8_t e/*=-1*/) {
94 94
   report_heading_etc(forReplay, PSTR(STR_STEPS_PER_UNIT));
95
-  SERIAL_ECHOPAIR_P(LIST_N(DOUBLE(LINEAR_AXES),
95
+  SERIAL_ECHOPGM_P(LIST_N(DOUBLE(LINEAR_AXES),
96 96
     PSTR("  M92 X"), LINEAR_UNIT(planner.settings.axis_steps_per_mm[X_AXIS]),
97 97
     SP_Y_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Y_AXIS]),
98 98
     SP_Z_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[Z_AXIS]),
@@ -101,7 +101,7 @@ void GcodeSuite::M92_report(const bool forReplay/*=true*/, const int8_t e/*=-1*/
101 101
     SP_K_STR, LINEAR_UNIT(planner.settings.axis_steps_per_mm[K_AXIS]))
102 102
   );
103 103
   #if HAS_EXTRUDERS && DISABLED(DISTINCT_E_FACTORS)
104
-    SERIAL_ECHOPAIR_P(SP_E_STR, VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS]));
104
+    SERIAL_ECHOPGM_P(SP_E_STR, VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS]));
105 105
   #endif
106 106
   SERIAL_EOL();
107 107
 
@@ -109,7 +109,7 @@ void GcodeSuite::M92_report(const bool forReplay/*=true*/, const int8_t e/*=-1*/
109 109
     LOOP_L_N(i, E_STEPPERS) {
110 110
       if (e >= 0 && i != e) continue;
111 111
       report_echo_start(forReplay);
112
-      SERIAL_ECHOLNPAIR_P(
112
+      SERIAL_ECHOLNPGM_P(
113 113
         PSTR("  M92 T"), i,
114 114
         SP_E_STR, VOLUMETRIC_UNIT(planner.settings.axis_steps_per_mm[E_AXIS_N(i)])
115 115
       );

+ 4
- 4
Marlin/src/gcode/control/M111.cpp Целия файл

@@ -57,19 +57,19 @@ void GcodeSuite::M111() {
57 57
     SERIAL_ECHOPGM(STR_DEBUG_OFF);
58 58
     #if !defined(__AVR__) || !defined(USBCON)
59 59
       #if ENABLED(SERIAL_STATS_RX_BUFFER_OVERRUNS)
60
-        SERIAL_ECHOPAIR("\nBuffer Overruns: ", MYSERIAL1.buffer_overruns());
60
+        SERIAL_ECHOPGM("\nBuffer Overruns: ", MYSERIAL1.buffer_overruns());
61 61
       #endif
62 62
 
63 63
       #if ENABLED(SERIAL_STATS_RX_FRAMING_ERRORS)
64
-        SERIAL_ECHOPAIR("\nFraming Errors: ", MYSERIAL1.framing_errors());
64
+        SERIAL_ECHOPGM("\nFraming Errors: ", MYSERIAL1.framing_errors());
65 65
       #endif
66 66
 
67 67
       #if ENABLED(SERIAL_STATS_DROPPED_RX)
68
-        SERIAL_ECHOPAIR("\nDropped bytes: ", MYSERIAL1.dropped());
68
+        SERIAL_ECHOPGM("\nDropped bytes: ", MYSERIAL1.dropped());
69 69
       #endif
70 70
 
71 71
       #if ENABLED(SERIAL_STATS_MAX_RX_QUEUED)
72
-        SERIAL_ECHOPAIR("\nMax RX Queue Size: ", MYSERIAL1.rxMaxEnqueued());
72
+        SERIAL_ECHOPGM("\nMax RX Queue Size: ", MYSERIAL1.rxMaxEnqueued());
73 73
       #endif
74 74
     #endif // !__AVR__ || !USBCON
75 75
   }

+ 1
- 1
Marlin/src/gcode/control/M211.cpp Целия файл

@@ -41,7 +41,7 @@ void GcodeSuite::M211() {
41 41
 
42 42
 void GcodeSuite::M211_report(const bool forReplay/*=true*/) {
43 43
   report_heading_etc(forReplay, PSTR(STR_SOFT_ENDSTOPS));
44
-  SERIAL_ECHOPAIR("  M211 S", AS_DIGIT(soft_endstop._enabled), " ; ");
44
+  SERIAL_ECHOPGM("  M211 S", AS_DIGIT(soft_endstop._enabled), " ; ");
45 45
   serialprintln_onoff(soft_endstop._enabled);
46 46
 
47 47
   report_echo_start(forReplay);

+ 15
- 15
Marlin/src/gcode/control/M605.cpp Целия файл

@@ -127,26 +127,26 @@
127 127
           case DXC_DUPLICATION_MODE:  DEBUG_ECHOPGM("DUPLICATION");  break;
128 128
           case DXC_MIRRORED_MODE:     DEBUG_ECHOPGM("MIRRORED");     break;
129 129
         }
130
-        DEBUG_ECHOPAIR("\nActive Ext: ", active_extruder);
130
+        DEBUG_ECHOPGM("\nActive Ext: ", active_extruder);
131 131
         if (!active_extruder_parked) DEBUG_ECHOPGM(" NOT ");
132 132
         DEBUG_ECHOPGM(" parked.");
133
-        DEBUG_ECHOPAIR("\nactive_extruder_x_pos: ", current_position.x);
134
-        DEBUG_ECHOPAIR("\ninactive_extruder_x: ", inactive_extruder_x);
135
-        DEBUG_ECHOPAIR("\nextruder_duplication_enabled: ", extruder_duplication_enabled);
136
-        DEBUG_ECHOPAIR("\nduplicate_extruder_x_offset: ", duplicate_extruder_x_offset);
137
-        DEBUG_ECHOPAIR("\nduplicate_extruder_temp_offset: ", duplicate_extruder_temp_offset);
138
-        DEBUG_ECHOPAIR("\ndelayed_move_time: ", delayed_move_time);
139
-        DEBUG_ECHOPAIR("\nX1 Home X: ", x_home_pos(0), "\nX1_MIN_POS=", X1_MIN_POS, "\nX1_MAX_POS=", X1_MAX_POS);
140
-        DEBUG_ECHOPAIR("\nX2 Home X: ", x_home_pos(1), "\nX2_MIN_POS=", X2_MIN_POS, "\nX2_MAX_POS=", X2_MAX_POS);
141
-        DEBUG_ECHOPAIR("\nX2_HOME_DIR=", X2_HOME_DIR, "\nX2_HOME_POS=", X2_HOME_POS);
142
-        DEBUG_ECHOPAIR("\nDEFAULT_DUAL_X_CARRIAGE_MODE=", STRINGIFY(DEFAULT_DUAL_X_CARRIAGE_MODE));
143
-        DEBUG_ECHOPAIR("\toolchange_settings.z_raise=", toolchange_settings.z_raise);
144
-        DEBUG_ECHOPAIR("\nDEFAULT_DUPLICATION_X_OFFSET=", DEFAULT_DUPLICATION_X_OFFSET);
133
+        DEBUG_ECHOPGM("\nactive_extruder_x_pos: ", current_position.x);
134
+        DEBUG_ECHOPGM("\ninactive_extruder_x: ", inactive_extruder_x);
135
+        DEBUG_ECHOPGM("\nextruder_duplication_enabled: ", extruder_duplication_enabled);
136
+        DEBUG_ECHOPGM("\nduplicate_extruder_x_offset: ", duplicate_extruder_x_offset);
137
+        DEBUG_ECHOPGM("\nduplicate_extruder_temp_offset: ", duplicate_extruder_temp_offset);
138
+        DEBUG_ECHOPGM("\ndelayed_move_time: ", delayed_move_time);
139
+        DEBUG_ECHOPGM("\nX1 Home X: ", x_home_pos(0), "\nX1_MIN_POS=", X1_MIN_POS, "\nX1_MAX_POS=", X1_MAX_POS);
140
+        DEBUG_ECHOPGM("\nX2 Home X: ", x_home_pos(1), "\nX2_MIN_POS=", X2_MIN_POS, "\nX2_MAX_POS=", X2_MAX_POS);
141
+        DEBUG_ECHOPGM("\nX2_HOME_DIR=", X2_HOME_DIR, "\nX2_HOME_POS=", X2_HOME_POS);
142
+        DEBUG_ECHOPGM("\nDEFAULT_DUAL_X_CARRIAGE_MODE=", STRINGIFY(DEFAULT_DUAL_X_CARRIAGE_MODE));
143
+        DEBUG_ECHOPGM("\toolchange_settings.z_raise=", toolchange_settings.z_raise);
144
+        DEBUG_ECHOPGM("\nDEFAULT_DUPLICATION_X_OFFSET=", DEFAULT_DUPLICATION_X_OFFSET);
145 145
         DEBUG_EOL();
146 146
 
147 147
         HOTEND_LOOP() {
148
-          DEBUG_ECHOPAIR_P(SP_T_STR, e);
149
-          LOOP_LINEAR_AXES(a) DEBUG_ECHOPAIR("  hotend_offset[", e, "].", AS_CHAR(AXIS_CHAR(a) | 0x20), "=", hotend_offset[e][a]);
148
+          DEBUG_ECHOPGM_P(SP_T_STR, e);
149
+          LOOP_LINEAR_AXES(a) DEBUG_ECHOPGM("  hotend_offset[", e, "].", AS_CHAR(AXIS_CHAR(a) | 0x20), "=", hotend_offset[e][a]);
150 150
           DEBUG_EOL();
151 151
         }
152 152
         DEBUG_EOL();

+ 2
- 2
Marlin/src/gcode/control/M993_M994.cpp Целия файл

@@ -37,7 +37,7 @@ void GcodeSuite::M993() {
37 37
   char fname[] = "spiflash.bin";
38 38
   card.openFileWrite(fname);
39 39
   if (!card.isFileOpen()) {
40
-    SERIAL_ECHOLNPAIR("Failed to open ", fname, " to write.");
40
+    SERIAL_ECHOLNPGM("Failed to open ", fname, " to write.");
41 41
     return;
42 42
   }
43 43
 
@@ -65,7 +65,7 @@ void GcodeSuite::M994() {
65 65
   char fname[] = "spiflash.bin";
66 66
   card.openFileRead(fname);
67 67
   if (!card.isFileOpen()) {
68
-    SERIAL_ECHOLNPAIR("Failed to open ", fname, " to read.");
68
+    SERIAL_ECHOLNPGM("Failed to open ", fname, " to read.");
69 69
     return;
70 70
   }
71 71
 

+ 1
- 1
Marlin/src/gcode/control/T.cpp Целия файл

@@ -49,7 +49,7 @@
49 49
 void GcodeSuite::T(const int8_t tool_index) {
50 50
 
51 51
   DEBUG_SECTION(log_T, "T", DEBUGGING(LEVELING));
52
-  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPAIR("...(", tool_index, ")");
52
+  if (DEBUGGING(LEVELING)) DEBUG_ECHOLNPGM("...(", tool_index, ")");
53 53
 
54 54
   // Count this command as movement / activity
55 55
   reset_stepper_timeout();

+ 3
- 3
Marlin/src/gcode/eeprom/M500-M504.cpp Целия файл

@@ -75,14 +75,14 @@ void GcodeSuite::M502() {
75 75
         if (dowrite) {
76 76
           val = parser.byteval('V');
77 77
           persistentStore.write_data(addr, &val);
78
-          SERIAL_ECHOLNPAIR("Wrote address ", addr, " with ", val);
78
+          SERIAL_ECHOLNPGM("Wrote address ", addr, " with ", val);
79 79
         }
80 80
         else {
81 81
           if (parser.seenval('T')) {
82 82
             const int endaddr = parser.value_ushort();
83 83
             while (addr <= endaddr) {
84 84
               persistentStore.read_data(addr, &val);
85
-              SERIAL_ECHOLNPAIR("0x", hex_word(addr), ":", hex_byte(val));
85
+              SERIAL_ECHOLNPGM("0x", hex_word(addr), ":", hex_byte(val));
86 86
               addr++;
87 87
               safe_delay(10);
88 88
             }
@@ -90,7 +90,7 @@ void GcodeSuite::M502() {
90 90
           }
91 91
           else {
92 92
             persistentStore.read_data(addr, &val);
93
-            SERIAL_ECHOLNPAIR("Read address ", addr, " and got ", val);
93
+            SERIAL_ECHOLNPGM("Read address ", addr, " and got ", val);
94 94
           }
95 95
         }
96 96
         return;

+ 1
- 1
Marlin/src/gcode/feature/L6470/M122.cpp Целия файл

@@ -68,7 +68,7 @@ inline void L6470_say_status(const L64XX_axis_t axis) {
68 68
     if (!(sh.STATUS_AXIS & sh.STATUS_AXIS_WRONG_CMD)) SERIAL_ECHOPGM("IN");
69 69
     SERIAL_ECHOPGM("VALID    ");
70 70
     SERIAL_ECHOPGM_P(sh.STATUS_AXIS & sh.STATUS_AXIS_NOTPERF_CMD ?  PSTR("COMPLETED    ") : PSTR("Not PERFORMED"));
71
-    SERIAL_ECHOPAIR("\n...THERMAL: ", !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_SD) ? "SHUTDOWN       " : !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_WRN) ? "WARNING        " : "OK             ");
71
+    SERIAL_ECHOPGM("\n...THERMAL: ", !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_SD) ? "SHUTDOWN       " : !(sh.STATUS_AXIS & sh.STATUS_AXIS_TH_WRN) ? "WARNING        " : "OK             ");
72 72
   }
73 73
   SERIAL_ECHOPGM("   OVERCURRENT:"); echo_yes_no((sh.STATUS_AXIS & sh.STATUS_AXIS_OCD) == 0);
74 74
   if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) {

+ 6
- 6
Marlin/src/gcode/feature/L6470/M906.cpp Целия файл

@@ -63,7 +63,7 @@ void L64XX_report_current(L64XX &motor, const L64XX_axis_t axis) {
63 63
     #if ENABLED(L6470_CHITCHAT)
64 64
       char tmp[10];
65 65
       sprintf_P(tmp, PSTR("%4x   "), status);
66
-      DEBUG_ECHOPAIR("   status: ", tmp);
66
+      DEBUG_ECHOPGM("   status: ", tmp);
67 67
       print_bin(status);
68 68
     #else
69 69
       UNUSED(status);
@@ -104,13 +104,13 @@ void L64XX_report_current(L64XX &motor, const L64XX_axis_t axis) {
104 104
       }
105 105
       SERIAL_EOL();
106 106
 
107
-      SERIAL_ECHOPAIR("...MicroSteps: ", MicroSteps,
107
+      SERIAL_ECHOPGM("...MicroSteps: ", MicroSteps,
108 108
                       "   ADC_OUT: ", L6470_ADC_out);
109 109
       SERIAL_ECHOPGM("   Vs_compensation: ");
110 110
       SERIAL_ECHOPGM_P((motor.GetParam(sh.L6470_AXIS_CONFIG) & CONFIG_EN_VSCOMP) ? PSTR("ENABLED ") : PSTR("DISABLED"));
111
-      SERIAL_ECHOLNPAIR("   Compensation coefficient: ~", comp_coef * 0.01f);
111
+      SERIAL_ECHOLNPGM("   Compensation coefficient: ~", comp_coef * 0.01f);
112 112
 
113
-      SERIAL_ECHOPAIR("...KVAL_HOLD: ", motor.GetParam(L6470_KVAL_HOLD),
113
+      SERIAL_ECHOPGM("...KVAL_HOLD: ", motor.GetParam(L6470_KVAL_HOLD),
114 114
                       "   KVAL_RUN : ", motor.GetParam(L6470_KVAL_RUN),
115 115
                       "   KVAL_ACC: ", motor.GetParam(L6470_KVAL_ACC),
116 116
                       "   KVAL_DEC: ", motor.GetParam(L6470_KVAL_DEC),
@@ -168,7 +168,7 @@ void L64XX_report_current(L64XX &motor, const L64XX_axis_t axis) {
168 168
       SERIAL_ECHOLNPGM(" mA)   Motor Status: NA");
169 169
 
170 170
       const uint16_t MicroSteps = _BV(motor.GetParam(L6470_STEP_MODE) & 0x07); //NOMORE(MicroSteps, 16);
171
-      SERIAL_ECHOPAIR("...MicroSteps: ", MicroSteps,
171
+      SERIAL_ECHOPGM("...MicroSteps: ", MicroSteps,
172 172
                       "   ADC_OUT: ", L6470_ADC_out);
173 173
 
174 174
       SERIAL_ECHOLNPGM("   Vs_compensation: NA\n");
@@ -185,7 +185,7 @@ void L64XX_report_current(L64XX &motor, const L64XX_axis_t axis) {
185 185
           case 1:  DEBUG_ECHOLNPGM("75V/uS")  ; break;
186 186
           case 2:  DEBUG_ECHOLNPGM("110V/uS") ; break;
187 187
           case 3:  DEBUG_ECHOLNPGM("260V/uS") ; break;
188
-          default: DEBUG_ECHOLNPAIR("slew rate: ", (motor.GetParam(sh.L6470_AXIS_CONFIG) & CONFIG_POW_SR) >> CONFIG_POW_SR_BIT); break;
188
+          default: DEBUG_ECHOLNPGM("slew rate: ", (motor.GetParam(sh.L6470_AXIS_CONFIG) & CONFIG_POW_SR) >> CONFIG_POW_SR_BIT); break;
189 189
         }
190 190
       #endif
191 191
       SERIAL_EOL();

+ 14
- 14
Marlin/src/gcode/feature/L6470/M916-918.cpp Целия файл

@@ -96,7 +96,7 @@ void GcodeSuite::M916() {
96 96
   if (L64xxManager.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_feedrate, kval_hold, over_current_flag, OCD_TH_val, STALL_TH_val, over_current_threshold))
97 97
     return;  // quit if invalid user input
98 98
 
99
-  DEBUG_ECHOLNPAIR("feedrate = ", final_feedrate);
99
+  DEBUG_ECHOLNPGM("feedrate = ", final_feedrate);
100 100
 
101 101
   planner.synchronize();                             // wait for all current movement commands to complete
102 102
 
@@ -127,9 +127,9 @@ void GcodeSuite::M916() {
127 127
   do {
128 128
 
129 129
     if (sh.STATUS_AXIS_LAYOUT == L6474_STATUS_LAYOUT)
130
-      DEBUG_ECHOLNPAIR("TVAL current (mA) = ", (M91x_counter + 1) * sh.AXIS_STALL_CURRENT_CONSTANT_INV);        // report TVAL current for this run
130
+      DEBUG_ECHOLNPGM("TVAL current (mA) = ", (M91x_counter + 1) * sh.AXIS_STALL_CURRENT_CONSTANT_INV);        // report TVAL current for this run
131 131
     else
132
-      DEBUG_ECHOLNPAIR("kval_hold = ", M91x_counter);                                   // report KVAL_HOLD for this run
132
+      DEBUG_ECHOLNPGM("kval_hold = ", M91x_counter);                                   // report KVAL_HOLD for this run
133 133
 
134 134
     for (j = 0; j < driver_count; j++)
135 135
       L64xxManager.set_param(axis_index[j], L6470_KVAL_HOLD, M91x_counter);  //set KVAL_HOLD or TVAL (same register address)
@@ -236,7 +236,7 @@ void GcodeSuite::M917() {
236 236
   if (L64xxManager.get_user_input(driver_count, axis_index, axis_mon, position_max, position_min, final_feedrate, kval_hold, over_current_flag, OCD_TH_val, STALL_TH_val, over_current_threshold))
237 237
     return;  // quit if invalid user input
238 238
 
239
-  DEBUG_ECHOLNPAIR("feedrate = ", final_feedrate);
239
+  DEBUG_ECHOLNPGM("feedrate = ", final_feedrate);
240 240
 
241 241
   planner.synchronize();                             // wait for all current movement commands to complete
242 242
 
@@ -252,18 +252,18 @@ void GcodeSuite::M917() {
252 252
                                           // 2 - OCD finalized - decreasing STALL - exit when STALL warning happens
253 253
                                           // 3 - OCD finalized - increasing STALL - exit when STALL warning stop
254 254
                                           // 4 - all testing completed
255
-  DEBUG_ECHOPAIR(".\n.\n.\nover_current threshold : ", (OCD_TH_val + 1) * 375);   // first status display
256
-  DEBUG_ECHOPAIR("  (OCD_TH:  : ", OCD_TH_val);
255
+  DEBUG_ECHOPGM(".\n.\n.\nover_current threshold : ", (OCD_TH_val + 1) * 375);   // first status display
256
+  DEBUG_ECHOPGM("  (OCD_TH:  : ", OCD_TH_val);
257 257
   if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) {
258
-    DEBUG_ECHOPAIR(")   Stall threshold: ", (STALL_TH_val + 1) * 31.25);
259
-    DEBUG_ECHOPAIR("  (STALL_TH: ", STALL_TH_val);
258
+    DEBUG_ECHOPGM(")   Stall threshold: ", (STALL_TH_val + 1) * 31.25);
259
+    DEBUG_ECHOPGM("  (STALL_TH: ", STALL_TH_val);
260 260
   }
261 261
   DEBUG_ECHOLNPGM(")");
262 262
 
263 263
   do {
264 264
 
265
-    if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) DEBUG_ECHOPAIR("STALL threshold : ", (STALL_TH_val + 1) * 31.25);
266
-    DEBUG_ECHOLNPAIR("   OCD threshold : ", (OCD_TH_val + 1) * 375);
265
+    if (sh.STATUS_AXIS_LAYOUT != L6474_STATUS_LAYOUT) DEBUG_ECHOPGM("STALL threshold : ", (STALL_TH_val + 1) * 31.25);
266
+    DEBUG_ECHOLNPGM("   OCD threshold : ", (OCD_TH_val + 1) * 375);
267 267
 
268 268
     sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_min), uint16_t(final_feedrate));
269 269
     gcode.process_subcommands_now_P(gcode_string);
@@ -303,7 +303,7 @@ void GcodeSuite::M917() {
303 303
         if (!(k % 4)) {
304 304
           kval_hold *= 0.95;
305 305
           DEBUG_EOL();
306
-          DEBUG_ECHOLNPAIR("Lowering KVAL_HOLD by about 5% to ", kval_hold);
306
+          DEBUG_ECHOLNPGM("Lowering KVAL_HOLD by about 5% to ", kval_hold);
307 307
           for (j = 0; j < driver_count; j++)
308 308
             L64xxManager.set_param(axis_index[j], L6470_KVAL_HOLD, kval_hold);
309 309
         }
@@ -590,8 +590,8 @@ void GcodeSuite::M918() {
590 590
   }
591 591
   m_steps = L64xxManager.get_param(axis_index[0], L6470_STEP_MODE) & 0x07;   // get microsteps
592 592
 
593
-  DEBUG_ECHOLNPAIR("Microsteps = ", _BV(m_steps));
594
-  DEBUG_ECHOLNPAIR("target (maximum) feedrate = ", final_feedrate);
593
+  DEBUG_ECHOLNPGM("Microsteps = ", _BV(m_steps));
594
+  DEBUG_ECHOLNPGM("target (maximum) feedrate = ", final_feedrate);
595 595
 
596 596
   const float feedrate_inc = final_feedrate / 10,   // Start at 1/10 of max & go up by 1/10 per step
597 597
               fr_limit = final_feedrate * 0.99f;    // Rounding-safe comparison value
@@ -612,7 +612,7 @@ void GcodeSuite::M918() {
612 612
 
613 613
   do {
614 614
     current_feedrate += feedrate_inc;
615
-    DEBUG_ECHOLNPAIR("...feedrate = ", current_feedrate);
615
+    DEBUG_ECHOLNPGM("...feedrate = ", current_feedrate);
616 616
 
617 617
     sprintf_P(gcode_string, PSTR("G0 %s%03d F%03d"), temp_axis_string, uint16_t(position_min), uint16_t(current_feedrate));
618 618
     gcode.process_subcommands_now_P(gcode_string);

+ 5
- 5
Marlin/src/gcode/feature/advance/M900.cpp Целия файл

@@ -115,11 +115,11 @@ void GcodeSuite::M900() {
115 115
     #if ENABLED(EXTRA_LIN_ADVANCE_K)
116 116
 
117 117
       #if EXTRUDERS < 2
118
-        SERIAL_ECHOLNPAIR("Advance S", new_slot, " K", kref, "(S", !new_slot, " K", lref, ")");
118
+        SERIAL_ECHOLNPGM("Advance S", new_slot, " K", kref, "(S", !new_slot, " K", lref, ")");
119 119
       #else
120 120
         LOOP_L_N(i, EXTRUDERS) {
121 121
           const bool slot = TEST(lin_adv_slot, i);
122
-          SERIAL_ECHOLNPAIR("Advance T", i, " S", slot, " K", planner.extruder_advance_K[i],
122
+          SERIAL_ECHOLNPGM("Advance T", i, " S", slot, " K", planner.extruder_advance_K[i],
123 123
                             "(S", !slot, " K", other_extruder_advance_K[i], ")");
124 124
           SERIAL_EOL();
125 125
         }
@@ -129,7 +129,7 @@ void GcodeSuite::M900() {
129 129
 
130 130
       SERIAL_ECHO_START();
131 131
       #if EXTRUDERS < 2
132
-        SERIAL_ECHOLNPAIR("Advance K=", planner.extruder_advance_K[0]);
132
+        SERIAL_ECHOLNPGM("Advance K=", planner.extruder_advance_K[0]);
133 133
       #else
134 134
         SERIAL_ECHOPGM("Advance K");
135 135
         LOOP_L_N(i, EXTRUDERS) {
@@ -148,11 +148,11 @@ void GcodeSuite::M900_report(const bool forReplay/*=true*/) {
148 148
   report_heading(forReplay, PSTR(STR_LINEAR_ADVANCE));
149 149
   #if EXTRUDERS < 2
150 150
     report_echo_start(forReplay);
151
-    SERIAL_ECHOLNPAIR("  M900 K", planner.extruder_advance_K[0]);
151
+    SERIAL_ECHOLNPGM("  M900 K", planner.extruder_advance_K[0]);
152 152
   #else
153 153
     LOOP_L_N(i, EXTRUDERS) {
154 154
       report_echo_start(forReplay);
155
-      SERIAL_ECHOLNPAIR("  M900 T", i, " K", planner.extruder_advance_K[i]);
155
+      SERIAL_ECHOLNPGM("  M900 T", i, " K", planner.extruder_advance_K[i]);
156 156
     }
157 157
   #endif
158 158
 }

+ 1
- 1
Marlin/src/gcode/feature/controllerfan/M710.cpp Целия файл

@@ -68,7 +68,7 @@ void GcodeSuite::M710() {
68 68
 
69 69
 void GcodeSuite::M710_report(const bool forReplay/*=true*/) {
70 70
   report_heading_etc(forReplay, PSTR(STR_CONTROLLER_FAN));
71
-  SERIAL_ECHOLNPAIR("  M710"
71
+  SERIAL_ECHOLNPGM("  M710"
72 72
     " S", int(controllerFan.settings.active_speed),
73 73
     " I", int(controllerFan.settings.idle_speed),
74 74
     " A", int(controllerFan.settings.auto_mode),

+ 1
- 1
Marlin/src/gcode/feature/digipot/M907-M910.cpp Целия файл

@@ -102,7 +102,7 @@ void GcodeSuite::M907() {
102 102
   void GcodeSuite::M907_report(const bool forReplay/*=true*/) {
103 103
     report_heading_etc(forReplay, PSTR(STR_STEPPER_MOTOR_CURRENTS));
104 104
     #if HAS_MOTOR_CURRENT_PWM
105
-      SERIAL_ECHOLNPAIR_P(                                    // PWM-based has 3 values:
105
+      SERIAL_ECHOLNPGM_P(                                    // PWM-based has 3 values:
106 106
           PSTR("  M907 X"), stepper.motor_current_setting[0]  // X and Y
107 107
         , SP_Z_STR,         stepper.motor_current_setting[1]  // Z
108 108
         , SP_E_STR,         stepper.motor_current_setting[2]  // E

+ 2
- 2
Marlin/src/gcode/feature/filwidth/M404-M407.cpp Целия файл

@@ -38,7 +38,7 @@ void GcodeSuite::M404() {
38 38
     planner.volumetric_area_nominal = CIRCLE_AREA(filwidth.nominal_mm * 0.5);
39 39
   }
40 40
   else
41
-    SERIAL_ECHOLNPAIR("Filament dia (nominal mm):", filwidth.nominal_mm);
41
+    SERIAL_ECHOLNPGM("Filament dia (nominal mm):", filwidth.nominal_mm);
42 42
 }
43 43
 
44 44
 /**
@@ -65,7 +65,7 @@ void GcodeSuite::M406() {
65 65
  * M407: Get measured filament diameter on serial output
66 66
  */
67 67
 void GcodeSuite::M407() {
68
-  SERIAL_ECHOLNPAIR("Filament dia (measured mm):", filwidth.measured_mm);
68
+  SERIAL_ECHOLNPGM("Filament dia (measured mm):", filwidth.measured_mm);
69 69
 }
70 70
 
71 71
 #endif // FILAMENT_WIDTH_SENSOR

+ 3
- 3
Marlin/src/gcode/feature/mixing/M166.cpp Целия файл

@@ -30,12 +30,12 @@
30 30
 #include "../../../feature/mixing.h"
31 31
 
32 32
 inline void echo_mix() {
33
-  SERIAL_ECHOPAIR(" (", mixer.mix[0], "%|", mixer.mix[1], "%)");
33
+  SERIAL_ECHOPGM(" (", mixer.mix[0], "%|", mixer.mix[1], "%)");
34 34
 }
35 35
 
36 36
 inline void echo_zt(const int t, const_float_t z) {
37 37
   mixer.update_mix_from_vtool(t);
38
-  SERIAL_ECHOPAIR_P(SP_Z_STR, z, SP_T_STR, t);
38
+  SERIAL_ECHOPGM_P(SP_Z_STR, z, SP_T_STR, t);
39 39
   echo_mix();
40 40
 }
41 41
 
@@ -74,7 +74,7 @@ void GcodeSuite::M166() {
74 74
 
75 75
     #if ENABLED(GRADIENT_VTOOL)
76 76
       if (mixer.gradient.vtool_index >= 0) {
77
-        SERIAL_ECHOPAIR(" (T", mixer.gradient.vtool_index);
77
+        SERIAL_ECHOPGM(" (T", mixer.gradient.vtool_index);
78 78
         SERIAL_CHAR(')');
79 79
       }
80 80
     #endif

+ 1
- 1
Marlin/src/gcode/feature/password/M510-M512.cpp Целия файл

@@ -66,7 +66,7 @@ void GcodeSuite::M510() {
66 66
       if (password.value_entry < CAT(1e, PASSWORD_LENGTH)) {
67 67
         password.is_set = true;
68 68
         password.value = password.value_entry;
69
-        SERIAL_ECHOLNPAIR(STR_PASSWORD_SET, password.value); // TODO: Update password.string
69
+        SERIAL_ECHOLNPGM(STR_PASSWORD_SET, password.value); // TODO: Update password.string
70 70
       }
71 71
       else
72 72
         SERIAL_ECHOLNPGM(STR_PASSWORD_TOO_LONG);

+ 1
- 1
Marlin/src/gcode/feature/pause/G60.cpp Целия файл

@@ -47,7 +47,7 @@ void GcodeSuite::G60() {
47 47
   SBI(saved_slots[slot >> 3], slot & 0x07);
48 48
 
49 49
   #if ENABLED(SAVED_POSITIONS_DEBUG)
50
-    DEBUG_ECHOPAIR(STR_SAVED_POS " S", slot);
50
+    DEBUG_ECHOPGM(STR_SAVED_POS " S", slot);
51 51
     const xyze_pos_t &pos = stored_position[slot];
52 52
     DEBUG_ECHOLNPAIR_F_P(
53 53
       LIST_N(DOUBLE(LOGICAL_AXES), SP_E_STR, pos.e,

+ 2
- 2
Marlin/src/gcode/feature/pause/G61.cpp Целия файл

@@ -69,7 +69,7 @@ void GcodeSuite::G61(void) {
69 69
   }
70 70
   else {
71 71
     if (parser.seen(LINEAR_AXIS_GANG("X", "Y", "Z", AXIS4_STR, AXIS5_STR, AXIS6_STR))) {
72
-      DEBUG_ECHOPAIR(STR_RESTORING_POS " S", slot);
72
+      DEBUG_ECHOPGM(STR_RESTORING_POS " S", slot);
73 73
       LOOP_LINEAR_AXES(i) {
74 74
         destination[i] = parser.seen(AXIS_CHAR(i))
75 75
           ? stored_position[slot][i] + parser.value_axis_units((AxisEnum)i)
@@ -83,7 +83,7 @@ void GcodeSuite::G61(void) {
83 83
     }
84 84
     #if HAS_EXTRUDERS
85 85
       if (parser.seen_test('E')) {
86
-        DEBUG_ECHOLNPAIR(STR_RESTORING_POS " S", slot, " E", current_position.e, "=>", stored_position[slot].e);
86
+        DEBUG_ECHOLNPGM(STR_RESTORING_POS " S", slot, " E", current_position.e, "=>", stored_position[slot].e);
87 87
         SYNC_E(stored_position[slot].e);
88 88
       }
89 89
     #endif

+ 2
- 2
Marlin/src/gcode/feature/pause/M603.cpp Целия файл

@@ -69,12 +69,12 @@ void GcodeSuite::M603_report(const bool forReplay/*=true*/) {
69 69
 
70 70
   #if EXTRUDERS == 1
71 71
     report_echo_start(forReplay);
72
-    SERIAL_ECHOPAIR("  M603 L", LINEAR_UNIT(fc_settings[0].load_length), " U", LINEAR_UNIT(fc_settings[0].unload_length), " ;");
72
+    SERIAL_ECHOPGM("  M603 L", LINEAR_UNIT(fc_settings[0].load_length), " U", LINEAR_UNIT(fc_settings[0].unload_length), " ;");
73 73
     say_units();
74 74
   #else
75 75
     LOOP_L_N(e, EXTRUDERS) {
76 76
       report_echo_start(forReplay);
77
-      SERIAL_ECHOPAIR("  M603 T", e, " L", LINEAR_UNIT(fc_settings[e].load_length), " U", LINEAR_UNIT(fc_settings[e].unload_length), " ;");
77
+      SERIAL_ECHOPGM("  M603 T", e, " L", LINEAR_UNIT(fc_settings[e].load_length), " U", LINEAR_UNIT(fc_settings[e].unload_length), " ;");
78 78
       say_units();
79 79
     }
80 80
   #endif

+ 1
- 1
Marlin/src/gcode/feature/power_monitor/M430.cpp Целия файл

@@ -50,7 +50,7 @@ void GcodeSuite::M430() {
50 50
     #endif
51 51
   #endif
52 52
   if (do_report) {
53
-    SERIAL_ECHOLNPAIR(
53
+    SERIAL_ECHOLNPGM(
54 54
       #if ENABLED(POWER_MONITOR_CURRENT)
55 55
         "Current: ", power_monitor.getAmps(), "A"
56 56
         #if ENABLED(POWER_MONITOR_VOLTAGE)

+ 1
- 1
Marlin/src/gcode/feature/powerloss/M413.cpp Целия файл

@@ -58,7 +58,7 @@ void GcodeSuite::M413() {
58 58
 
59 59
 void GcodeSuite::M413_report(const bool forReplay/*=true*/) {
60 60
   report_heading_etc(forReplay, PSTR(STR_POWER_LOSS_RECOVERY));
61
-  SERIAL_ECHOPAIR("  M413 S", AS_DIGIT(recovery.enabled), " ; ");
61
+  SERIAL_ECHOPGM("  M413 S", AS_DIGIT(recovery.enabled), " ; ");
62 62
   serialprintln_onoff(recovery.enabled);
63 63
 }
64 64
 

+ 2
- 2
Marlin/src/gcode/feature/runout/M412.cpp Целия файл

@@ -56,7 +56,7 @@ void GcodeSuite::M412() {
56 56
     SERIAL_ECHOPGM("Filament runout ");
57 57
     serialprint_onoff(runout.enabled);
58 58
     #if HAS_FILAMENT_RUNOUT_DISTANCE
59
-      SERIAL_ECHOPAIR(" ; Distance ", runout.runout_distance(), "mm");
59
+      SERIAL_ECHOPGM(" ; Distance ", runout.runout_distance(), "mm");
60 60
     #endif
61 61
     #if ENABLED(HOST_ACTION_COMMANDS)
62 62
       SERIAL_ECHOPGM(" ; Host handling ");
@@ -68,7 +68,7 @@ void GcodeSuite::M412() {
68 68
 
69 69
 void GcodeSuite::M412_report(const bool forReplay/*=true*/) {
70 70
   report_heading_etc(forReplay, PSTR(STR_FILAMENT_RUNOUT_SENSOR));
71
-  SERIAL_ECHOLNPAIR(
71
+  SERIAL_ECHOLNPGM(
72 72
     "  M412 S", runout.enabled
73 73
     #if HAS_FILAMENT_RUNOUT_DISTANCE
74 74
       , " D", LINEAR_UNIT(runout.runout_distance())

+ 19
- 19
Marlin/src/gcode/feature/trinamic/M906.cpp Целия файл

@@ -209,13 +209,13 @@ void GcodeSuite::M906_report(const bool forReplay/*=true*/) {
209 209
   #if AXIS_IS_TMC(X) || AXIS_IS_TMC(Y) || AXIS_IS_TMC(Z)
210 210
     say_M906(forReplay);
211 211
     #if AXIS_IS_TMC(X)
212
-      SERIAL_ECHOPAIR_P(SP_X_STR, stepperX.getMilliamps());
212
+      SERIAL_ECHOPGM_P(SP_X_STR, stepperX.getMilliamps());
213 213
     #endif
214 214
     #if AXIS_IS_TMC(Y)
215
-      SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY.getMilliamps());
215
+      SERIAL_ECHOPGM_P(SP_Y_STR, stepperY.getMilliamps());
216 216
     #endif
217 217
     #if AXIS_IS_TMC(Z)
218
-      SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ.getMilliamps());
218
+      SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ.getMilliamps());
219 219
     #endif
220 220
     SERIAL_EOL();
221 221
   #endif
@@ -224,71 +224,71 @@ void GcodeSuite::M906_report(const bool forReplay/*=true*/) {
224 224
     say_M906(forReplay);
225 225
     SERIAL_ECHOPGM(" I1");
226 226
     #if AXIS_IS_TMC(X2)
227
-      SERIAL_ECHOPAIR_P(SP_X_STR, stepperX2.getMilliamps());
227
+      SERIAL_ECHOPGM_P(SP_X_STR, stepperX2.getMilliamps());
228 228
     #endif
229 229
     #if AXIS_IS_TMC(Y2)
230
-      SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY2.getMilliamps());
230
+      SERIAL_ECHOPGM_P(SP_Y_STR, stepperY2.getMilliamps());
231 231
     #endif
232 232
     #if AXIS_IS_TMC(Z2)
233
-      SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ2.getMilliamps());
233
+      SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ2.getMilliamps());
234 234
     #endif
235 235
     SERIAL_EOL();
236 236
   #endif
237 237
 
238 238
   #if AXIS_IS_TMC(Z3)
239 239
     say_M906(forReplay);
240
-    SERIAL_ECHOLNPAIR(" I2 Z", stepperZ3.getMilliamps());
240
+    SERIAL_ECHOLNPGM(" I2 Z", stepperZ3.getMilliamps());
241 241
   #endif
242 242
 
243 243
   #if AXIS_IS_TMC(Z4)
244 244
     say_M906(forReplay);
245
-    SERIAL_ECHOLNPAIR(" I3 Z", stepperZ4.getMilliamps());
245
+    SERIAL_ECHOLNPGM(" I3 Z", stepperZ4.getMilliamps());
246 246
   #endif
247 247
 
248 248
   #if AXIS_IS_TMC(I)
249 249
     say_M906(forReplay);
250
-    SERIAL_ECHOLNPAIR_P(SP_I_STR, stepperI.getMilliamps());
250
+    SERIAL_ECHOLNPGM_P(SP_I_STR, stepperI.getMilliamps());
251 251
   #endif
252 252
   #if AXIS_IS_TMC(J)
253 253
     say_M906(forReplay);
254
-    SERIAL_ECHOLNPAIR_P(SP_J_STR, stepperJ.getMilliamps());
254
+    SERIAL_ECHOLNPGM_P(SP_J_STR, stepperJ.getMilliamps());
255 255
   #endif
256 256
   #if AXIS_IS_TMC(K)
257 257
     say_M906(forReplay);
258
-    SERIAL_ECHOLNPAIR_P(SP_K_STR, stepperK.getMilliamps());
258
+    SERIAL_ECHOLNPGM_P(SP_K_STR, stepperK.getMilliamps());
259 259
   #endif
260 260
 
261 261
   #if AXIS_IS_TMC(E0)
262 262
     say_M906(forReplay);
263
-    SERIAL_ECHOLNPAIR(" T0 E", stepperE0.getMilliamps());
263
+    SERIAL_ECHOLNPGM(" T0 E", stepperE0.getMilliamps());
264 264
   #endif
265 265
   #if AXIS_IS_TMC(E1)
266 266
     say_M906(forReplay);
267
-    SERIAL_ECHOLNPAIR(" T1 E", stepperE1.getMilliamps());
267
+    SERIAL_ECHOLNPGM(" T1 E", stepperE1.getMilliamps());
268 268
   #endif
269 269
   #if AXIS_IS_TMC(E2)
270 270
     say_M906(forReplay);
271
-    SERIAL_ECHOLNPAIR(" T2 E", stepperE2.getMilliamps());
271
+    SERIAL_ECHOLNPGM(" T2 E", stepperE2.getMilliamps());
272 272
   #endif
273 273
   #if AXIS_IS_TMC(E3)
274 274
     say_M906(forReplay);
275
-    SERIAL_ECHOLNPAIR(" T3 E", stepperE3.getMilliamps());
275
+    SERIAL_ECHOLNPGM(" T3 E", stepperE3.getMilliamps());
276 276
   #endif
277 277
   #if AXIS_IS_TMC(E4)
278 278
     say_M906(forReplay);
279
-    SERIAL_ECHOLNPAIR(" T4 E", stepperE4.getMilliamps());
279
+    SERIAL_ECHOLNPGM(" T4 E", stepperE4.getMilliamps());
280 280
   #endif
281 281
   #if AXIS_IS_TMC(E5)
282 282
     say_M906(forReplay);
283
-    SERIAL_ECHOLNPAIR(" T5 E", stepperE5.getMilliamps());
283
+    SERIAL_ECHOLNPGM(" T5 E", stepperE5.getMilliamps());
284 284
   #endif
285 285
   #if AXIS_IS_TMC(E6)
286 286
     say_M906(forReplay);
287
-    SERIAL_ECHOLNPAIR(" T6 E", stepperE6.getMilliamps());
287
+    SERIAL_ECHOLNPGM(" T6 E", stepperE6.getMilliamps());
288 288
   #endif
289 289
   #if AXIS_IS_TMC(E7)
290 290
     say_M906(forReplay);
291
-    SERIAL_ECHOLNPAIR(" T7 E", stepperE7.getMilliamps());
291
+    SERIAL_ECHOLNPGM(" T7 E", stepperE7.getMilliamps());
292 292
   #endif
293 293
   SERIAL_EOL();
294 294
 }

+ 30
- 30
Marlin/src/gcode/feature/trinamic/M911-M914.cpp Целия файл

@@ -321,13 +321,13 @@
321 321
     #if X_HAS_STEALTHCHOP || Y_HAS_STEALTHCHOP || Z_HAS_STEALTHCHOP
322 322
       say_M913(forReplay);
323 323
       #if X_HAS_STEALTHCHOP
324
-        SERIAL_ECHOPAIR_P(SP_X_STR, stepperX.get_pwm_thrs());
324
+        SERIAL_ECHOPGM_P(SP_X_STR, stepperX.get_pwm_thrs());
325 325
       #endif
326 326
       #if Y_HAS_STEALTHCHOP
327
-        SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY.get_pwm_thrs());
327
+        SERIAL_ECHOPGM_P(SP_Y_STR, stepperY.get_pwm_thrs());
328 328
       #endif
329 329
       #if Z_HAS_STEALTHCHOP
330
-        SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ.get_pwm_thrs());
330
+        SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ.get_pwm_thrs());
331 331
       #endif
332 332
       SERIAL_EOL();
333 333
     #endif
@@ -336,71 +336,71 @@
336 336
       say_M913(forReplay);
337 337
       SERIAL_ECHOPGM(" I1");
338 338
       #if X2_HAS_STEALTHCHOP
339
-        SERIAL_ECHOPAIR_P(SP_X_STR, stepperX2.get_pwm_thrs());
339
+        SERIAL_ECHOPGM_P(SP_X_STR, stepperX2.get_pwm_thrs());
340 340
       #endif
341 341
       #if Y2_HAS_STEALTHCHOP
342
-        SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY2.get_pwm_thrs());
342
+        SERIAL_ECHOPGM_P(SP_Y_STR, stepperY2.get_pwm_thrs());
343 343
       #endif
344 344
       #if Z2_HAS_STEALTHCHOP
345
-        SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ2.get_pwm_thrs());
345
+        SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ2.get_pwm_thrs());
346 346
       #endif
347 347
       SERIAL_EOL();
348 348
     #endif
349 349
 
350 350
     #if Z3_HAS_STEALTHCHOP
351 351
       say_M913(forReplay);
352
-      SERIAL_ECHOLNPAIR(" I2 Z", stepperZ3.get_pwm_thrs());
352
+      SERIAL_ECHOLNPGM(" I2 Z", stepperZ3.get_pwm_thrs());
353 353
     #endif
354 354
 
355 355
     #if Z4_HAS_STEALTHCHOP
356 356
       say_M913(forReplay);
357
-      SERIAL_ECHOLNPAIR(" I3 Z", stepperZ4.get_pwm_thrs());
357
+      SERIAL_ECHOLNPGM(" I3 Z", stepperZ4.get_pwm_thrs());
358 358
     #endif
359 359
 
360 360
     #if I_HAS_STEALTHCHOP
361 361
       say_M913(forReplay);
362
-      SERIAL_ECHOLNPAIR_P(SP_I_STR, stepperI.get_pwm_thrs());
362
+      SERIAL_ECHOLNPGM_P(SP_I_STR, stepperI.get_pwm_thrs());
363 363
     #endif
364 364
     #if J_HAS_STEALTHCHOP
365 365
       say_M913(forReplay);
366
-      SERIAL_ECHOLNPAIR_P(SP_J_STR, stepperJ.get_pwm_thrs());
366
+      SERIAL_ECHOLNPGM_P(SP_J_STR, stepperJ.get_pwm_thrs());
367 367
     #endif
368 368
     #if K_HAS_STEALTHCHOP
369 369
       say_M913(forReplay);
370
-      SERIAL_ECHOLNPAIR_P(SP_K_STR, stepperK.get_pwm_thrs());
370
+      SERIAL_ECHOLNPGM_P(SP_K_STR, stepperK.get_pwm_thrs());
371 371
     #endif
372 372
 
373 373
     #if E0_HAS_STEALTHCHOP
374 374
       say_M913(forReplay);
375
-      SERIAL_ECHOLNPAIR(" T0 E", stepperE0.get_pwm_thrs());
375
+      SERIAL_ECHOLNPGM(" T0 E", stepperE0.get_pwm_thrs());
376 376
     #endif
377 377
     #if E1_HAS_STEALTHCHOP
378 378
       say_M913(forReplay);
379
-      SERIAL_ECHOLNPAIR(" T1 E", stepperE1.get_pwm_thrs());
379
+      SERIAL_ECHOLNPGM(" T1 E", stepperE1.get_pwm_thrs());
380 380
     #endif
381 381
     #if E2_HAS_STEALTHCHOP
382 382
       say_M913(forReplay);
383
-      SERIAL_ECHOLNPAIR(" T2 E", stepperE2.get_pwm_thrs());
383
+      SERIAL_ECHOLNPGM(" T2 E", stepperE2.get_pwm_thrs());
384 384
     #endif
385 385
     #if E3_HAS_STEALTHCHOP
386 386
       say_M913(forReplay);
387
-      SERIAL_ECHOLNPAIR(" T3 E", stepperE3.get_pwm_thrs());
387
+      SERIAL_ECHOLNPGM(" T3 E", stepperE3.get_pwm_thrs());
388 388
     #endif
389 389
     #if E4_HAS_STEALTHCHOP
390 390
       say_M913(forReplay);
391
-      SERIAL_ECHOLNPAIR(" T4 E", stepperE4.get_pwm_thrs());
391
+      SERIAL_ECHOLNPGM(" T4 E", stepperE4.get_pwm_thrs());
392 392
     #endif
393 393
     #if E5_HAS_STEALTHCHOP
394 394
       say_M913(forReplay);
395
-      SERIAL_ECHOLNPAIR(" T5 E", stepperE5.get_pwm_thrs());
395
+      SERIAL_ECHOLNPGM(" T5 E", stepperE5.get_pwm_thrs());
396 396
     #endif
397 397
     #if E6_HAS_STEALTHCHOP
398 398
       say_M913(forReplay);
399
-      SERIAL_ECHOLNPAIR(" T6 E", stepperE6.get_pwm_thrs());
399
+      SERIAL_ECHOLNPGM(" T6 E", stepperE6.get_pwm_thrs());
400 400
     #endif
401 401
     #if E7_HAS_STEALTHCHOP
402 402
       say_M913(forReplay);
403
-      SERIAL_ECHOLNPAIR(" T7 E", stepperE7.get_pwm_thrs());
403
+      SERIAL_ECHOLNPGM(" T7 E", stepperE7.get_pwm_thrs());
404 404
     #endif
405 405
     SERIAL_EOL();
406 406
   }
@@ -522,13 +522,13 @@
522 522
     #if X_SENSORLESS || Y_SENSORLESS || Z_SENSORLESS
523 523
       say_M914(forReplay);
524 524
       #if X_SENSORLESS
525
-        SERIAL_ECHOPAIR_P(SP_X_STR, stepperX.homing_threshold());
525
+        SERIAL_ECHOPGM_P(SP_X_STR, stepperX.homing_threshold());
526 526
       #endif
527 527
       #if Y_SENSORLESS
528
-        SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY.homing_threshold());
528
+        SERIAL_ECHOPGM_P(SP_Y_STR, stepperY.homing_threshold());
529 529
       #endif
530 530
       #if Z_SENSORLESS
531
-        SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ.homing_threshold());
531
+        SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ.homing_threshold());
532 532
       #endif
533 533
       SERIAL_EOL();
534 534
     #endif
@@ -537,38 +537,38 @@
537 537
       say_M914(forReplay);
538 538
       SERIAL_ECHOPGM(" I1");
539 539
       #if X2_SENSORLESS
540
-        SERIAL_ECHOPAIR_P(SP_X_STR, stepperX2.homing_threshold());
540
+        SERIAL_ECHOPGM_P(SP_X_STR, stepperX2.homing_threshold());
541 541
       #endif
542 542
       #if Y2_SENSORLESS
543
-        SERIAL_ECHOPAIR_P(SP_Y_STR, stepperY2.homing_threshold());
543
+        SERIAL_ECHOPGM_P(SP_Y_STR, stepperY2.homing_threshold());
544 544
       #endif
545 545
       #if Z2_SENSORLESS
546
-        SERIAL_ECHOPAIR_P(SP_Z_STR, stepperZ2.homing_threshold());
546
+        SERIAL_ECHOPGM_P(SP_Z_STR, stepperZ2.homing_threshold());
547 547
       #endif
548 548
       SERIAL_EOL();
549 549
     #endif
550 550
 
551 551
     #if Z3_SENSORLESS
552 552
       say_M914(forReplay);
553
-      SERIAL_ECHOLNPAIR(" I2 Z", stepperZ3.homing_threshold());
553
+      SERIAL_ECHOLNPGM(" I2 Z", stepperZ3.homing_threshold());
554 554
     #endif
555 555
 
556 556
     #if Z4_SENSORLESS
557 557
       say_M914(forReplay);
558
-      SERIAL_ECHOLNPAIR(" I3 Z", stepperZ4.homing_threshold());
558
+      SERIAL_ECHOLNPGM(" I3 Z", stepperZ4.homing_threshold());
559 559
     #endif
560 560
 
561 561
     #if I_SENSORLESS
562 562
       say_M914(forReplay);
563
-      SERIAL_ECHOLNPAIR_P(SP_I_STR, stepperI.homing_threshold());
563
+      SERIAL_ECHOLNPGM_P(SP_I_STR, stepperI.homing_threshold());
564 564
     #endif
565 565
     #if J_SENSORLESS
566 566
       say_M914(forReplay);
567
-      SERIAL_ECHOLNPAIR_P(SP_J_STR, stepperJ.homing_threshold());
567
+      SERIAL_ECHOLNPGM_P(SP_J_STR, stepperJ.homing_threshold());
568 568
     #endif
569 569
     #if K_SENSORLESS
570 570
       say_M914(forReplay);
571
-      SERIAL_ECHOLNPAIR_P(SP_K_STR, stepperK.homing_threshold());
571
+      SERIAL_ECHOLNPGM_P(SP_K_STR, stepperK.homing_threshold());
572 572
     #endif
573 573
   }
574 574
 

+ 3
- 3
Marlin/src/gcode/gcode.cpp Целия файл

@@ -130,7 +130,7 @@ int8_t GcodeSuite::get_target_extruder_from_command() {
130 130
     if (e < EXTRUDERS) return e;
131 131
     SERIAL_ECHO_START();
132 132
     SERIAL_CHAR('M'); SERIAL_ECHO(parser.codenum);
133
-    SERIAL_ECHOLNPAIR(" " STR_INVALID_EXTRUDER " ", e);
133
+    SERIAL_ECHOLNPGM(" " STR_INVALID_EXTRUDER " ", e);
134 134
     return -1;
135 135
   }
136 136
   return active_extruder;
@@ -149,7 +149,7 @@ int8_t GcodeSuite::get_target_e_stepper_from_command() {
149 149
   if (e == -1)
150 150
     SERIAL_ECHOLNPGM(" " STR_E_STEPPER_NOT_SPECIFIED);
151 151
   else
152
-    SERIAL_ECHOLNPAIR(" " STR_INVALID_E_STEPPER " ", e);
152
+    SERIAL_ECHOLNPGM(" " STR_INVALID_E_STEPPER " ", e);
153 153
   return -1;
154 154
 }
155 155
 
@@ -1082,7 +1082,7 @@ void GcodeSuite::process_next_command() {
1082 1082
     SERIAL_ECHO_START();
1083 1083
     SERIAL_ECHOLN(command.buffer);
1084 1084
     #if ENABLED(M100_FREE_MEMORY_DUMPER)
1085
-      SERIAL_ECHOPAIR("slot:", queue.ring_buffer.index_r);
1085
+      SERIAL_ECHOPGM("slot:", queue.ring_buffer.index_r);
1086 1086
       M100_dump_routine(PSTR("   Command Queue:"), (const char*)&queue.ring_buffer, sizeof(queue.ring_buffer));
1087 1087
     #endif
1088 1088
   }

+ 3
- 3
Marlin/src/gcode/gcode_d.cpp Целия файл

@@ -179,7 +179,7 @@ void GcodeSuite::D(const int16_t dcode) {
179 179
       break;
180 180
 
181 181
     case 7: // D7 dump the current serial port type (hence configuration)
182
-      SERIAL_ECHOLNPAIR("Current serial configuration RX_BS:", RX_BUFFER_SIZE, ", TX_BS:", TX_BUFFER_SIZE);
182
+      SERIAL_ECHOLNPGM("Current serial configuration RX_BS:", RX_BUFFER_SIZE, ", TX_BS:", TX_BUFFER_SIZE);
183 183
       SERIAL_ECHOLN(gtn(&SERIAL_IMPL));
184 184
       break;
185 185
 
@@ -202,7 +202,7 @@ void GcodeSuite::D(const int16_t dcode) {
202 202
       case 101: { // D101 Test SD Write
203 203
         card.openFileWrite("test.gco");
204 204
         if (!card.isFileOpen()) {
205
-          SERIAL_ECHOLNPAIR("Failed to open test.gco to write.");
205
+          SERIAL_ECHOLNPGM("Failed to open test.gco to write.");
206 206
           return;
207 207
         }
208 208
         __attribute__((aligned(sizeof(size_t)))) uint8_t buf[512];
@@ -224,7 +224,7 @@ void GcodeSuite::D(const int16_t dcode) {
224 224
         char testfile[] = "test.gco";
225 225
         card.openFileRead(testfile);
226 226
         if (!card.isFileOpen()) {
227
-          SERIAL_ECHOLNPAIR("Failed to open test.gco to read.");
227
+          SERIAL_ECHOLNPGM("Failed to open test.gco to read.");
228 228
           return;
229 229
         }
230 230
         __attribute__((aligned(sizeof(size_t)))) uint8_t buf[512];

+ 2
- 2
Marlin/src/gcode/geometry/G53-G59.cpp Целия файл

@@ -69,7 +69,7 @@ void GcodeSuite::G53() {
69 69
     process_parsed_command(); // ...process the chained command
70 70
     select_coordinate_system(old_system);
71 71
     #ifdef DEBUG_M53
72
-      SERIAL_ECHOLNPAIR("Go back to workspace ", old_system);
72
+      SERIAL_ECHOLNPGM("Go back to workspace ", old_system);
73 73
       report_current_position();
74 74
     #endif
75 75
   }
@@ -87,7 +87,7 @@ void GcodeSuite::G53() {
87 87
 void G54_59(uint8_t subcode=0) {
88 88
   const int8_t _space = parser.codenum - 54 + subcode;
89 89
   if (gcode.select_coordinate_system(_space)) {
90
-    SERIAL_ECHOLNPAIR("Select workspace ", _space);
90
+    SERIAL_ECHOLNPGM("Select workspace ", _space);
91 91
     report_current_position();
92 92
   }
93 93
 }

+ 1
- 1
Marlin/src/gcode/geometry/M206_M428.cpp Целия файл

@@ -54,7 +54,7 @@ void GcodeSuite::M206() {
54 54
 
55 55
 void GcodeSuite::M206_report(const bool forReplay/*=true*/) {
56 56
   report_heading_etc(forReplay, PSTR(STR_HOME_OFFSET));
57
-  SERIAL_ECHOLNPAIR_P(
57
+  SERIAL_ECHOLNPGM_P(
58 58
     #if IS_CARTESIAN
59 59
       LIST_N(DOUBLE(LINEAR_AXES),
60 60
         PSTR("  M206 X"), LINEAR_UNIT(home_offset.x),

+ 1
- 1
Marlin/src/gcode/host/M114.cpp Целия файл

@@ -218,7 +218,7 @@ void GcodeSuite::M114() {
218 218
     }
219 219
     #if HAS_EXTRUDERS
220 220
       if (parser.seen_test('E')) {
221
-        SERIAL_ECHOLNPAIR("Count E:", stepper.position(E_AXIS));
221
+        SERIAL_ECHOLNPGM("Count E:", stepper.position(E_AXIS));
222 222
         return;
223 223
       }
224 224
     #endif

+ 1
- 1
Marlin/src/gcode/host/M115.cpp Целия файл

@@ -175,7 +175,7 @@ void GcodeSuite::M115() {
175 175
       apply_motion_limits(cmax);
176 176
       const xyz_pos_t lmin = dmin.asLogical(), lmax = dmax.asLogical(),
177 177
                       wmin = cmin.asLogical(), wmax = cmax.asLogical();
178
-      SERIAL_ECHOLNPAIR(
178
+      SERIAL_ECHOLNPGM(
179 179
         "area:{"
180 180
           "full:{"
181 181
             "min:{x:", lmin.x, ",y:", lmin.y, ",z:", lmin.z, "},"

+ 1
- 1
Marlin/src/gcode/host/M360.cpp Целия файл

@@ -36,7 +36,7 @@ static void config_prefix(PGM_P const name, PGM_P const pref=nullptr, const int8
36 36
   SERIAL_ECHOPGM("Config:");
37 37
   if (pref) SERIAL_ECHOPGM_P(pref);
38 38
   if (ind >= 0) { SERIAL_ECHO(ind); SERIAL_CHAR(':'); }
39
-  SERIAL_ECHOPAIR_P(name, AS_CHAR(':'));
39
+  SERIAL_ECHOPGM_P(name, AS_CHAR(':'));
40 40
 }
41 41
 static void config_line(PGM_P const name, const float val, PGM_P const pref=nullptr, const int8_t ind=-1) {
42 42
   config_prefix(name, pref, ind);

+ 0
- 0
Marlin/src/gcode/lcd/M145.cpp Целия файл


Някои файлове не бяха показани, защото твърде много файлове са промени

Loading…
Отказ
Запис