xTaskGetTickCount during ISR

nobody wrote on Saturday, April 28, 2007:

I am working with the MSP430 port and have a problem with the xTaskGetTickCount() function.

I want to measure a time between two edges and call the function xTaskGetTickCount() to get the actual time. If I do this from a Interrupt Service Routine the system is not working. Below is the function from the file task.c listed.

portTickType xTaskGetTickCount( void )
{
portTickType xTicks;

/* Critical section required if running on a 16 bit processor. */
taskENTER_CRITICAL();
    {
        xTicks = xTickCount;
    }
    taskEXIT_CRITICAL();

    return xTicks;
}

If I comment out taskENTER_CRITICAL() and taskEXIT_CRITICAL() all  works fine.

Is the comment with 16 bit processor always correct ?
I think, this comment and the functions are only necessary, if:

- running on a 8 bit processor
or
- running on a 16 bit processor with configUSE_16_BIT_TICKS 0

Klaus

rtel wrote on Saturday, April 28, 2007:

Your assumption is correct.  The comment is a bit historical.  As long as read access to the variable is atomic then you don’t need the critical section.  From within an ISR you definitely should not use a critical section.

You could provide another function xTaskGetTickCountFromISR() which does the same without the critical section to be totally sure.

Regards.