Skip to content

Commit

Permalink
Fix small bugs in Kernel (#998)
Browse files Browse the repository at this point in the history
* Fix small bugs

* Cast sizeof to BaseType_t

* Test removing assert to fix UT

* Revert change to tasks.c

Since configIDLE_TASK_NAME must be defined as a string according to
the documentation, the macro will always be NULL terminated. Which
means that the check `if( cIdleName[ xIdleTaskNameIndex ] == ( char ) 0x00 )`
will catch the end of string.

* Update coverity config; Add coverity version; Update pvPortMalloc declaration to match the definitions.

* Add port files to sed command

* Remove warnings about unused parameters in port code

---------

Co-authored-by: Rahul Kar <118818625+kar-rahul-aws@users.noreply.github.com>
  • Loading branch information
AniruddhaKanhere and kar-rahul-aws committed Feb 20, 2024
1 parent 1a500f1 commit 2fcb0f4
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 67 deletions.
10 changes: 5 additions & 5 deletions MISRA.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

FreeRTOS-Kernel conforms to [MISRA C:2012](https://www.misra.org.uk/misra-c)
guidelines, with the deviations listed below. Compliance is checked with
Coverity static analysis. Since the FreeRTOS kernel is designed for
small-embedded devices, it needs to have a very small memory footprint and
has to be efficient. To achieve that and to increase the performance, it
deviates from some MISRA rules. The specific deviations, suppressed inline,
are listed below.
Coverity static analysis version 2023.6.1. Since the FreeRTOS kernel is
designed for small-embedded devices, it needs to have a very small memory
footprint and has to be efficient. To achieve that and to increase the
performance, it deviates from some MISRA rules. The specific deviations,
suppressed inline, are listed below.

Additionally, [MISRA configuration file](examples/coverity/coverity_misra.config)
contains project wide deviations.
Expand Down
9 changes: 5 additions & 4 deletions examples/coverity/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ cmake_minimum_required(VERSION 3.15)

project(coverity)

set(FREERTOS_KERNEL_PATH "../../")
FILE(GLOB FREERTOS_KERNEL_SOURCE ${FREERTOS_KERNEL_PATH}*.c)
set(FREERTOS_KERNEL_PATH "../..")
FILE(GLOB FREERTOS_KERNEL_SOURCE ${FREERTOS_KERNEL_PATH}/*.c)
FILE(GLOB FREERTOS_PORT_CODE ${FREERTOS_KERNEL_PATH}/portable/template/*.c)

# Coverity incorrectly infers the type of pdTRUE and pdFALSE as boolean because
# of their names. This generates multiple false positive warnings about type
Expand All @@ -12,8 +13,8 @@ FILE(GLOB FREERTOS_KERNEL_SOURCE ${FREERTOS_KERNEL_PATH}*.c)
# fixes the issue of incorrectly inferring the type of pdTRUE and pdFALSE as
# boolean.
add_custom_target(fix_source ALL
COMMAND sed -i -b -e 's/pdFALSE/pdFAIL/g' -e 's/pdTRUE/pdPASS/g' ${FREERTOS_KERNEL_SOURCE}
DEPENDS ${FREERTOS_KERNEL_SOURCE})
COMMAND sed -i -b -e 's/pdFALSE/pdFAIL/g' -e 's/pdTRUE/pdPASS/g' ${FREERTOS_KERNEL_SOURCE} ${FREERTOS_PORT_CODE}
DEPENDS ${FREERTOS_KERNEL_SOURCE} ${FREERTOS_PORT_CODE})

# Add the freertos_config for FreeRTOS-Kernel.
add_library(freertos_config INTERFACE)
Expand Down
98 changes: 46 additions & 52 deletions examples/coverity/coverity_misra.config
Original file line number Diff line number Diff line change
@@ -1,97 +1,91 @@
// MISRA C-2012 Rules

{
version : "2.0",
standard : "c2012",
title: "Coverity MISRA Configuration",
deviations : [
// Disable the following rules.
"version" : "2.0",
"standard" : "c2012",
"title": "Coverity MISRA Configuration",
"deviations" : [
{
deviation: "Rule 3.1",
reason: "We post HTTP links in code comments which contain // inside comments blocks."
"deviation": "Rule 3.1",
"reason": "We post HTTP links in code comments which contain // inside comments blocks."
},
{
deviation: "Rule 14.4",
reason: "do while( 0 ) pattern is used in macros to prevent extra semi-colon."
"deviation": "Rule 14.4",
"reason": "do while( 0 ) pattern is used in macros to prevent extra semi-colon."
},

// Disable the following advisory rules and directives.
{
deviation: "Directive 4.4",
reason: "Code snippet is used in comment to help explanation."
"deviation": "Directive 4.4",
"reason": "Code snippet is used in comment to help explanation."
},
{
deviation: "Directive 4.5",
reason: "Allow names that MISRA considers ambiguous."
"deviation": "Directive 4.5",
"reason": "Allow names that MISRA considers ambiguous."
},
{
deviation: "Directive 4.6",
reason: "Allow port to use primitive type with typedefs."
"deviation": "Directive 4.6",
"reason": "Allow port to use primitive type with typedefs."
},
{
deviation: "Directive 4.8",
reason: "HeapRegion_t and HeapStats_t are used only in heap files but declared in portable.h which is included in multiple source files. As a result, these definitions appear in multiple source files where they are not used."
"deviation": "Directive 4.8",
"reason": "HeapRegion_t and HeapStats_t are used only in heap files but declared in portable.h which is included in multiple source files. As a result, these definitions appear in multiple source files where they are not used."
},
{
deviation: "Directive 4.9",
reason: "FreeRTOS-Kernel is optimised to work on small micro-controllers. To achieve that, function-like macros are used."
"deviation": "Directive 4.9",
"reason": "FreeRTOS-Kernel is optimised to work on small micro-controllers. To achieve that, function-like macros are used."
},
{
deviation: "Rule 2.3",
reason: "FreeRTOS defines types which is used in application."
"deviation": "Rule 2.3",
"reason": "FreeRTOS defines types which is used in application."
},
{
deviation: "Rule 2.4",
reason: "Allow to define unused tag."
"deviation": "Rule 2.4",
"reason": "Allow to define unused tag."
},
{
deviation: "Rule 2.5",
reason: "Allow to define unused macro."
"deviation": "Rule 2.5",
"reason": "Allow to define unused macro."
},
{
deviation: "Rule 5.9",
reason: "Allow to define identifier with the same name in structure and global variable."
"deviation": "Rule 5.9",
"reason": "Allow to define identifier with the same name in structure and global variable."
},
{
deviation: "Rule 8.7",
reason: "API functions are not used by the library outside of the files they are defined; however, they must be externally visible in order to be used by an application."
"deviation": "Rule 8.7",
"reason": "API functions are not used by the library outside of the files they are defined; however, they must be externally visible in order to be used by an application."
},
{
deviation: "Rule 8.9",
reason: "Allow to object to be defined in wider scope for debug purpose."
"deviation": "Rule 8.9",
"reason": "Allow to object to be defined in wider scope for debug purpose."
},
{
deviation: "Rule 8.13",
reason: "Allow to not to use const-qualified type for callback function."
"deviation": "Rule 8.13",
"reason": "Allow to not to use const-qualified type for callback function."
},
{
deviation: "Rule 11.4",
reason: "Allow to convert between a pointer to object and an interger type for stack alignment."
"deviation": "Rule 11.4",
"reason": "Allow to convert between a pointer to object and an interger type for stack alignment."
},
{
deviation: "Rule 15.4",
reason: "Allow to use multiple break statements in a loop."
"deviation": "Rule 15.4",
"reason": "Allow to use multiple break statements in a loop."
},
{
deviation: "Rule 15.5",
reason: "Allow to use multiple points of exit."
"deviation": "Rule 15.5",
"reason": "Allow to use multiple points of exit."
},
{
deviation: "Rule 17.8",
reason: "Allow to update the parameters of a function."
"deviation": "Rule 17.8",
"reason": "Allow to update the parameters of a function."
},
{
deviation: "Rule 18.4",
reason: "Allow to use pointer arithmetic."
"deviation": "Rule 18.4",
"reason": "Allow to use pointer arithmetic."
},
{
deviation: "Rule 19.2",
reason: "Allow to use union."
"deviation": "Rule 19.2",
"reason": "Allow to use union."
},
{
deviation: "Rule 20.5",
reason: "Allow to use #undef for MPU wrappers."
"deviation": "Rule 20.5",
"reason": "Allow to use #undef for MPU wrappers."
}
]
}

8 changes: 4 additions & 4 deletions include/FreeRTOS.h
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,10 @@
#define configNUMBER_OF_CORES 1
#endif

#ifndef configUSE_MALLOC_FAILED_HOOK
#define configUSE_MALLOC_FAILED_HOOK 0
#endif

/* Basic FreeRTOS definitions. */
#include "projdefs.h"

Expand Down Expand Up @@ -2649,10 +2653,6 @@
#define portCONFIGURE_TIMER_FOR_RUN_TIME_STATS()
#endif

#ifndef configUSE_MALLOC_FAILED_HOOK
#define configUSE_MALLOC_FAILED_HOOK 0
#endif

#ifndef portPRIVILEGE_BIT
#define portPRIVILEGE_BIT ( ( UBaseType_t ) 0x00 )
#endif
Expand Down
2 changes: 1 addition & 1 deletion include/portable.h
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ void vPortGetHeapStats( HeapStats_t * pxHeapStats );
/*
* Map to the memory management routines required for the port.
*/
void * pvPortMalloc( size_t xSize ) PRIVILEGED_FUNCTION;
void * pvPortMalloc( size_t xWantedSize ) PRIVILEGED_FUNCTION;
void * pvPortCalloc( size_t xNum,
size_t xSize ) PRIVILEGED_FUNCTION;
void vPortFree( void * pv ) PRIVILEGED_FUNCTION;
Expand Down
2 changes: 1 addition & 1 deletion portable/ThirdParty/GCC/Posix/portmacro.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ typedef long BaseType_t;
typedef unsigned long UBaseType_t;

typedef unsigned long TickType_t;
#define portMAX_DELAY ( TickType_t ) ULONG_MAX
#define portMAX_DELAY ( ( TickType_t ) ULONG_MAX )

#define portTICK_TYPE_IS_ATOMIC 1

Expand Down
4 changes: 4 additions & 0 deletions portable/template/port.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ StackType_t * pxPortInitialiseStack( StackType_t * pxTopOfStack,
TaskFunction_t pxCode,
void * pvParameters )
{
( void ) pxTopOfStack;
( void ) pvParameters;
( void ) * pxCode;

return NULL;
}

Expand Down

0 comments on commit 2fcb0f4

Please sign in to comment.