measurement of whole OS efficiency, advice

nobody wrote on Friday, October 20, 2006:

//------------------------------------------------------------------------------------------------------------------------------- idleTask

static u32_t cpu_free_time = 0;

void vApplicationIdleHook( void );
void vApplicationIdleHook( void )            // for tests only, there must not be vTaskDelay   
{
#if DEVBRD
       AT91C_BASE_PIOA->PIO_SODR = LED_BT;
#endif
    portENTER_CRITICAL();
    cpu_free_time++;
    portEXIT_CRITICAL();
}

//----------------------------------------------------------------------------------------------
static void vUserTask( void *pvParameters );
static void vUserTask( void *pvParameters )
{
    (void) pvParameters;
    static char LEDblink = 0;
    static u32_t cpu_time;
    #define    ledblink(led)            if (LEDblink) ledon(led); else ledoff(led)

    while (1) {
        LEDblink ^= 1;                                                    // switch blinking
       
        //-------------------------------------------------------------------------------------------- OS control state LED
       
        ledblink(LED_WORK);
           
        vTaskDelay(( portTickType ) 500/*ms*/);                            // disable for debug vTaskUser stack…
        //kprintf("usrSP: %d\n", vGetSP());                                // debug
       
        // measure of cpu free time
        portENTER_CRITICAL();
        cpu_time = cpu_free_time;
        cpu_free_time = 0;
        portEXIT_CRITICAL();
        kprintf("cpu free: %lu\n", cpu_time);
    }    // while(1)
}

if cpu free = 0, you should correct your tasks, for example:
while(1) vTaskDelay(50);
instead of
while(1);

best regards
Janusz

neilbradley wrote on Friday, October 20, 2006:

As an aside, what is the point of this:

static void vUserTask( void *pvParameters );
static void vUserTask( void *pvParameters )
{

}

Putting the function prototype right above the function itself?

nobody wrote on Saturday, October 21, 2006:

I have this function in main.c file. Thus, I have not prototype in header file and I wanted to avoid compiler warning…

Janusz