Buggy assertion in xTaskGenericCreate?

alexander5245 wrote on Monday, 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 & ( UBaseType_t ) ( ~portPRIVILEGE_BIT ) ) < ( UBaseType_t ) configMAX_PRIORITIES ) );

portPRIVILEGE_BIT is zero so ~portPRIVILEGE_BIT 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

rtel wrote on Monday, 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.

alexander5245 wrote on Monday, June 27, 2016:

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

Thanks,
Bob