Usage of configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES

Hi all, I am developing a new project and therefore I set the above define to 1, in order to catch list corruptions. I also have configASSERT() defined and it broke execution when my first static semaphore was about to be created, since Queuet and StaticQueuet are not of the same size. In order to get rid of the error, I needed to make the following changes in FreeRTOS.h: ~~~ /* * In line with software engineering best practice, FreeRTOS implements a strict * data hiding policy, so the real structures used by FreeRTOS to maintain the * state of tasks, queues, semaphores, etc. are not accessible to the application * code. However, if the application writer wants to statically allocate such * an object then the size of the object needs to be know. Dummy structures * that are guaranteed to have the same size and alignment requirements of the * real objects are used for this purpose. The dummy list and list item * structures below are used for inclusion in such a dummy structure. */ struct xSTATIC_LIST_ITEM {

if( configUSELISTDATAINTEGRITYCHECK_BYTES == 1 )

TickType_t uxDummy0;

endif /* configUSELISTDATAINTEGRITYCHECK_BYTES */

TickType_t xDummy1;
void *pvDummy2[ 4 ];

if( configUSELISTDATAINTEGRITYCHECK_BYTES == 1 )

TickType_t uxDummy3;

endif /* configUSELISTDATAINTEGRITYCHECK_BYTES */

}; typedef struct xSTATICLISTITEM StaticListItem_t; /* See the comments above the struct xSTATICLISTITEM definition. */ struct xSTATIC_MINI_LIST_ITEM {

if( configUSELISTDATAINTEGRITYCHECK_BYTES == 1 )

TickType_t uxDummy0;

endif /* configUSELISTDATAINTEGRITYCHECK_BYTES */

TickType_t xDummy1;
void *pvDummy2[ 2 ];
}; typedef struct xSTATICMINILISTITEM StaticMiniListItemt; /* See the comments above the struct xSTATICLISTITEM definition. */ typedef struct xSTATIC_LIST {

if( configUSELISTDATAINTEGRITYCHECK_BYTES == 1 )

TickType_t uxDummy0;

endif /* configUSELISTDATAINTEGRITYCHECK_BYTES */

UBaseType_t uxDummy1;
void *pvDummy2;
StaticMiniListItem_t xDummy3;

if( configUSELISTDATAINTEGRITYCHECK_BYTES == 1 )

TickType_t uxDummy4;

endif /* configUSELISTDATAINTEGRITYCHECK_BYTES */

} StaticList_t; ~~~ This way, even if the define in the subject is set to 1, the sizes of Queuet and StaticQueuet are equal and the assert is passing. Can this be an intentional thing? Are we allowed to use the list integrity checker in our applications? Regards, Geza

Usage of configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES

Sure you can use the list integrity checker in your application if you like, but note it was not intended for use by applications, and as such is not documented – and the issue you have noticed (which we will look at – thanks for reporting) reflects that. The integrity checking code is included in our code coverage tests.

Usage of configUSE_LIST_DATA_INTEGRITY_CHECK_BYTES

Thanks for your reply. I was debugging a weird phenomenon that was corrupting my RAM, this is why I turned it on (unfortunately I do not have data tracing equipment and the problem showed up only occasionally). It really helped me to get closer to the problem which I already managed to sort out, that is why I think it would make sense to have this as an official option for applications, too.