+char itoc(uint8_t i)
+{
+ return (i < 10 ? '0' + i : 'A' + i - 10);
+}
+
+static inline
+void print_int(uint16_t data, uint8_t base)
+{
+ char buf[7] = {'\0'};
+ char *p = &buf[6];
+ if ((base & SIGNED) && (data & 0x8000)) {
+ data = -data;
+ buf[0] = '-';
+ }
+ base &= ~SIGNED;
+ uint16_t n;
+ do {
+ n = data;
+ data /= base;
+ *(--p) = itoc(n - data*base);
+ } while (data);
+ if (buf[0]) *(--p) = buf[0];
+ print_S(p);
+}
+
+void print_dec(uint16_t data)
+{
+ print_int(data, DEC);
+}
+
+void print_decs(int16_t data)
+{
+ print_int(data, DEC|SIGNED);
+}
+
+