Appendix 1 - Phoenix MISRA C Profile¶
MISRA C 2023 rule headlines can be accessed on MISRA official git repository For detailed information a licensed copy of the MISRA C 2023 standard needs to be obtained from MISRA organization.
The following table lists the directives and rules of the MISRA C:2023 standard and their status within the Phoenix MISRA C Profile.
MISRA C Tailoring for Phoenix-RTOS development¶
MISRA C is a widely adapted guideline for C developers. Despite it automotive origin, MISRA C framework can be beneficial for other safety-critical industries like aerospace, aviation or medical. The primary objectives of this standard is elimination of undefined behavior, promotion of safety and consistent coding practices and effective reduction of reliability and predictability. For the low level development, especially development of operating system’s core functions, compliance to some rules might be either not possible or result in performance degradation. For example, MISRA C promotes portability by limiting the reliance on implementation-defined behavior. At the same time, it’s role of operating system to provide the implementation-agnostic interface and hide the low level interactions behind the hardware abstraction layer. Below a tailoring of MISRA C 2023 standard applicable to Phoenix-RTOS development process is presented. The tailoring has been prepared taking into considerations incorporation of MISRA C benefits without performance and productivity degradation and therefore following assumptions:
All Advisory rules defined in the standard are treated as optional and will not be enforced by Phoenix Systems;
Rules limiting access to hardware resources (e.g. register based interface to peripherals) will be disabled;
Rules impacting pointer arithmetic performance and universal interfaces at kernel level will be disabled.
The compliance to MISRA C standard will be assessed using commercially available Code Static Analyzers, for example: Parasoft Cpptest, QA Systems QA MISRA, Synopsys Coverity. The tool should be configured to match the profile defined in table below.
It is also allowed to disable rule enforcement in the Code Static Analysis tool on case by case basis. Each case needs to be thoroughly reviewed by the developer and justification provided.
Column Descriptions¶
ID: The official directive or rule identifier from the MISRA C:2023 standard.
Category: The rule’s category as defined by the standard. By default, the Phoenix MISRA C Profile applies all
RequiredandMandatoryrules.Applicability Change: Shows any deviation from the standard’s default applicability.
Advisoryrules may beENABLED, whileRequiredorMandatoryrules may beDISABLED.NOindicates no change.Applied: A
YES/NOindicator of whether the rule is active in the Phoenix MISRA C Profile.Justification: Provides the justification for enabling or disabling a rule.
ID |
Category |
Applicability Change |
Applied |
Justification |
|---|---|---|---|---|
Dir 1.1 |
Required |
NO |
YES |
|
Dir 2.1 |
Required |
NO |
YES |
|
Dir 3.1 |
Required |
NO |
YES |
|
Dir 4.1 |
Required |
NO |
YES |
|
Dir 4.2 |
Advisory |
NO |
NO |
|
Dir 4.3 |
Required |
NO |
YES |
|
Dir 4.4 |
Advisory |
NO |
NO |
|
Dir 4.5 |
Advisory |
NO |
NO |
|
Dir 4.6 |
Advisory |
NO |
NO |
|
Dir 4.7 |
Required |
NO |
YES |
|
Dir 4.8 |
Advisory |
NO |
NO |
|
Dir 4.9 |
Advisory |
NO |
NO |
|
Dir 4.10 |
Required |
NO |
YES |
|
Dir 4.11 |
Required |
NO |
YES |
|
Dir 4.12 |
Required |
NO |
YES |
|
Dir 4.13 |
Advisory |
NO |
NO |
|
Dir 4.14 |
Required |
NO |
YES |
|
Dir 4.15 |
Required |
NO |
YES |
|
Dir 5.1 |
Required |
NO |
YES |
|
Dir 5.2 |
Required |
NO |
YES |
|
Dir 5.3 |
Required |
NO |
YES |
|
Rule 1.1 |
Required |
NO |
YES |
|
Rule 1.2 |
Advisory |
NO |
NO |
|
Rule 1.3 |
Required |
NO |
YES |
|
Rule 1.4 |
Required |
NO |
YES |
|
Rule 1.5 |
Required |
NO |
YES |
|
Rule 2.1 |
Required |
NO |
YES |
|
Rule 2.2 |
Required |
NO |
YES |
|
Rule 2.3 |
Advisory |
NO |
NO |
|
Rule 2.4 |
Advisory |
NO |
NO |
|
Rule 2.5 |
Advisory |
NO |
NO |
|
Rule 2.6 |
Advisory |
NO |
NO |
|
Rule 2.7 |
Advisory |
NO |
NO |
|
Rule 2.8 |
Advisory |
NO |
NO |
|
Rule 3.1 |
Required |
NO |
YES |
|
Rule 3.2 |
Required |
NO |
YES |
|
Rule 4.1 |
Required |
NO |
YES |
|
Rule 4.2 |
Advisory |
NO |
NO |
|
Rule 5.1 |
Required |
NO |
YES |
|
Rule 5.2 |
Required |
NO |
YES |
|
Rule 5.3 |
Required |
NO |
YES |
|
Rule 5.4 |
Required |
NO |
YES |
|
Rule 5.5 |
Required |
NO |
YES |
|
Rule 5.6 |
Required |
NO |
YES |
|
Rule 5.7 |
Required |
NO |
YES |
|
Rule 5.8 |
Required |
NO |
YES |
|
Rule 5.9 |
Advisory |
NO |
NO |
|
Rule 6.1 |
Required |
NO |
YES |
|
Rule 6.2 |
Required |
NO |
YES |
|
Rule 6.3 |
Required |
NO |
YES |
|
Rule 7.1 |
Required |
NO |
YES |
|
Rule 7.2 |
Required |
NO |
YES |
|
Rule 7.3 |
Required |
NO |
YES |
|
Rule 7.4 |
Required |
NO |
YES |
|
Rule 7.5 |
Mandatory |
NO |
YES |
|
Rule 7.6 |
Required |
NO |
YES |
|
Rule 8.1 |
Required |
NO |
YES |
|
Rule 8.2 |
Required |
NO |
YES |
|
Rule 8.3 |
Required |
NO |
YES |
|
Rule 8.4 |
Required |
NO |
YES |
|
Rule 8.5 |
Required |
NO |
YES |
|
Rule 8.6 |
Required |
NO |
YES |
|
Rule 8.7 |
Advisory |
NO |
NO |
|
Rule 8.8 |
Required |
NO |
YES |
|
Rule 8.9 |
Advisory |
NO |
NO |
|
Rule 8.10 |
Required |
NO |
YES |
|
Rule 8.11 |
Advisory |
NO |
NO |
|
Rule 8.12 |
Required |
NO |
YES |
|
Rule 8.13 |
Advisory |
NO |
NO |
|
Rule 8.14 |
Required |
NO |
YES |
|
Rule 8.15 |
Required |
NO |
YES |
|
Rule 8.16 |
Advisory |
NO |
NO |
|
Rule 8.17 |
Advisory |
NO |
NO |
|
Rule 9.1 |
Mandatory |
NO |
YES |
|
Rule 9.2 |
Required |
NO |
YES |
|
Rule 9.3 |
Required |
NO |
YES |
|
Rule 9.4 |
Required |
NO |
YES |
|
Rule 9.5 |
Required |
NO |
YES |
|
Rule 9.6 |
Required |
NO |
YES |
|
Rule 9.7 |
Mandatory |
NO |
YES |
|
Rule 10.1 |
Required |
NO |
YES |
|
Rule 10.2 |
Required |
NO |
YES |
|
Rule 10.3 |
Required |
NO |
YES |
|
Rule 10.4 |
Required |
NO |
YES |
|
Rule 10.5 |
Advisory |
NO |
NO |
|
Rule 10.6 |
Required |
NO |
YES |
|
Rule 10.7 |
Required |
NO |
YES |
|
Rule 10.8 |
Required |
NO |
YES |
|
Rule 11.1 |
Required |
NO |
YES |
|
Rule 11.2 |
Required |
NO |
YES |
|
Rule 11.3 |
Required |
DISABLED |
NO |
This rule is not applicable for the Phoenix-RTOS kernel source code, because casting between different types of pointers can not be avoided in the operating system implementation. |
Rule 11.4 |
Advisory |
NO |
NO |
|
Rule 11.5 |
Advisory |
NO |
NO |
|
Rule 11.6 |
Required |
DISABLED |
NO |
This rule is not applicable for the Phoenix-RTOS kernel source code, because casting between pointer to void and an arithmetic type can not be avoided inn the operating system implementation. |
Rule 11.7 |
Required |
NO |
YES |
|
Rule 11.8 |
Required |
NO |
YES |
|
Rule 11.9 |
Required |
NO |
YES |
|
Rule 11.10 |
Required |
NO |
YES |
|
Rule 12.1 |
Advisory |
NO |
NO |
|
Rule 12.2 |
Required |
NO |
YES |
|
Rule 12.3 |
Advisory |
NO |
NO |
|
Rule 12.4 |
Advisory |
NO |
NO |
|
Rule 12.5 |
Mandatory |
NO |
YES |
|
Rule 12.6 |
Required |
NO |
YES |
|
Rule 13.1 |
Required |
NO |
YES |
|
Rule 13.2 |
Required |
NO |
YES |
|
Rule 13.3 |
Advisory |
NO |
NO |
|
Rule 13.4 |
Advisory |
NO |
NO |
|
Rule 13.5 |
Required |
NO |
YES |
|
Rule 13.6 |
Required |
NO |
YES |
|
Rule 14.1 |
Required |
NO |
YES |
|
Rule 14.2 |
Required |
NO |
YES |
|
Rule 14.3 |
Required |
NO |
YES |
|
Rule 14.4 |
Required |
NO |
YES |
|
Rule 15.1 |
Advisory |
NO |
NO |
|
Rule 15.2 |
Required |
NO |
YES |
|
Rule 15.3 |
Required |
NO |
YES |
|
Rule 15.4 |
Advisory |
NO |
NO |
|
Rule 15.5 |
Advisory |
NO |
NO |
|
Rule 15.6 |
Required |
NO |
YES |
|
Rule 15.7 |
Required |
NO |
YES |
|
Rule 16.1 |
Required |
NO |
YES |
|
Rule 16.2 |
Required |
NO |
YES |
|
Rule 16.3 |
Required |
NO |
YES |
|
Rule 16.4 |
Required |
NO |
YES |
|
Rule 16.5 |
Required |
NO |
YES |
|
Rule 16.6 |
Required |
NO |
YES |
|
Rule 16.7 |
Required |
NO |
YES |
|
Rule 17.1 |
Required |
NO |
YES |
|
Rule 17.2 |
Required |
NO |
YES |
|
Rule 17.3 |
Mandatory |
NO |
YES |
|
Rule 17.4 |
Mandatory |
NO |
YES |
|
Rule 17.5 |
Required |
NO |
YES |
|
Rule 17.6 |
Mandatory |
NO |
YES |
|
Rule 17.7 |
Required |
NO |
YES |
|
Rule 17.8 |
Advisory |
NO |
NO |
|
Rule 17.9 |
Mandatory |
NO |
YES |
|
Rule 17.10 |
Required |
NO |
YES |
|
Rule 17.11 |
Advisory |
NO |
NO |
|
Rule 17.12 |
Advisory |
NO |
NO |
|
Rule 17.13 |
Required |
NO |
YES |
|
Rule 18.1 |
Required |
NO |
YES |
|
Rule 18.2 |
Required |
NO |
YES |
|
Rule 18.3 |
Required |
NO |
YES |
|
Rule 18.4 |
Advisory |
NO |
NO |
|
Rule 18.5 |
Advisory |
NO |
NO |
|
Rule 18.6 |
Required |
NO |
YES |
|
Rule 18.7 |
Required |
NO |
YES |
|
Rule 18.8 |
Required |
NO |
YES |
|
Rule 18.9 |
Required |
NO |
YES |
|
Rule 18.10 |
Mandatory |
NO |
YES |
|
Rule 19.1 |
Mandatory |
NO |
YES |
|
Rule 19.2 |
Advisory |
NO |
NO |
|
Rule 20.1 |
Advisory |
NO |
NO |
|
Rule 20.2 |
Required |
NO |
YES |
|
Rule 20.3 |
Required |
NO |
YES |
|
Rule 20.4 |
Required |
NO |
YES |
|
Rule 20.5 |
Advisory |
NO |
NO |
|
Rule 20.6 |
Required |
NO |
YES |
|
Rule 20.7 |
Required |
NO |
YES |
|
Rule 20.8 |
Required |
NO |
YES |
|
Rule 20.9 |
Required |
NO |
YES |
|
Rule 20.10 |
Advisory |
NO |
NO |
|
Rule 20.11 |
Required |
NO |
YES |
|
Rule 20.12 |
Required |
NO |
YES |
|
Rule 20.13 |
Required |
NO |
YES |
|
Rule 20.14 |
Required |
NO |
YES |
|
Rule 21.1 |
Required |
DISABLED |
NO |
This rule is not applicable for Phoenix-RTOS kernel source code, because common identifiers are defined within its codebase and custom implementation of libc libphoenix. |
Rule 21.2 |
Required |
DISABLED |
NO |
This rule is not applicable for Phoenix-RTOS kernel source code, because common identifiers are defined within its codebase and custom implementation of libc libphoenix. |
Rule 21.3 |
Required |
NO |
YES |
|
Rule 21.4 |
Required |
NO |
YES |
|
Rule 21.5 |
Required |
DISABLED |
NO |
This rule is not applicable for the Phoenix-RTOS kernel source code, because <signal.h> is provided as part of custom implementation of libc libphoenix and therefore has defined behavior. |
Rule 21.6 |
Required |
NO |
YES |
|
Rule 21.7 |
Required |
NO |
YES |
|
Rule 21.8 |
Required |
NO |
YES |
|
Rule 21.9 |
Required |
NO |
YES |
|
Rule 21.10 |
Required |
DISABLED |
NO |
This rule is not applicable for the Phoenix-RTOS kernel source code, because date and time functions are provided as part of custom implementation of libc libphoenix and therefore have defined behavior. |
Rule 21.11 |
Advisory |
NO |
NO |
|
Rule 21.12 |
Required |
NO |
YES |
|
Rule 21.13 |
Mandatory |
NO |
YES |
|
Rule 21.14 |
Required |
NO |
YES |
|
Rule 21.15 |
Required |
NO |
YES |
|
Rule 21.16 |
Required |
NO |
YES |
|
Rule 21.17 |
Mandatory |
NO |
YES |
|
Rule 21.18 |
Mandatory |
NO |
YES |
|
Rule 21.19 |
Mandatory |
NO |
YES |
|
Rule 21.20 |
Mandatory |
NO |
YES |
|
Rule 21.21 |
Required |
NO |
YES |
|
Rule 21.22 |
Mandatory |
NO |
YES |
|
Rule 21.23 |
Required |
NO |
YES |
|
Rule 21.24 |
Required |
NO |
YES |
|
Rule 21.25 |
Required |
NO |
YES |
|
Rule 21.26 |
Required |
NO |
YES |
|
Rule 22.1 |
Required |
NO |
YES |
|
Rule 22.2 |
Mandatory |
NO |
YES |
|
Rule 22.3 |
Required |
NO |
YES |
|
Rule 22.4 |
Mandatory |
NO |
YES |
|
Rule 22.5 |
Mandatory |
NO |
YES |
|
Rule 22.6 |
Mandatory |
NO |
YES |
|
Rule 22.7 |
Required |
NO |
YES |
|
Rule 22.8 |
Required |
NO |
YES |
|
Rule 22.9 |
Required |
NO |
YES |
|
Rule 22.10 |
Required |
NO |
YES |
|
Rule 22.11 |
Required |
NO |
YES |
|
Rule 22.12 |
Mandatory |
NO |
YES |
|
Rule 22.13 |
Required |
NO |
YES |
|
Rule 22.14 |
Mandatory |
NO |
YES |
|
Rule 22.15 |
Required |
NO |
YES |
|
Rule 22.16 |
Required |
NO |
YES |
|
Rule 22.17 |
Required |
NO |
YES |
|
Rule 22.18 |
Required |
NO |
YES |
|
Rule 22.19 |
Required |
NO |
YES |
|
Rule 22.20 |
Mandatory |
NO |
YES |
|
Rule 23.1 |
Advisory |
NO |
NO |
|
Rule 23.2 |
Required |
NO |
YES |
|
Rule 23.3 |
Advisory |
NO |
NO |
|
Rule 23.4 |
Required |
NO |
YES |
|
Rule 23.5 |
Advisory |
NO |
NO |
|
Rule 23.6 |
Required |
NO |
YES |
|
Rule 23.7 |
Advisory |
NO |
NO |
|
Rule 23.8 |
Required |
NO |
YES |