Table of Contents

Embedded Overview

Overview of embedded system development.

Key Parameters

  1. Memory
  2. Storage
  3. Power
  4. Processing power

Tips

On ARM Processors:

On Arm there is the “pure” keyword which tells the compiler the computation is all contained within the function so the compiler can optimize it as much as possible. Not dependent on outside variables.

Example:

__pure int square(int x)
{ return x * x;
}

Integral Types

On ARM processors pass in 4 or less parameters to functions, they will be put in registers and save stack space!

Floating Point

IEEE754 standard

FPU - Floating point unit Does not take extra power Takes less procesisng power Make sure you need floats More memory needed when switching thread contents

Map File

Look at the *.map file at the end to see program memory usage ZI = Zero initialized data RW Data - read/write data

Bit manipulation

Binary can be like: 0c000100 Remember XOR! Great Macro:

#define MASK(0) ((uint8_t(1<<x))

Bit Fields

Better use of memory.

typedef union {
	struct{
		unsigned monday : 1;
		unsigned tuesday : 1;
		unsigned wednesday : 1;
		unsigned thursday : 1;
		unsigned friday : 1;
		unsigned saturday : 1;
		unsigned sunday : 1;
      	} days;
	uint8_t byte_sized;
} weekdays;

weekdays active_days;
active_days.days.monday = 0;

Qualifiers

Volatile

Being specific about variables

Volatile – tells the compiler that the variable may change at any time by some source other than the code it’s compiling. This may avoid the compiler optimizing out a section of code that appears to never get execute due to a conditional.

const

Function Alternatives

Macro Functions

#define square_macro(x) x*x
* part of the pre-processor

Error!

Square_macro(2+3) == 11, wrong answer!

* Macros should be one line
* Always in-line function. Bloat may occur, function would be better

Inline Functions

To force inlining:

	Int square_AI(unsigned char x)__attribute__((always_inline));
	Int square_AI(unsigned char x) {
		Return x*x;
 	}

To suggest inlining:

	Int inline square_SI(unsigned char x){
		Return x*x;
	}

Inline advantages over macros:

Floating Point Alternatives

System Design = Elevator

Design an elevator. Think about it, there are some user controls and indicators that need to be implements, some sensors and auto controls, some for safety.

Process car calls Process hall calls Indicate direction indicate current floor

Move and stop the car Emergency brake Open/close the door