Buggy assertion in xTaskGenericCreate?

Posted by alexander5245 on June 27, 2016

Hi,

I've enabled configASSERT and I'm seeing an assertion failure in xTaskGenericCreate (FreeRTOS 8.0.0, PIC32 port). The assertion is:

~~~ configASSERT( ( ( uxPriority & ( UBaseTypet ) ( ~portPRIVILEGEBIT ) ) < ( UBaseTypet ) configMAXPRIORITIES ) ); ~~~

portPRIVILEGEBIT is zero so ~portPRIVILEGEBIT is 0xffffffff. The assertion expects that to be less than the max priority level. Since it's an unsigned comparison (UBaseType_t is an unsigned long) the test will always fail.

So how can this configASSERT test be correct?

Thank you, Bob


Buggy assertion in xTaskGenericCreate?

Posted by rtel on June 27, 2016

Assume:

uxPriority = 5 configMAX_PRIORITIES = 6

Then (all case to unsigned) the assert test becomes:

( uxPriority & 0xffffffff ) < 6

which equals

( 5 & 0xffffffff ) < 6

which equals

5 < 6

so the assertion passes.


Buggy assertion in xTaskGenericCreate?

Posted by alexander5245 on June 27, 2016

Ah, of course! I wasn't reading the parentheses right. Sorry.

Thanks, Bob