Today Advanced embedded systems The point of the course Hardware stuff Software stuff Ariane 5 Details What happened? Need to look into the flight software… “Horizontal bias” converted from 64-bit float to a 16-bit integer The 16-bit int overflowed, throwing an exception Software reused from Ariane 4 – a slower vehicle Uncaught exception shut down the guidance computer …and the backup computer Rocket became unguided Started to disintegrate due to aerodynamic forces Then destructed Mars Pathfinder Lands on Mars July 4 1997 Mission is successful Behind the scenes… Sporadic total system resets on the rover Debugged on the ground, fixed by software patch Pathfinder Details Software run on vxWorks – a multitasking RTOS Problem: 1. 2. 3. 4. Vehicle control running at high priority Lots of stuff running at medium priority Meteorological science running at low priority Low priority software grabs a thread lock High priority software blocks on the lock Medium priority software runs for a long time Total reboot triggered by watchdog timer This is priority inversion Solutions exist, but you have to know when and how to use them CS 7962 Lab 3 ARM7 boards Students used iprintf() call for debugging 16364 total bytes of RAM 1024 bytes available for main stack 128 bytes available for interrupt stack Prints a string to serial port Uses up to about 2 KB of stack memory Most groups called iprintf() from both the main context and interrupt context Result Unpredictable operation due to memory corruption Software crashes Stack Problems The students Knew about stack overflow problems Knew the stack requirements of iprintf() And still made the mistake The Point #1 Easy: Hack up some embedded software that seems to work Hard: Make a rocket take off, fly to Mars, land a rover, drive it around, report back to Earth 1 bug == total mission failure Write control software that’s going to run on 25 M hybrid vehicles 1 bug == product recall (at best) Make a pacemaker that operates correctly for 10 years in every person using one 1 bug == lost lives, product recall, irreparable damage to company reputation The Point #2 Embedded system isn’t just a collection of isolated parts Many design decisions have implications for the whole system – are we using: Threads? Interrupts? Heap allocation? Address spaces? Many important system properties are global Stack and heap memory usage Effects of failures and bugs Energy usage Real-time deadlines The Point #3 Making a good embedded system isn’t just hacking All of these are just as important: Understanding the requirements Understanding the application domain Platform choice Toolchain choice Software architecture Timing analysis Memory usage analysis Fault vulnerability analysis Testing Certification The Point #4 Reading the reference manual is easy PWM, ADC, DAC, SCI, SPI, UART, I2C, CAN, LIN, 802.15.4, … Seeing the big picture is hard Main goal of my class: Help you see the bigger picture Lab Hardware Philips LPC 2129 Serial port for programming JTAG port for debugging Philips LPC2xxx Basic idea: Philips licenses the ARM7TDMI-S core from ARM, adds lots of cool external stuff, manufactures the chips LPC21xx 64 pins LQFP64 package – 1cm x 1cm No external bus LPC22xx 144 pins LQFP144 package – 2cm x 2cm External bus LPC2129 Cost: $6.75 in large quantities Designed for automotive and control applications Memory 16 KB on-chip SRAM 256 KB on-chip flash This has to suffice since there’s no external bus! 2 CAN channels CAN == Controller Area Network LAN for control applications Primarily used in automobiles Why 2 channels? More LPC2129 4 10-bit ADC channels 4 external interrupt lines Lots of general-purpose I/O lines A/D: Convert voltage in 0-3v range into a 10-bit integer A/D is slow – typically interrupt on completion Shared with other functionality I2C and SPI Standard embedded serial busses Generally used in master-slave mode Of course, serial protocols can also be implemented through bit-banging More LPC2129 2 UARTs 2 timers Point-to-point serial communication Lots of convenient features to reduce CPU usage FIFOs Buffer overrun detection Interrupts 32-bit timers with 32-bit prescalers Lots of features! Real-time clock Keeps calendar time More LPC2129 PWM Watchdog timer Reboot wedged processor PLL – phase locked loop Pulse width modulation Sort of a cheapo D/A converter Rapidly switch between low and high voltage, rely on external circuitry to average out Converts external 10-25 MHz clock into 10-60 MHz internal clock MAM – memory accelerator module Prefetches instructions Exploits multiple banks of flash memory Solves the problem of core outrunning the flash More LPC2129 JTAG support Provide visibility and controllability into the processor – used for debugging and testing Power management Idle mode Processor core shuts down until interrupt or reset arrives Peripherals keep running Power down mode RAM and registers saved Peripherals shut down Extremely low power consumption ARM Stuff 32-bit RISC Designed to be a compiler target Multiple processor modes We use ARM7TDMI Lots of registers Conditional execution Most instructions can use barrel shifter Bottom end of the ARM family No caches or memory protection hardware Runs below 100 MHz High end ARMs are pretty fast ~1 GHz Example: GCD int gcd (int i, int j) { while (i != j) { if (i>j) { i -= j; } else { j -= i; } } return i; } GCD in ARM Assembly 000000d4 <gcd>: d4: e1510000 d8: 012fff1e dc: e1510000 e0: b0610000 e4: a0601001 e8: e1510000 ec: 1afffffa f0: e12fff1e cmp bxeq cmp rsblt rsbge cmp bne bx r1, r0 lr r1, r0 r0, r1, r0 r1, r0, r1 r1, r0 dc <gcd+0x8> lr Labs 1. 2. 3. 4. 5. 6. 7. 8. 9. Get started with the board Data acquisition – angle measurement Analysis and measurement of stack depth and interrupt latency Audio input using ADC Audio output using PWM Audio DSP CAN bus networking Feedback control Distributed control That’s All Class is supposed to be fun Offered Fall 2006 Talk to current students I hope you’ll take it