Переглянути джерело

Improved list-oriented macros

Scott Lahteine 5 роки тому
джерело
коміт
8683d4abfd
2 змінених файлів з 49 додано та 21 видалено
  1. 20
    19
      Marlin/src/core/macros.h
  2. 29
    2
      Marlin/src/core/serial.h

+ 20
- 19
Marlin/src/core/macros.h Переглянути файл

@@ -205,25 +205,26 @@
205 205
   }while(0)
206 206
 
207 207
 // Macros for initializing arrays
208
-#define ARRAY_16(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,...) { A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P }
209
-#define ARRAY_15(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,...) { A,B,C,D,E,F,G,H,I,J,K,L,M,N,O }
210
-#define ARRAY_14(A,B,C,D,E,F,G,H,I,J,K,L,M,N,...) { A,B,C,D,E,F,G,H,I,J,K,L,M,N }
211
-#define ARRAY_13(A,B,C,D,E,F,G,H,I,J,K,L,M,...) { A,B,C,D,E,F,G,H,I,J,K,L,M }
212
-#define ARRAY_12(A,B,C,D,E,F,G,H,I,J,K,L,...) { A,B,C,D,E,F,G,H,I,J,K,L }
213
-#define ARRAY_11(A,B,C,D,E,F,G,H,I,J,K,...) { A,B,C,D,E,F,G,H,I,J,K }
214
-#define ARRAY_10(A,B,C,D,E,F,G,H,I,J,...) { A,B,C,D,E,F,G,H,I,J }
215
-#define ARRAY_9( A,B,C,D,E,F,G,H,I,...) { A,B,C,D,E,F,G,H,I }
216
-#define ARRAY_8( A,B,C,D,E,F,G,H,...) { A,B,C,D,E,F,G,H }
217
-#define ARRAY_7( A,B,C,D,E,F,G,...) { A,B,C,D,E,F,G }
218
-#define ARRAY_6( A,B,C,D,E,F,...) { A,B,C,D,E,F }
219
-#define ARRAY_5( A,B,C,D,E,...) { A,B,C,D,E }
220
-#define ARRAY_4( A,B,C,D,...) { A,B,C,D }
221
-#define ARRAY_3( A,B,C,...) { A,B,C }
222
-#define ARRAY_2( A,B,...) { A,B }
223
-#define ARRAY_1( A,...) { A }
224
-
225
-#define _ARRAY_N(N,V...) ARRAY_##N(V)
226
-#define ARRAY_N(N,V...) _ARRAY_N(N,V)
208
+#define LIST_16(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P
209
+#define LIST_15(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N,O
210
+#define LIST_14(A,B,C,D,E,F,G,H,I,J,K,L,M,N,...) A,B,C,D,E,F,G,H,I,J,K,L,M,N
211
+#define LIST_13(A,B,C,D,E,F,G,H,I,J,K,L,M,...) A,B,C,D,E,F,G,H,I,J,K,L,M
212
+#define LIST_12(A,B,C,D,E,F,G,H,I,J,K,L,...) A,B,C,D,E,F,G,H,I,J,K,L
213
+#define LIST_11(A,B,C,D,E,F,G,H,I,J,K,...) A,B,C,D,E,F,G,H,I,J,K
214
+#define LIST_10(A,B,C,D,E,F,G,H,I,J,...) A,B,C,D,E,F,G,H,I,J
215
+#define LIST_9( A,B,C,D,E,F,G,H,I,...) A,B,C,D,E,F,G,H,I
216
+#define LIST_8( A,B,C,D,E,F,G,H,...) A,B,C,D,E,F,G,H
217
+#define LIST_7( A,B,C,D,E,F,G,...) A,B,C,D,E,F,G
218
+#define LIST_6( A,B,C,D,E,F,...) A,B,C,D,E,F
219
+#define LIST_5( A,B,C,D,E,...) A,B,C,D,E
220
+#define LIST_4( A,B,C,D,...) A,B,C,D
221
+#define LIST_3( A,B,C,...) A,B,C
222
+#define LIST_2( A,B,...) A,B
223
+#define LIST_1( A,...) A
224
+
225
+#define _LIST_N(N,V...) LIST_##N(V)
226
+#define LIST_N(N,V...) _LIST_N(N,V)
227
+#define ARRAY_N(N,V...) { _LIST_N(N,V) }
227 228
 
