Beispiel #1
0
/*===========================================================================
    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();
}
Beispiel #2
0
/*===========================================================================
    _   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();
}
Beispiel #3
0
/*===========================================================================
    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();
}
Beispiel #4
0
/*===========================================================================
    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);
  }
}