Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby...

222
Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Transcript of Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby...

Page 1: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Enhancing Embedded Development with Ruby

RubyConf 2007Bill BerezaAtomic Objectatomicobject.com

Sunday, November 4, 2007

Page 2: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

What?

Sunday, November 4, 2007

Page 3: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Embedded C

Sunday, November 4, 2007

Page 4: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

8-bit PIC micro

Sunday, November 4, 2007

Page 5: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

How?

Sunday, November 4, 2007

Page 6: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

rake

Sunday, November 4, 2007

Page 7: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

argent

Sunday, November 4, 2007

Page 8: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

C unit tests

Sunday, November 4, 2007

Page 9: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

C mocks generated by Ruby

Sunday, November 4, 2007

Page 10: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

system testing in Ruby

Sunday, November 4, 2007

Page 11: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

continuous integration

Sunday, November 4, 2007

Page 12: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Why?

Sunday, November 4, 2007

Page 13: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

In the beginning...

Sunday, November 4, 2007

Page 14: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

programming required intense knowledge of the

machine

Sunday, November 4, 2007

Page 15: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

computers

Sunday, November 4, 2007

Page 16: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

not powerful

Sunday, November 4, 2007

Page 17: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

and tools were primitive

Sunday, November 4, 2007

Page 18: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

and there was much pain

Sunday, November 4, 2007

Page 19: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Sunday, November 4, 2007

Page 20: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

along came

Sunday, November 4, 2007

Page 21: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

compilers

Sunday, November 4, 2007

Page 22: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

languages

Sunday, November 4, 2007

Page 23: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

libraries

Sunday, November 4, 2007

Page 24: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

which helped some

Sunday, November 4, 2007

Page 25: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Today

Sunday, November 4, 2007

Page 26: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

automated tests

Sunday, November 4, 2007

Page 27: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

code generation

Sunday, November 4, 2007

Page 28: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

domain specific languages.

Sunday, November 4, 2007

Page 29: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

but

Sunday, November 4, 2007

Page 30: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

there's a problem.

Sunday, November 4, 2007

Page 31: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

embedded devices

Sunday, November 4, 2007

Page 32: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

are small

Sunday, November 4, 2007

Page 33: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

cheap

Sunday, November 4, 2007

Page 34: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

and they're everywhere.

Sunday, November 4, 2007

Page 35: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

The problem is

Sunday, November 4, 2007

Page 36: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

they are everywhere

Sunday, November 4, 2007

Page 37: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

they all have software

Sunday, November 4, 2007

Page 38: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

software contains bugs.

Sunday, November 4, 2007

Page 39: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

How it's usually done

Sunday, November 4, 2007

Page 40: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

write

Sunday, November 4, 2007

Page 41: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

flash

Sunday, November 4, 2007

Page 42: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

fiddle

Sunday, November 4, 2007

Page 43: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

debug

Sunday, November 4, 2007

Page 44: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

scope

Sunday, November 4, 2007

Page 45: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

try again.

Sunday, November 4, 2007

Page 46: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Unrepeatable

Sunday, November 4, 2007

Page 47: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

This leads to

Sunday, November 4, 2007

Page 48: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

hope

Sunday, November 4, 2007

Page 49: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

anger

Sunday, November 4, 2007

Page 50: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

fear.

Sunday, November 4, 2007

Page 51: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

The Goal

Sunday, November 4, 2007

Page 52: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Apply good practices

Sunday, November 4, 2007

Page 53: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

automation

Sunday, November 4, 2007

Page 54: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

unit tests

Sunday, November 4, 2007

Page 55: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

system tests

Sunday, November 4, 2007

Page 56: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

user stories

Sunday, November 4, 2007

Page 57: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

behavior driven

Sunday, November 4, 2007

Page 58: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

mocking

Sunday, November 4, 2007

Page 59: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

continuous integration.

Sunday, November 4, 2007

Page 60: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Vendor tools suck.

Sunday, November 4, 2007

Page 61: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Sunday, November 4, 2007

Page 62: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

IDEs oversimplify

Sunday, November 4, 2007

