50#if (ENABLE_BSP_PRINTF)
51 static void _putchar(
char character){
52 #if (ENABLE_SEMIHOSTING_PRINT == 1)
59 static void _putchar_s(
char *p)
61 #if (ENABLE_SEMIHOSTING_PRINT == 1)
69 static void bsp_printHex(uint32_t val)
74 for (
int i = (4*digits)-4; i >= 0; i -= 4) {
75 _putchar(
"0123456789ABCDEF"[(val >> i) % 16]);
79 static void bsp_printHex_lower(uint32_t val)
84 for (
int i = (4*digits)-4; i >= 0; i -= 4) {
85 _putchar(
"0123456789abcdef"[(val >> i) % 16]);
90 #if (ENABLE_FLOATING_POINT_SUPPORT)
92 static void reverse(
char s[])
97 for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
105 static void itos(
int n,
char s[])
113 s[i++] = n % 10 +
'0';
114 }
while ((n /= 10) > 0);
122 static void ftoa(
double n,
char* res1,
char* res2)
131 double fpart = n - (double)ipart;
141 fpart_f = (float)fpart * pow(10, afterpoint);
146 fpart_f = -(fpart_f);
149 for (
int i=afterpoint; i>0; i--)
151 if ((fpart_f<(1 * pow(10, i-1))) && (fpart_f>0))
158 itos((
int)fpart_f, res2);
161 static void print_dec(uint32_t val)
168 static void print_float(
double val)
174 char sval[21], fval[10];
175 ftoa(val, sval, fval);
187 if ((sval[0] !=
'-') && (neg == 1))
203 static void bsp_printf_c(
int c)
208 static void bsp_printf_s(
char *p)
215 static void bsp_printf_d(
int val)
223 while (val || p == buffer) {
224 *(p++) =
'0' + val % 10;
228 bsp_printf_c(*(--p));
231 static void bsp_printf_x(
int val)
237 if((val & (0xFFFFFFF0 <<(4*i))) == 0)
243 bsp_printHex_lower(val);
246 static void bsp_printf_X(
int val)
252 if((val & (0xFFFFFFF0 <<(4*i))) == 0)
260#if (ENABLE_SEMIHOSTING_PRINT == 0)
261 static int bsp_printf(
const char *format, ...)
266 va_start(ap, format);
268 for (i = 0; format[i]; i++){
269 if (format[i] ==
'\n') {
274 if (format[i] ==
'%') {
275 while (format[++i]) {
276 if (format[i] ==
'c') {
277 bsp_printf_c(va_arg(ap,
int));
280 else if (format[i] ==
's') {
281 bsp_printf_s(va_arg(ap,
char*));
284 else if (format[i] ==
'd') {
285 bsp_printf_d(va_arg(ap,
int));
288 else if (format[i] ==
'X') {
289 bsp_printf_X(va_arg(ap,
int));
292 else if (format[i] ==
'x') {
293 bsp_printf_x(va_arg(ap,
int));
296#if (ENABLE_FLOATING_POINT_SUPPORT)
297 else if (format[i] ==
'f') {
298 print_float(va_arg(ap,
double));
301#elif (ENABLE_PRINTF_WARNING)
302 else if (format[i] ==
'f') {
303 bsp_printf_s(
"<Floating point printing not enable. Please Enable it at bsp.h first...>");
309 bsp_printf_c(format[i]);
316 static int bsp_printf(
const char* format, ...)
319 va_start(va, format);
321 char buffer[MAX_STRING_BUFFER_SIZE];
322 const int ret = _vsnprintf(_out_buffer, buffer, (
size_t)-1, format, va);