228 229
 // Macros for adding
229 230
 #define INC_0 1

+ 29
- 2
Marlin/src/core/serial.h Переглянути файл

@@ -139,14 +139,41 @@ extern uint8_t marlin_debug_flags;
139 139
 #define _SELP_21(a,b,V...) do{ _SEP_2(a,b); _SELP_19(V); }while(0)
140 140
 #define _SELP_22(a,b,V...) do{ _SEP_2(a,b); _SELP_20(V); }while(0)
141 141
 #define _SELP_23(a,b,V...) do{ _SEP_2(a,b); _SELP_21(V); }while(0)
142
-#define _SELP_24(a,b,V...) do{ _SEP_2(a,b); _SELP_22(V); }while(0)
142
+#define _SELP_24(a,b,V...) do{ _SEP_2(a,b); _SELP_22(V); }while(0) // Use up two, pass the rest up
143 143
 
144 144
 #define SERIAL_ECHOLNPAIR(V...) _SELP_N(NUM_ARGS(V),V)
145 145
 
146
+// Print up to 20 comma-separated pairs of values
147
+#define __SLST_N(N,V...)   _SLST_##N(V)
148
+#define _SLST_N(N,V...)    __SLST_N(N,V)
149
+#define _SLST_1(a)         SERIAL_ECHO(a)
150
+#define _SLST_2(a,b)       do{ SERIAL_ECHO(a); SERIAL_ECHOPAIR(", ",b);     }while(0)
151
+#define _SLST_3(a,b,c)     do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_1(c);  }while(0)
152
+#define _SLST_4(a,b,V...)  do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_2(V);  }while(0)
153
+#define _SLST_5(a,b,V...)  do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_3(V);  }while(0)
154
+#define _SLST_6(a,b,V...)  do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_4(V);  }while(0)
155
+#define _SLST_7(a,b,V...)  do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_5(V);  }while(0)
156
+#define _SLST_8(a,b,V...)  do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_6(V);  }while(0)
157
+#define _SLST_9(a,b,V...)  do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_7(V);  }while(0)
158
+#define _SLST_10(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_8(V);  }while(0)
159
+#define _SLST_11(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_9(V);  }while(0)
160
+#define _SLST_12(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_10(V); }while(0)
161
+#define _SLST_13(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_11(V); }while(0)
162
+#define _SLST_14(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_12(V); }while(0)
163
+#define _SLST_15(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_13(V); }while(0)
164
+#define _SLST_16(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_14(V); }while(0)
165
+#define _SLST_17(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_15(V); }while(0)
166
+#define _SLST_18(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_16(V); }while(0)
167
+#define _SLST_19(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_17(V); }while(0)
168
+#define _SLST_20(a,b,V...) do{ SERIAL_ECHO(a); _SEP_2(", ",b); _SLST_18(V); }while(0) // Use up two, pass the rest up
169
+
170
+#define SERIAL_ECHOLIST(pre,V...)   do{ SERIAL_ECHOPGM(pre); _SLST_N(NUM_ARGS(V),V); }while(0)
171
+#define SERIAL_ECHOLIST_N(N,V...)   _SLST_N(N,LIST_N(N,V))
172
+
146 173
 #define SERIAL_ECHOPGM(S)           (serialprintPGM(PSTR(S)))
147 174
 #define SERIAL_ECHOLNPGM(S)         (serialprintPGM(PSTR(S "\n")))
148 175
 
149
-#define SERIAL_ECHOPAIR_F(S, V...)  do{ SERIAL_ECHOPGM(S); SERIAL_ECHO_F(V); }while(0)
176
+#define SERIAL_ECHOPAIR_F(S,V...)   do{ SERIAL_ECHOPGM(S); SERIAL_ECHO_F(V); }while(0)
150 177
 #define SERIAL_ECHOLNPAIR_F(V...)   do{ SERIAL_ECHOPAIR_F(V); SERIAL_EOL(); }while(0)
151 178
 
152 179
 #define SERIAL_ECHO_START()         serial_echo_start()

Завантаження…
Відмінити
Зберегти