48 setPeriod(MONITOR_WAIT * 1000000, TIMER::PERIODIC);
49 setCallback([
this]() {
50 task * p = _list[_core].getHead();
51 uint32_t millis = task::millis();
53 printf(VT100_COLOR, BLUE);
54 printf(
"\n ---< YAHAL Task Monitor (core:%d uptime: %ldh %ldm %ld.%03lds) >--- \n\n",
60 printf(VT100_COLOR, BLACK);
62 auto data_size = (uint32_t)(&__data_end__) - (uint32_t)(&__data_start__);
63 auto bss_size = (uint32_t)(&__bss_end__) - (uint32_t)(&__bss_start__);
64 uint32_t heap_used = mallinfo().uordblks;
65 printf(
" RAM usage: data:%ld, bss:%ld, heap:%ld, total:%ld bytes\n",
66 data_size, bss_size, heap_used, data_size + bss_size + heap_used);
68 puts(
"+------------------+-----+------+-----------+-------------+--------+");
69 puts(
"| Task Name | Flg | Prio | State | Stack usage | CPU % |");
70 puts(
"+------------------+-----+------+-----------+-------------+--------+");
72 uint32_t t = p->getDeltaTicks();
73 printf(
"| %-16s | %c/%c | %4d | %-9s | %4d / %4d |%3ld.%1ld %% |\n",
75 p->isPrivileged() ?
'P' :
'U', p->isUsingFloat() ?
'F' :
'I',
77 state_to_str(p->getState()),
78 p->getUsedStack(), p->getStackSize(),
79 t * 100 / MONITOR_WAIT / TICK_FREQUENCY,
80 (t * 1000 / MONITOR_WAIT / TICK_FREQUENCY) % 10
83 }
while(p != _list[_core].getHead());
84 puts(
"+------------------+-----+------+-----------+-------------+--------+");