Call xTaskGetTickCount from ISR freezes STM32

tmech wrote on Sunday, March 15, 2009:

I am using STM32 w/ FreeRTOS 5.1.2
When I call xTaskGetTickCount() from an ISR (specifically EXTI0), the application freezes up.

The solution was to remove the taskENTER_CRITICAL(); and taskEXIT_CRITICAL(); calls from the xTaskGetTickCount() function, these are not needed on 32-bit anyway.

My suggestion for future versions is a #IF to remove these calls on 32-bit architectures.

Todd

rtel wrote on Monday, March 16, 2009:

See number 3 on the following page: http://www.freertos.org/FAQHelp.html

Version 5.2.0 has removed critical sections from a few places where they were not necessary, however the type used to hold the tick count is configurable so the critical section remains there.

It might be better to have a "get tick count from isr" function, or to just make the tick count accessible.

Regards.

tmech wrote on Tuesday, March 17, 2009:

I agree that a "get tick count from isr" function would be beneficial. As an example, my application uses a hall sensor that measures RPM of a motor. Every rotation of the shaft generates a interrupt which measures the time since the last interrupt. I could imagine a few other situations were the "get tick from isr" would be helpful.

Hopefully this can be implemented in a future version.

Todd

anonymous wrote on Thursday, March 19, 2009:

Todd: in your case, I think you should use another timer in counter mode, maybe automatically triggered by the interrupt from the hall sensor.

The system tick will typically have a quite low frequency (1ms), while you could easily get much more accurate information.