MISRA-C. Subset of the C language for critical systems

Similar documents
Important From Last Time

Page 1. Stuff. Last Time. Today. Safety-Critical Systems MISRA-C. Terminology. Interrupts Inline assembly Intrinsics

CODE TIME TECHNOLOGIES. Abassi RTOS MISRA-C:2004. Compliance Report

SOFTWARE QUALITY OBJECTIVES FOR SOURCE CODE

IAR Embedded Workbench MISRA C:2004. Reference Guide

18-642: Code Style for Compilers

Axivion Bauhaus Suite Technical Factsheet MISRA

18-642: Code Style for Compilers

Motor Industry Software Reliability Association (MISRA) C:2012 Standard Mapping of MISRA C:2012 items to Goanna checks

CS 261 Fall C Introduction. Variables, Memory Model, Pointers, and Debugging. Mike Lam, Professor

MISRA-C:2012 Standards Model Summary for C / C++

Important From Last Time

Page 1. Today. Important From Last Time. Is the assembly code right? Is the assembly code right? Which compiler is right?

C Introduction. Comparison w/ Java, Memory Model, and Pointers

Page 1. Today. Last Time. Is the assembly code right? Is the assembly code right? Which compiler is right? Compiler requirements CPP Volatile

Short Notes of CS201

Dynamic Allocation in C

CS201 - Introduction to Programming Glossary By

Important From Last Time

Programming in C and C++

Pierce Ch. 3, 8, 11, 15. Type Systems

Guidelines for Writing C Code

September 10,

C Programming. Course Outline. C Programming. Code: MBD101. Duration: 10 Hours. Prerequisites:

Preface... (vii) CHAPTER 1 INTRODUCTION TO COMPUTERS

Programming in C and C++

Axivion Bauhaus Suite Technical Factsheet AUTOSAR

C Programming Review CSC 4320/6320

C Language Part 1 Digital Computer Concept and Practice Copyright 2012 by Jaejin Lee

CS 330 Lecture 18. Symbol table. C scope rules. Declarations. Chapter 5 Louden Outline

CSci 4061 Introduction to Operating Systems. Programs in C/Unix

CMPE-013/L. Introduction to C Programming

Writing an ANSI C Program Getting Ready to Program A First Program Variables, Expressions, and Assignments Initialization The Use of #define and

Binding and Variables

Review of the C Programming Language

Review of the C Programming Language for Principles of Operating Systems

CodeWarrior Development Studio for Microcontrollers V10.0 MISRA-C:2004 Compliance Exceptions for the HC(S)08, RS08 and ColdFire Libraries Reference

C++ Undefined Behavior What is it, and why should I care?

CSCE 314 Programming Languages. Type System

Advanced use of the C language

Variables Data types Variable I/O. C introduction. Variables. Variables 1 / 14

[0569] p 0318 garbage

ET156 Introduction to C Programming

Summer May 11, 2010

Undefined Behaviour in C

CSCI-243 Exam 1 Review February 22, 2015 Presented by the RIT Computer Science Community

A Fast Review of C Essentials Part I

CS3157: Advanced Programming. Outline

A Short Summary of Javali

Structure of Programming Languages Lecture 10

Arrays. Returning arrays Pointers Dynamic arrays Smart pointers Vectors

Dynamic Allocation in C

Operating Systems CMPSCI 377, Lec 2 Intro to C/C++ Prashant Shenoy University of Massachusetts Amherst

CSE 303: Concepts and Tools for Software Development

C++ Undefined Behavior

Please refer to the turn-in procedure document on the website for instructions on the turn-in procedure.

The Foundation of C++: The C Subset An Overview of C p. 3 The Origins and History of C p. 4 C Is a Middle-Level Language p. 5 C Is a Structured

CSCI 171 Chapter Outlines

Introduce C# as Object Oriented programming language. Explain, tokens,

CSE 374 Programming Concepts & Tools. Hal Perkins Fall 2015 Lecture 19 Introduction to C++

