diff --git a/MISRA.md b/MISRA.md index 1cca337ffde..734a512916d 100644 --- a/MISRA.md +++ b/MISRA.md @@ -107,6 +107,15 @@ _Ref 11.5.5_ because data storage buffers are implemented as uint8_t arrays for the ease of sizing, alignment and access. +#### Rule 21.6 + +MISRA C-2012 Rule 21.6: The Standard Library input/output functions shall not +be used. + +_Ref 21.6.1_ + - The Standard Library function snprintf is used in vTaskListTasks and + vTaskGetRunTimeStatistics APIs, both of which are utility functions only and + are not considered part of core kernel implementation. ### MISRA configuration diff --git a/tasks.c b/tasks.c index 7c05bd5315b..1bb8a05a981 100644 --- a/tasks.c +++ b/tasks.c @@ -7348,6 +7348,9 @@ static void prvResetNextTaskUnblockTime( void ) { /* Write the rest of the string. */ #if ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) + /* MISRA Ref 21.6.1 [snprintf for utility] */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */ + /* coverity[misra_c_2012_rule_21_6_violation] */ iSnprintfReturnValue = snprintf( pcWriteBuffer, uxBufferLength - uxConsumedBufferLength, "\t%c\t%u\t%u\t%u\t0x%x\r\n", @@ -7355,15 +7358,18 @@ static void prvResetNextTaskUnblockTime( void ) ( unsigned int ) pxTaskStatusArray[ x ].uxCurrentPriority, ( unsigned int ) pxTaskStatusArray[ x ].usStackHighWaterMark, ( unsigned int ) pxTaskStatusArray[ x ].xTaskNumber, - ( unsigned int ) pxTaskStatusArray[ x ].uxCoreAffinityMask ); /*lint !e586 sprintf() allowed as this is compiled with many compilers and this is a utility function only - not part of the core kernel implementation. */ + ( unsigned int ) pxTaskStatusArray[ x ].uxCoreAffinityMask ); #else /* ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */ + /* MISRA Ref 21.6.1 [snprintf for utility] */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */ + /* coverity[misra_c_2012_rule_21_6_violation] */ iSnprintfReturnValue = snprintf( pcWriteBuffer, uxBufferLength - uxConsumedBufferLength, "\t%c\t%u\t%u\t%u\r\n", cStatus, ( unsigned int ) pxTaskStatusArray[ x ].uxCurrentPriority, ( unsigned int ) pxTaskStatusArray[ x ].usStackHighWaterMark, - ( unsigned int ) pxTaskStatusArray[ x ].xTaskNumber ); /*lint !e586 sprintf() allowed as this is compiled with many compilers and this is a utility function only - not part of the core kernel implementation. */ + ( unsigned int ) pxTaskStatusArray[ x ].xTaskNumber ); #endif /* ( ( configUSE_CORE_AFFINITY == 1 ) && ( configNUMBER_OF_CORES > 1 ) ) */ uxCharsWrittenBySnprintf = prvSnprintfReturnValueToCharsWritten( iSnprintfReturnValue, uxBufferLength - uxConsumedBufferLength ); @@ -7496,21 +7502,27 @@ static void prvResetNextTaskUnblockTime( void ) { #ifdef portLU_PRINTF_SPECIFIER_REQUIRED { + /* MISRA Ref 21.6.1 [snprintf for utility] */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */ + /* coverity[misra_c_2012_rule_21_6_violation] */ iSnprintfReturnValue = snprintf( pcWriteBuffer, uxBufferLength - uxConsumedBufferLength, "\t%lu\t\t%lu%%\r\n", pxTaskStatusArray[ x ].ulRunTimeCounter, ulStatsAsPercentage ); } - #else + #else /* ifdef portLU_PRINTF_SPECIFIER_REQUIRED */ { /* sizeof( int ) == sizeof( long ) so a smaller * printf() library can be used. */ + /* MISRA Ref 21.6.1 [snprintf for utility] */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */ + /* coverity[misra_c_2012_rule_21_6_violation] */ iSnprintfReturnValue = snprintf( pcWriteBuffer, uxBufferLength - uxConsumedBufferLength, "\t%u\t\t%u%%\r\n", ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter, - ( unsigned int ) ulStatsAsPercentage ); /*lint !e586 sprintf() allowed as this is compiled with many compilers and this is a utility function only - not part of the core kernel implementation. */ + ( unsigned int ) ulStatsAsPercentage ); } #endif /* ifdef portLU_PRINTF_SPECIFIER_REQUIRED */ } @@ -7520,6 +7532,9 @@ static void prvResetNextTaskUnblockTime( void ) * consumed less than 1% of the total run time. */ #ifdef portLU_PRINTF_SPECIFIER_REQUIRED { + /* MISRA Ref 21.6.1 [snprintf for utility] */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */ + /* coverity[misra_c_2012_rule_21_6_violation] */ iSnprintfReturnValue = snprintf( pcWriteBuffer, uxBufferLength - uxConsumedBufferLength, "\t%lu\t\t<1%%\r\n", @@ -7529,10 +7544,13 @@ static void prvResetNextTaskUnblockTime( void ) { /* sizeof( int ) == sizeof( long ) so a smaller * printf() library can be used. */ + /* MISRA Ref 21.6.1 [snprintf for utility] */ + /* More details at: https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/MISRA.md#rule-216 */ + /* coverity[misra_c_2012_rule_21_6_violation] */ iSnprintfReturnValue = snprintf( pcWriteBuffer, uxBufferLength - uxConsumedBufferLength, "\t%u\t\t<1%%\r\n", - ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter ); /*lint !e586 sprintf() allowed as this is compiled with many compilers and this is a utility function only - not part of the core kernel implementation. */ + ( unsigned int ) pxTaskStatusArray[ x ].ulRunTimeCounter ); } #endif /* ifdef portLU_PRINTF_SPECIFIER_REQUIRED */ }