Add function to print a number with grouped digits

Move bootstage's numbering printing code into a generic place so that it can
be used by tracing also.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2013-06-11 11:14:38 -07:00 committed by Tom Rini
parent 5d3bd34545
commit b8bcaa3ad3
3 changed files with 31 additions and 18 deletions

View File

@ -49,6 +49,7 @@ static int next_id = BOOTSTAGE_ID_USER;
enum {
BOOTSTAGE_VERSION = 0,
BOOTSTAGE_MAGIC = 0xb00757a3,
BOOTSTAGE_DIGITS = 9,
};
struct bootstage_hdr {
@ -165,21 +166,6 @@ uint32_t bootstage_accum(enum bootstage_id id)
return duration;
}
static void print_time(unsigned long us_time)
{
char str[15], *s;
int grab = 3;
/* We don't seem to have %'d in U-Boot */
sprintf(str, "%12lu", us_time);
for (s = str + 3; *s; s += grab) {
if (s != str + 3)
putc(s[-1] != ' ' ? ',' : ' ');
printf("%.*s", grab, s);
grab = 3;
}
}
/**
* Get a record name as a printable string
*
@ -208,10 +194,10 @@ static uint32_t print_time_record(enum bootstage_id id,
if (prev == -1U) {
printf("%11s", "");
print_time(rec->time_us);
print_grouped_ull(rec->time_us, BOOTSTAGE_DIGITS);
} else {
print_time(rec->time_us);
print_time(rec->time_us - prev);
print_grouped_ull(rec->time_us, BOOTSTAGE_DIGITS);
print_grouped_ull(rec->time_us - prev, BOOTSTAGE_DIGITS);
}
printf(" %s\n", get_record_name(buf, sizeof(buf), rec));

View File

@ -178,4 +178,15 @@ int vscnprintf(char *buf, size_t size, const char *fmt, va_list args);
#define vscnprintf(buf, size, fmt, args...) vsprintf(buf, fmt, ##args)
#endif /* CONFIG_SYS_VSNPRINTF */
/**
* print_grouped_ull() - print a value with digits grouped by ','
*
* This prints a value with grouped digits, like 12,345,678 to make it easier
* to read.
*
* @val: Value to print
* @digits: Number of digiits to print
*/
void print_grouped_ull(unsigned long long int_val, int digits);
#endif

View File

@ -870,3 +870,19 @@ char *simple_itoa(ulong i)
} while (i > 0);
return p + 1;
}
/* We don't seem to have %'d in U-Boot */
void print_grouped_ull(unsigned long long int_val, int digits)
{
char str[21], *s;
int grab = 3;
digits = (digits + 2) / 3;
sprintf(str, "%*llu", digits * 3, int_val);
for (s = str; *s; s += grab) {
if (s != str)
putc(s[-1] != ' ' ? ',' : ' ');
printf("%.*s", grab, s);
grab = 3;
}
}