Page 63: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

and

Sunday, November 4, 2007

Page 64: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

also fail to do

Sunday, November 4, 2007

Page 65: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

what is needed,

Sunday, November 4, 2007

Page 66: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

like test

Sunday, November 4, 2007

Page 67: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

and automate.

Sunday, November 4, 2007

Page 68: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Debugging tools

Sunday, November 4, 2007

Page 69: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

are plentiful,

Sunday, November 4, 2007

Page 70: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

testing support is rare.

Sunday, November 4, 2007

Page 71: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Solution.

Sunday, November 4, 2007

Page 72: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Ruby

Sunday, November 4, 2007

Page 73: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

& tools written in

Sunday, November 4, 2007

Page 74: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

ruby

Sunday, November 4, 2007

Page 75: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

provide glue

Sunday, November 4, 2007

Page 76: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

for

Sunday, November 4, 2007

Page 77: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

all good practices.

Sunday, November 4, 2007

Page 78: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

The Project

Sunday, November 4, 2007

Page 79: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Automated guided vehicles

Sunday, November 4, 2007

Page 80: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

which are

Sunday, November 4, 2007

Page 81: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

self propelled

Sunday, November 4, 2007

Page 82: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

semi-autonomous

Sunday, November 4, 2007

Page 83: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

factory vehicles.

Sunday, November 4, 2007

Page 84: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Sunday, November 4, 2007

Page 85: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

4 basic types

Sunday, November 4, 2007

Page 86: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

forklifts

Sunday, November 4, 2007

Page 87: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

tow vehicles

Sunday, November 4, 2007

Page 88: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

unit load carriers (lift material on back)

Sunday, November 4, 2007

Page 89: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

carts (items are placed on the back)

Sunday, November 4, 2007

Page 90: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Shared hardware architecture

Sunday, November 4, 2007

Page 91: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

configurable boards

Sunday, November 4, 2007

Page 92: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

for

Sunday, November 4, 2007

Page 93: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

steering

Sunday, November 4, 2007

Page 94: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

speed

Sunday, November 4, 2007

Page 95: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

battery

Sunday, November 4, 2007

Page 96: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

navigation.

Sunday, November 4, 2007

Page 97: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Our first project

Sunday, November 4, 2007

Page 98: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

speed control

Sunday, November 4, 2007

Page 99: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Our second project

Sunday, November 4, 2007

Page 100: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

battery monitor

Sunday, November 4, 2007

Page 101: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Sunday, November 4, 2007

Page 102: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Embedded C

Sunday, November 4, 2007

Page 103: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Microchip PIC18F2480

Sunday, November 4, 2007

Page 104: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

16 kilobytes

Sunday, November 4, 2007

Page 105: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

FLASH

Sunday, November 4, 2007

Page 106: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

768 bytes

Sunday, November 4, 2007

Page 107: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

RAM

Sunday, November 4, 2007

Page 108: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

How Ruby helped

Sunday, November 4, 2007

Page 109: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

rake

Sunday, November 4, 2007

Page 110: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

rake test:system

Sunday, November 4, 2007

Page 111: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Written in

Sunday, November 4, 2007

Page 112: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Ruby.

Sunday, November 4, 2007

Page 113: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Uses systir

Sunday, November 4, 2007

Page 114: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

system testing framework

Sunday, November 4, 2007

Page 115: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

An example:

Sunday, November 4, 2007

Page 116: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

proves "the instantaneous battery level reported via CAN is correct."

set_battery_level_display_instantaneousset_can_status_mode_to CAN_STATUS_NORMAL

set_battery_data 700, 24, FLOODEDset_battery_current_for_vehicle_consuming_charge_with_amps 40set_battery_voltage 24 wait_for_battery_level_output 4

set_battery_voltage 25.80verify_battery_level_output_is 9

set_battery_voltage 22.8verify_battery_level_output_is 0

Sunday, November 4, 2007

Page 117: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

System tests

Sunday, November 4, 2007

Page 118: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

are function calls

Sunday, November 4, 2007

Page 119: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

