Skip to content

Commit f0dd052

Browse files
committed
Changes based on code review
1 parent 91018b5 commit f0dd052

19 files changed

+376
-221
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,9 @@ them to the [support forum](https://forum.arduino.cc/index.php?board=103).
5656
5757
# Enable debug interface on Serail1
5858

59-
*Default disable the debug interface.
59+
* Default disable the debug interface.
6060

61-
If you want to enable debug trace on Serail1 to debug corelib, follow these instructions.
61+
If you want to enable debug trace on Serial1 to debug corelib, follow these instructions.
6262

6363
1. Shut down the IDE
6464
2. Go to Arduino15 directory

cores/arduino/printk.cpp

Lines changed: 146 additions & 173 deletions
Original file line numberDiff line numberDiff line change
@@ -34,191 +34,164 @@
3434
extern "C" void printk(const char *fmt, va_list args);
3535
int __vsnprintf(char *dest, int size, const char *fmt, va_list args)
3636
{
37-
int might_format = 0;
38-
int len = 0;
39-
char lastchar = 0;
40-
bool binary_format = false;
37+
int might_format = 0;
38+
int len = 0;
39+
char lastchar = 0;
40+
bool binary_format = false;
4141

42-
if (!dest || !size)
43-
return 0;
42+
if (!dest || !size)
43+
return 0;
4444

45-
while (*fmt && len < size) {
46-
if (!might_format) {
47-
if (*fmt == '\n' && lastchar != '\r') {
48-
if (len < size) {
49-
lastchar = *dest++ = '\r', len++;
50-
continue;
51-
} else
52-
break;
53-
} else if (*fmt != '%') {
54-
if (len < size)
55-
lastchar = *dest++ = *fmt, len++;
56-
else
57-
break;
58-
} else
59-
might_format = 1;
60-
} else {
61-
if (*fmt == '%') {
62-
if (len < size)
63-
*dest++ = '%', len++;
64-
else
65-
break;
66-
might_format = 0;
67-
} else {
68-
switch (*fmt) {
69-
case '0':
70-
case '1':
71-
might_format |= 2;
72-
goto still_format;
73-
break;
74-
case '2':
75-
might_format |= 4;
76-
goto still_format;
77-
break;
78-
case '4':
79-
might_format |= 8;
80-
goto still_format;
81-
break;
82-
case 'b':
83-
binary_format = true;
84-
goto still_format;
85-
break;
86-
case 'd':
87-
case 'i':
88-
case 'u':
89-
if (!binary_format) {
90-
unsigned long num =
91-
va_arg(args,
92-
unsigned long);
93-
unsigned long pos = 999999999;
94-
unsigned long remainder = num;
95-
int found_largest_digit = 0;
45+
while (*fmt && len < size) {
46+
if (!might_format) {
47+
if (*fmt == '\n' && lastchar != '\r') {
48+
if (len < size) {
49+
lastchar = *dest++ = '\r', len++;
50+
continue;
51+
} else
52+
break;
53+
} else if (*fmt != '%') {
54+
if (len < size)
55+
lastchar = *dest++ = *fmt, len++;
56+
else
57+
break;
58+
} else
59+
might_format = 1;
60+
} else {
61+
if (*fmt == '%') {
62+
if (len < size)
63+
*dest++ = '%', len++;
64+
else
65+
break;
66+
might_format = 0;
67+
} else {
68+
switch (*fmt) {
69+
case '0':
70+
case '1':
71+
might_format |= 2;
72+
goto still_format;
73+
break;
74+
case '2':
75+
might_format |= 4;
76+
goto still_format;
77+
break;
78+
case '4':
79+
might_format |= 8;
80+
goto still_format;
81+
break;
82+
case 'b':
83+
binary_format = true;
84+
goto still_format;
85+
break;
86+
case 'd':
87+
case 'i':
88+
case 'u':
89+
if (!binary_format) {
90+
unsigned long num =
91+
va_arg(args,
92+
unsigned long);
93+
unsigned long pos = 999999999;
94+
unsigned long remainder = num;
95+
int found_largest_digit = 0;
9696

97-
if (*fmt != 'u'
98-
&& (num & (1 << 31))) {
99-
if (len < size)
100-
*dest++ =
101-
'-',
102-
len++;
103-
num = (~num) + 1;
104-
remainder = num;
105-
}
106-
while (pos >= 9) {
107-
if (found_largest_digit
108-
|| remainder >
109-
pos) {
110-
found_largest_digit
111-
= 1;
112-
if (len < size)
113-
*dest++
114-
=
115-
(
116-
char)
117-
((
118-
remainder
119-
/ (
120-
pos
121-
+
122-
1))
123-
+
124-
48),
125-
len++;
126-
else
127-
break;
128-
}
129-
remainder %= (pos + 1);
130-
pos /= 10;
131-
}
132-
if (len < size)
133-
*dest++ =
134-
(char)(
135-
remainder
136-
+
137-
48),
138-
len++;
139-
break;
140-
}
141-
case 'x':
142-
case 'X':
143-
case 'p': {
144-
unsigned long num =
145-
va_arg(args, unsigned long);
146-
int sz = sizeof(num) * 2;
97+
if (*fmt != 'u'
98+
&& (num & (1 << 31))) {
99+
if (len < size)
100+
*dest++ = '-',
101+
len++;
102+
num = (~num) + 1;
103+
remainder = num;
104+
}
105+
while (pos >= 9) {
106+
if (found_largest_digit
107+
|| remainder >
108+
pos) {
109+
found_largest_digit
110+
= 1;
111+
if (len < size)
112+
*dest++ = (char)((remainder / (pos + 1)) + 48),
113+
len++;
114+
else
115+
break;
116+
}
117+
remainder %= (pos + 1);
118+
pos /= 10;
119+
}
120+
if (len < size)
121+
*dest++ = (char)(remainder + 48),
122+
len++;
123+
break;
124+
}
125+
case 'x':
126+
case 'X':
127+
case 'p': {
128+
unsigned long num =
129+
va_arg(args, unsigned long);
130+
int sz = sizeof(num) * 2;
147131

148-
if (might_format & 8) {
149-
sz = 4;
150-
} else if (might_format & 4) {
151-
sz = 2;
152-
} else if (might_format & 2) {
153-
sz = 1;
154-
}
155-
for (; sz; sz--) {
156-
char nibble;
157-
if (!binary_format) {
158-
nibble =
159-
(num >>
160-
((sz -
161-
1) <<
162-
2) & 0xf);
163-
nibble +=
164-
nibble >
165-
9 ? 87 : 48;
166-
} else {
167-
nibble =
168-
(num >>
169-
((sz -
170-
1) <<
171-
3) & 0xff);
172-
}
173-
if (len < size)
174-
*dest++ =
175-
nibble,
176-
len++;
177-
else
178-
break;
179-
}
180-
break;
181-
}
182-
case 's': {
183-
char *s = va_arg(args, char *);
184-
while (*s)
185-
if (len < size)
186-
*dest++ =
187-
*s++, len++;
188-
else
189-
break;
190-
break;
191-
}
192-
case 'c': {
193-
char c = va_arg(args, int);
194-
if (len < size)
195-
*dest++ = c, len++;
196-
break;
197-
}
198-
default:
199-
if (len < size)
200-
*dest++ = '%', len++;
201-
if (len < size)
202-
*dest++ = *fmt, len++;
203-
break;
204-
}
205-
might_format = 0;
132+
if (might_format & 8) {
133+
sz = 4;
134+
} else if (might_format & 4) {
135+
sz = 2;
136+
} else if (might_format & 2) {
137+
sz = 1;
138+
}
139+
for (; sz; sz--) {
140+
char nibble;
141+
if (!binary_format) {
142+
nibble = (num >> ((sz - 1) << 2) & 0xf);
143+
nibble += nibble > 9 ? 87 : 48;
144+
} else {
145+
nibble = (num >> ((sz - 1) << 3) & 0xff);
146+
}
147+
if (len < size)
148+
*dest++ = nibble,
149+
len++;
150+
else
151+
break;
152+
}
153+
break;
154+
}
155+
case 's': {
156+
char *s = va_arg(args, char *);
157+
while (*s)
158+
if (len < size)
159+
*dest++ =
160+
*s++, len++;
161+
else
162+
break;
163+
break;
164+
}
165+
case 'c': {
166+
char c = va_arg(args, int);
167+
if (len < size)
168+
*dest++ = c, len++;
169+
break;
170+
}
171+
default:
172+
if (len < size)
173+
*dest++ = '%', len++;
174+
if (len < size)
175+
*dest++ = *fmt, len++;
176+
break;
177+
}
178+
might_format = 0;
206179
still_format:
207-
(void)might_format;
208-
}
209-
}
210-
++fmt;
211-
}
212-
*dest = '\0';
213-
return len;
180+
(void)might_format;
181+
}
182+
}
183+
++fmt;
184+
}
185+
*dest = '\0';
186+
return len;
214187
}
215188

216189
extern UARTClass Serial1;
217190
#define PRINTK_BUFSIZ 256
218191
void printk(const char *fmt, va_list args)
219192
{
220193
#ifdef CONFIGURE_DEBUG_CORELIB_ENABLED
221-
int len = 0;
194+
int len = 0;
222195

223196
char tmp[PRINTK_BUFSIZ];
224197

0 commit comments

Comments
 (0)