possible problem in xTaskCheckForTimeOut

rawka wrote on Wednesday, July 29, 2009:


I’m using vs2008 to compile the FreeRTOS V5.4.1 with win32 emulation (with unsigned short portTickType) . I’ve found a possible bug in the xTaskCheckForTimeOut() function using this enviroment:

in tasks.c at line 1704:
        else if( ( ( portTickType ) xTickCount - ( portTickType ) pxTimeOut->xTimeOnEntering ) < ( portTickType ) *pxTicksToWait )

should be replace to:
        else if(  ( portTickType )( xTickCount - pxTimeOut->xTimeOnEntering ) < ( portTickType ) *pxTicksToWait )

not doing this, the substraction will be converted to 32bit wide integert instead of "unsigned short", which could lead to other problems (invalid pxTicksToWait for example).

I don’t know how it affects the other environments, but I hope this helps for somebody.

rtel wrote on Wednesday, July 29, 2009:

Those casts are new in V5.4.1 and intended to stop exactly the situation you describe.  It worked for the code I was working on at the time, but it seems not all compilers.

Can you add a bug report in the SourceForge tracker for this - that way it will get looked at again before the next release.

Thanks and regards.

rawka wrote on Wednesday, July 29, 2009:

I’ve added this bug to the tracker!