/*=========================================================================== B O S S _ S P Y _ R E P O R T ---------------------------------------------------------------------------*/ void Boss_spy_report(void) { boss_u32_t total_us = 0; boss_u32_t cpu_pct_sum = 0; boss_u32_t context_sum = 0; boss_tcb_t *p_tcb; _Boss_sched_lock(); PRINTF("\n==================================================\n"); PRINTF( "PRI NAME STACK %%(u/t) C P U Status Context\n"); PRINTF( "--------------------------------------------------\n"); total_us = Boss_spy_elapse_prev_us(); p_tcb = Boss_ex_task_list(0); while( p_tcb != _BOSS_NULL ) { PRINTF("%3d %5s", p_tcb->prio, p_tcb->name); { /* [ Stack ] */ boss_uptr_t stk_total; boss_uptr_t stk_used; boss_reg_t stk_pct; /* percent xx % */ stk_total = (boss_uptr_t)p_tcb->ex.sp_limit - (boss_uptr_t)p_tcb->ex.sp_base; stk_used = (boss_uptr_t)p_tcb->ex.sp_limit - (boss_uptr_t)p_tcb->ex.sp_peak; stk_pct = (boss_reg_t)(((boss_u32_t)stk_used * 100) / (boss_u32_t)stk_total); PRINTF(" %2d%%(%3d/%3d)", stk_pct, stk_used, stk_total); } { /* [ C P U ] */ boss_u32_t cpu_pct = 0; /* percent XX.xxx % */ cpu_pct = (boss_u32_t)(((boss_u64_t)(p_tcb->ex.run_time) * (boss_u64_t)100000) / (boss_u64_t)total_us); PRINTF(" %2d.%03d%%", (int)(cpu_pct/1000), (int)(cpu_pct%1000)); cpu_pct_sum = cpu_pct_sum + cpu_pct; } { /* [ Task Priority / Status ]*/ int status = Boss_spy_task_status(p_tcb); PRINTF(" %s", (status == 2) ? "RUN " : (status == 1) ? "Pend" : "Wait" ); } PRINTF(" %7d\n", p_tcb->ex.context); context_sum = context_sum + p_tcb->ex.context; p_tcb = p_tcb->ex_task_link; // Next Task link } PRINTF("\n---[TOTAL]------------- %2d.%03d%% ------ %7d\n\n", (int)(cpu_pct_sum/1000), (int)(cpu_pct_sum%1000), context_sum); _Boss_sched_free(); }
/*=========================================================================== _ B O S S _ T I M E R _ C A L L B A C K _ E X E C U T E ---------------------------------------------------------------------------*/ void _Boss_timer_callback_execute(void) { boss_reg_t irq_storage; _Boss_sched_lock(); BOSS_IRQ_DISABLE_SR(irq_storage); while(_boss_timer_exe_list != _BOSS_NULL) { boss_tmr_t *p_done = _boss_timer_exe_list; _boss_timer_exe_list = p_done->next; BOSS_ASSERT(p_done->prev == _TRIMER_EXE_FIRST_PREV); if(p_done->next != _BOSS_NULL) { p_done->next->prev = _TRIMER_EXE_FIRST_PREV; } p_done->prev = _BOSS_NULL; p_done->next = _BOSS_NULL; BOSS_IRQ_RESTORE_SR(irq_storage); p_done->tmr_cb(p_done); // Callback Execute BOSS_IRQ_DISABLE_SR(irq_storage); } BOSS_IRQ_RESTORE_SR(irq_storage); _Boss_sched_free(); }
/*=========================================================================== B O S S _ M E M _ I N F O _ R E P O R T ---------------------------------------------------------------------------*/ void Boss_mem_info_report(void) { boss_uptr_t total; boss_uptr_t used; boss_uptr_t peak; _Boss_sched_lock(); PRINTF("\n[Mmory] Peak byte Used byte Total Block first\n"); total = _Boss_mem_info_total(); used = _Boss_mem_info_used(); peak = _Boss_mem_info_peak(); PRINTF("[Info] %4d (%2d%%) %4d (%2d%%) %4d %2d %4d\n\n", peak, (boss_uptr_t)((peak * 100) / total), used, (boss_uptr_t)((used * 100) / total), total,_Boss_mem_info_block(), _Boss_mem_info_first_free() ); _Boss_sched_free(); }
/*=========================================================================== B O S S _ S P Y _ R E P O R T ---------------------------------------------------------------------------*/ void Boss_spy_report(void) { boss_tcb_t *curr_tcb; boss_u32_t total_us; boss_reg_t idx; boss_u32_t cpu_pct_sum = 0; boss_u32_t context_sum = 0; _Boss_sched_lock(); PRINTF("\n[TASK]\t STACK %%(u/t)\t C P U Context\n"); PRINTF("------------------------------------------\n"); BOSS_IRQ_DISABLE(); total_us = _Boss_spy_elapse_us(); _spy_elapse_us = 0; curr_tcb = Boss_self(); curr_tcb->cpu_sum_us += total_us - curr_tcb->cpu_ent_us; curr_tcb->cpu_ent_us = 0; BOSS_IRQ_RESTORE(); for(idx = 0; idx < _BOSS_SPY_TCB_MAX; idx++) { if(_spy_tcb_tbl[idx] != _BOSS_NULL) { boss_tcb_t *p_tcb = _spy_tcb_tbl[idx]; PRINTF(" %s", p_tcb->name); { /* [ Stack ] */ boss_uptr_t stk_total; boss_uptr_t stk_used; boss_reg_t stk_pct; stk_total = (boss_uptr_t)p_tcb->sp_limit - (boss_uptr_t)p_tcb->sp_base; stk_used = (boss_uptr_t)p_tcb->sp_limit - (boss_uptr_t)p_tcb->sp_peak; stk_pct = (boss_reg_t)(((boss_u32_t)stk_used * 100) / (boss_u32_t)stk_total); PRINTF("\t %2d%%(%3d/%3d)", stk_pct, stk_used, stk_total); } { /* [ C P U ] */ boss_u32_t cpu_pct = 0; /* percent XX.xxx % */ if(p_tcb->cpu_sum_us != 0) { cpu_pct = (boss_u32_t)(((boss_u64_t)(p_tcb->cpu_sum_us) * (boss_u64_t)100000) / (boss_u64_t)total_us); p_tcb->cpu_sum_us = 0; } PRINTF("\t %2d.%03d%%", (int)(cpu_pct/1000), (int)(cpu_pct%1000)); cpu_pct_sum = cpu_pct_sum + cpu_pct; } PRINTF(" %7d\n", p_tcb->context); context_sum = context_sum + p_tcb->context; p_tcb->context = 0; } } PRINTF("[TOTAL] :\t\t %2d.%03d%% %7d\n\n", (int)(cpu_pct_sum/1000), (int)(cpu_pct_sum%1000), context_sum); _Boss_sched_free(); { /* [ ARM Cortex-Mx MSP (Main Stack Pointer) ] */ boss_uptr_t msp_total; boss_uptr_t msp_used; boss_reg_t msp_pct; msp_total = (boss_uptr_t)_spy_msp.sp_limit - (boss_uptr_t)_spy_msp.sp_base; msp_used = (boss_uptr_t)_spy_msp.sp_limit - (boss_uptr_t)_spy_msp.sp_peak; msp_pct = (boss_reg_t)(((boss_u32_t)msp_used * 100) / (boss_u32_t)msp_total); PRINTF("[ M S P ] %%(u/t) : %2d%% (%3d/%3d)\n", msp_pct, msp_used, msp_total); } }