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

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

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

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