in bm_driver.rb

Sunday, November 4, 2007

Page 120: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

def set_battery_voltage(voltage) @minilab.write_analog( VOLTAGE_OUTPUT_PIN, voltage / BATTERY_VOLTAGE_DIVIDER) end

Sunday, November 4, 2007

Page 121: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Ruby C extensions

Sunday, November 4, 2007

Page 122: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

minilab

Sunday, November 4, 2007

Page 123: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Hardware

Sunday, November 4, 2007

Page 124: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

digital & analog I/O

Sunday, November 4, 2007

Page 125: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Ruby class

Sunday, November 4, 2007

Page 126: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

provides

Sunday, November 4, 2007

Page 127: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

read_analog(channel)

Sunday, November 4, 2007

Page 128: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

write_analog(channel, volts)

Sunday, November 4, 2007

Page 129: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

read_digital(pin)

Sunday, November 4, 2007

Page 130: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

write_digital(pin)

Sunday, November 4, 2007

Page 131: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

The box

Sunday, November 4, 2007

Page 132: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

is wired

Sunday, November 4, 2007

Page 133: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

to the board.

Sunday, November 4, 2007

Page 134: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

pcan

Sunday, November 4, 2007

Page 135: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Hardware

Sunday, November 4, 2007

Page 136: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

CAN bus

Sunday, November 4, 2007

Page 137: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

to USB

Sunday, November 4, 2007

Page 138: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

The vehicles

Sunday, November 4, 2007

Page 139: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

use CAN

Sunday, November 4, 2007

Page 140: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

internally

Sunday, November 4, 2007

Page 141: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

between each board.

Sunday, November 4, 2007

Page 142: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

We use CAN

Sunday, November 4, 2007

Page 143: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

in system tests

Sunday, November 4, 2007

Page 144: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

to

Sunday, November 4, 2007

Page 145: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

simulate the system.

Sunday, November 4, 2007

Page 146: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Ruby class

Sunday, November 4, 2007

Page 147: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

provides

Sunday, November 4, 2007

Page 148: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

message methods.

Sunday, November 4, 2007

Page 149: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

receive_message(timeout)

Sunday, November 4, 2007

Page 150: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

transmit_message message

Sunday, November 4, 2007

Page 151: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

The Build Server

Sunday, November 4, 2007

Page 152: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

connected via

Sunday, November 4, 2007

Page 153: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

pcan and minilab

Sunday, November 4, 2007

Page 154: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

to the board.

Sunday, November 4, 2007

Page 155: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Sunday, November 4, 2007

Page 156: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

rake test:units

Sunday, November 4, 2007

Page 157: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

written in C

Sunday, November 4, 2007

Page 158: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

unity

Sunday, November 4, 2007

Page 159: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

C unit test library

Sunday, November 4, 2007

Page 160: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

small enough

Sunday, November 4, 2007

Page 161: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

argent

Sunday, November 4, 2007

Page 162: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

per unit test file

Sunday, November 4, 2007

Page 163: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

//[[$argent require 'generate_unity.rb'; generate_unity();$]]//[[$end$]]

Sunday, November 4, 2007

Page 164: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

parses test.c

Sunday, November 4, 2007

Page 165: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

generates and inserts

Sunday, November 4, 2007

Page 166: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

C code

Sunday, November 4, 2007

Page 167: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

main()

Sunday, November 4, 2007

Page 168: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

calls to unit tests

Sunday, November 4, 2007

Page 169: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

//[[$argent require 'generate_unity.rb'; generate_supermock("Model,Utilities");$]]//[[$end$]]

Sunday, November 4, 2007

Page 170: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

initializes mocks

Sunday, November 4, 2007

Page 171: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

for _all_ C files

Sunday, November 4, 2007

Page 172: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

except the ones passed in

Sunday, November 4, 2007

Page 173: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Model,Utilities

Sunday, November 4, 2007

Page 174: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

CMock

Sunday, November 4, 2007

Page 175: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

quick Ruby script

Sunday, November 4, 2007

Page 176: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