Structure of this course. C and C++ Past Exam Questions. Text books


Deep C (and C++) by Olve Maudal

CS527 Software Security

1 Lexical Considerations

DETAILED SYLLABUS INTRODUCTION TO C LANGUAGE

Procedures, Parameters, Values and Variables. Steven R. Bagley

C#: framework overview and in-the-small features

COMP6771 Advanced C++ Programming

10. Functions (Part 2)

CSE 374 Programming Concepts & Tools. Hal Perkins Spring 2010

STUDY NOTES UNIT 1 - INTRODUCTION TO OBJECT ORIENTED PROGRAMMING

Interview Questions of C++

COMP322 - Introduction to C++ Lecture 02 - Basics of C++

Functions. (transfer of parameters, returned values, recursion, function pointers).

C Refresher, Advance C, Coding Standard, Misra C Compliance & Real-time Programming

Introduction to Programming in C Department of Computer Science and Engineering. Lecture No. #43. Multidimensional Arrays

Computer Components. Software{ User Programs. Operating System. Hardware

Deep C by Olve Maudal

CS Programming In C

Writing Program in C Expressions and Control Structures (Selection Statements and Loops)

Part I Part 1 Expressions

Computer Science & Information Technology (CS) Rank under AIR 100. Examination Oriented Theory, Practice Set Key concepts, Analysis & Summary

5.Coding for 64-Bit Programs

LECTURE 18. Control Flow

CSE 307: Principles of Programming Languages

CMSC 330: Organization of Programming Languages. Memory Management and Garbage Collection

(heavily based on last year s notes (Andrew Moore) with thanks to Alastair R. Beresford. 1. Types Variables Expressions & Statements 2/23

TI2725-C, C programming lab, course

Ch. 3: The C in C++ - Continued -

calling a function - function-name(argument list); y = square ( z ); include parentheses even if parameter list is empty!

In Java we have the keyword null, which is the value of an uninitialized reference type

QUIZ. What is wrong with this code that uses default arguments?

MISRA C Technical Clarification 25 th July 2000 Introduction

Practical C++ Programming

QUIZ. What are 3 differences between C and C++ const variables?

Welcome to Teach Yourself Acknowledgments Fundamental C++ Programming p. 2 An Introduction to C++ p. 4 A Brief History of C++ p.

Names, Scope, and Bindings

Creating a String Data Type in C

INITIALISING POINTER VARIABLES; DYNAMIC VARIABLES; OPERATIONS ON POINTERS

Transcription:

MISRA-C Subset of the C language for critical systems

SAFETY-CRITICAL SYSTEMS System is safety-critical if people might die due to software bugs Examples Automobile stability / traction control Medical automation Many military applications You develop safety-critical software differently from non-critical software

MISRA-C MISRA Motor Industry Software Reliability Association Their bright idea: Can t avoid C But can force developers to avoid features of C that are known to be problematic Some language flaws Some legitimate features that happen to be bad for embedded software Most of MISRA-C is just good common sense for any C programmer

TERMINOLOGY Execution error: Something illegal done by a program Out-of-bounds array reference Divide by zero Uninitialized variable usage Trapped execution error: Immediately results in exception or program termination Untrapped execution error: Program keeps running But may fail in an unexpected way later on E.g., due to corrupted RAM In C, operations with undefined behavior are not trapped

SAFETY A safe language does not allow untrapped execution errors A statically safe language catches all execution errors at compile time Useful languages can t be completely statically safe Java is dynamically safe C and C++ are very unsafe MISRA C is not safe either However, adherence to MISRA-C can largely be statically checked This eliminates or reduces the likelihood of some kinds of untrapped execution errors

MISRA-C RULE 1.2 No reliance shall be placed on undefined or unspecified behavior. Lots of things in C have undefined behavior Divide by zero Out-of-bounds memory access Signed integer overflow Lots of things in C have implementation-defined and unspecified behavior printf ( a ) + printf ( b ); Both of these hard to detect at compile time, in general Implementation-defined behavior is fine in MISRA-C Why?

MISRA-C RULE 5.2 Identifiers in an inner scope shall not use the same name as an identifier in an outer scope, and therefore hide that identifier. int total; int foo (int total) { return 3*total; } What does this code mean? Why is it bad?

MORE MISRA-C Rule 6.3: Typedefs that indicate size and signedness should be used in place of the basic types. For example uint32_t or int8_t Why? Good idea in general? Rule 9.1: All automatic variables shall have been assigned a value before being used. Data segment: Initialized by programmer BSS segment: Initialized to zero Stack variables: Initialized to garbage

MORE MISRA-C Rule 11.1: Conversions shall not be performed between a pointer to a function and any type other than an integral type. Rule 11.5: A cast shall not be performed that removes any const or volatile qualification from the type addressed by a pointer.

MORE MISRA-C Rule 12.1: Limited dependence should be placed on C s operator precedence rules in expressions. What does this program mean? int main (void) { int x = 0; if (x & 1 == 0) { printf ("t\n"); } else { printf ("f\n"); } }

Rule 12.2: The value of an expression shall be the same under any order of evaluation that the standard permits. Rule 12.3: The sizeof operator shall not be used on expressions that contain side effects. E.g. sizeof(x++); What does this code mean? Absurd that this is permissible in the first place

Rule 12.4: The right-hand operand of a logical && or operator must not contain side effects. && and are short-circuited in C Evaluation terminates as soon as the truth of falsity of the expression is definite if(x y++){...} Can this be verified at compile time? What is a side effect anyway? Page fault? Cache line replacement?

12.10: The comma operator shall not be used. Some of the most unreadable C makes use of commas (C-=Z=!Z) (printf("\n "), C = 39, H--);

13.3: Floating-point expressions shall not be tested for equality or inequality. Why?

14.1: There shall be no unreachable code. Good idea? 14.7: A function shall have a single point of exit at the end of the function. Good idea?

16.2: Functions shall not call themselves, either directly or indirectly. 16.10: If a function returns error information, then that error information shall be tested. What does scanf() return? printf()? fclose()?

17.6: The address of an object with automatic storage shall not be assigned to another object that may persist after the first object has ceased to exist. int * foo (void) { } int x; int *y = &x; return y; This is a common (and nasty) C/C++ error How is this avoided in Java?

18.3: An area of memory shall not be reused for unrelated purposes. No overlays! 19.4: C macros shall only expand to a braced initializer, a constant, a parenthesized expression, a type qualifier, a storage class specifier, or a do-while-zero construct. 20.4: Dynamic heap memory allocation shall not be used. Woah!

MISRA LIMITATIONS What cannot be accomplished within the MISRA framework? Safety Eliminating the preprocessor Generics A shack built on a swamp

TOOL SUPPORT FOR MISRA Goals: Compiler should emit warning or error for any MISRA rule violation Should not emit warnings or errors for code not violating the rules Tools: Compilers from Green Hills, IAR, Keil PC-Lint Reportedly there is considerable variation between tools

OTHER LANGUAGE SUBSETS SPARK Ada Subset of Ada95 Probably the most serious attempt to date at a safe, statically checkable language for critical software Too bad Ada is so uncool... Embedded C++ No multiple inheritance No runtime type information (RTTI) No exceptions No templates No namespaces No new-style type casts

MORE SUBSETS J2ME Not actually a language subset Restricted Java runtime environment that has far smaller memory footprint Popular on cell phones, etc. JavaCard Very small targets 8-bit processors Basic ideas: A good language subset restricts expressiveness a little and restricts potential errors a lot All languages have warts (at least in the context of embedded systems) Simpler compilers may be better

SUMMARY C has clear advantages and disadvantages for building safety-critical embedded software MISRA-C mitigates some of the disadvantages Language subsetting can be a good idea