FUNC_MAGIC = /(\w*\s+)*(\w+)\s+(\w+)

\s*\(([^\)]*)\)/

Sunday, November 4, 2007

Page 177: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Parses .h

Sunday, November 4, 2007

Page 178: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

for each function

Sunday, November 4, 2007

Page 179: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

generates

Sunday, November 4, 2007

Page 180: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

function_ExpectAndReturn(args)

Sunday, November 4, 2007

Page 181: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

and writes

Sunday, November 4, 2007

Page 182: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Mock_file.c.

Sunday, November 4, 2007

Page 183: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

A unit test:

Sunday, November 4, 2007

Page 184: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

static void testCANConductorHandlesNewMessage_WhenNewMessageAvailable(void){ CANMessage message = {0};

HardwareEvents_GetDoCANOutput_Return(FALSE); CAN_IsNewMessageAvailable_Return(TRUE); CAN_GetNewMessage_Return(message); Model_ProcessCANMessage_Expect(message);

CANConductor_Run();}

Sunday, November 4, 2007

Page 185: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

For unit tests

Sunday, November 4, 2007

Page 186: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

we link

Sunday, November 4, 2007

Page 187: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

the file under test

Sunday, November 4, 2007

Page 188: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

to the mocked files.

Sunday, November 4, 2007

Page 189: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Built binary

Sunday, November 4, 2007

Page 190: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

run in a simulator.

Sunday, November 4, 2007

Page 191: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

One binary per

Sunday, November 4, 2007

Page 192: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

test file.

Sunday, November 4, 2007

Page 193: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Continuous integration

Sunday, November 4, 2007

Page 194: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

written in Ruby

Sunday, November 4, 2007

Page 195: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

monitors subversion

Sunday, November 4, 2007

Page 196: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

gets each checkin

Sunday, November 4, 2007

Page 197: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

runs rake.

Sunday, November 4, 2007

Page 198: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Unit tests run

Sunday, November 4, 2007

Page 199: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

in a simulator.

Sunday, November 4, 2007

Page 200: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

System tests run

Sunday, November 4, 2007

Page 201: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

on the build server.

Sunday, November 4, 2007

Page 202: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Actual production build

Sunday, November 4, 2007

Page 203: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

runs on the board.

Sunday, November 4, 2007

Page 204: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Benefits

Sunday, November 4, 2007

Page 205: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

C code is clean

Sunday, November 4, 2007

Page 206: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

DRY

Sunday, November 4, 2007

Page 207: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

and readable.

Sunday, November 4, 2007

Page 208: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

void CANConductor_Run(void){ if(HardwareEvents_GetDoCANOutput()) { CAN_SendMessage(Model_GetCANStatusMessage()); HardwareEvents_ClearDoCANOutput(); }

if(CAN_IsNewMessageAvailable() == TRUE) { Model_ProcessCANMessage(CAN_GetNewMessage()); }}

Sunday, November 4, 2007

Page 209: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Binary being tested

Sunday, November 4, 2007

Page 210: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

is actually

Sunday, November 4, 2007

Page 211: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

the binary deployed.

Sunday, November 4, 2007

Page 212: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

No magic test build.

Sunday, November 4, 2007

Page 213: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Readable system tests.

Sunday, November 4, 2007

Page 214: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Quick to write.

Sunday, November 4, 2007

Page 215: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Unit tests

Sunday, November 4, 2007

Page 216: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

test behavior.

Sunday, November 4, 2007

Page 217: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Unit and System

Sunday, November 4, 2007

Page 218: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

tests are easy

Sunday, November 4, 2007

Page 219: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

and fun to write.

Sunday, November 4, 2007

Page 220: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Customer is happy.

Sunday, November 4, 2007

Page 221: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Developers are happy.

Sunday, November 4, 2007

Page 222: Enhancing Embedded Development with Ruby RubyConf 2007 · Enhancing Embedded Development with Ruby RubyConf 2007 Bill Bereza Atomic Object atomicobject.com Sunday, November 4, 2007

Questions?

References:atomicobject.com - papers,

software

Sunday, November 4, 2007