@odin odinthe thener nerd not the god Auto-Intern GmbH 1 - - PowerPoint PPT Presentation

odin odinthe thener nerd
SMART_READER_LITE
LIVE PREVIEW

@odin odinthe thener nerd not the god Auto-Intern GmbH 1 - - PowerPoint PPT Presentation

@odinthenerd @odin odinthe thener nerd not the god Auto-Intern GmbH 1 @odinthenerd A possible future of embedded development Auto-Intern GmbH 2 @odinthenerd Sean Parent Auto-Intern GmbH 3 @odinthenerd Every rything is is


slide-1
SLIDE 1

@odinthenerd

@odin

  • dinthe

thener nerd

– not the god

Auto-Intern GmbH 1

slide-2
SLIDE 2

@odinthenerd

A possible future of embedded development

Auto-Intern GmbH 2

slide-3
SLIDE 3

@odinthenerd

Sean Parent

Auto-Intern GmbH 3

slide-4
SLIDE 4

@odinthenerd

Every rything is is Crap! A possible future of embedded development

Auto-Intern GmbH 4

slide-5
SLIDE 5

@odinthenerd

Auto-Intern GmbH 5

Are you a hard real-time system?

slide-6
SLIDE 6

@odinthenerd

Auto-Intern GmbH 6

Are you a hard real-time system?

Are you master of everything?

slide-7
SLIDE 7

@odinthenerd

Auto-Intern GmbH 7

Are you a hard real-time system?

Are you master of everything? Do you assume endless RAM?

slide-8
SLIDE 8

@odinthenerd

Auto-Intern GmbH 8

Realtime systems

slide-9
SLIDE 9

@odinthenerd

Auto-Intern GmbH 9

Realtime systems

slide-10
SLIDE 10

@odinthenerd

Auto-Intern GmbH 10

Realtime systems

slide-11
SLIDE 11

@odinthenerd

11

Functional Correctness

slide-12
SLIDE 12

@odinthenerd

12

Functional Correctness

Unit Tests

slide-13
SLIDE 13

@odinthenerd

13

Functional Correctness

Unit Tests

Localtity of Reasoning

slide-14
SLIDE 14

@odinthenerd

14

Functional Correctness

Unit Tests

Localtity of Reasoning

auto diego = std::make_unique<radioactive_frog>(charge::max_plad);

slide-15
SLIDE 15

@odinthenerd

15

Functional Correctness

Unit Tests

Localtity of Reasoning

{ auto diego = std::make_unique<radioactive_frog>(charge::max_plad); }

slide-16
SLIDE 16

@odinthenerd

16

Functional Correctness

Unit Tests

Localtity of Reasoning

{ auto diego = std::make_unique<radioactive_frog>(charge::max_plad); // lots of terrible things }

slide-17
SLIDE 17

@odinthenerd

17

Functional Correctness

Unit Tests

Localtity of Reasoning

{ auto diego = std::make_unique<radioactive_frog>(charge::max_plad); // lots of (moderately) terrible things }

slide-18
SLIDE 18

@odinthenerd

18

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

slide-19
SLIDE 19

@odinthenerd

19

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

slide-20
SLIDE 20

@odinthenerd

20

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space

slide-21
SLIDE 21

@odinthenerd

21

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space

Out of Memory?

slide-22
SLIDE 22

@odinthenerd

22

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space

Out of Memory? Buffer overflow?

slide-23
SLIDE 23

@odinthenerd

23

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space

Out of Memory? Buffer overflow? Stack Overflow

slide-24
SLIDE 24

@odinthenerd

24

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space

Out of Memory? Buffer

  • verflow?

Stack Overflow

slide-25
SLIDE 25

@odinthenerd

25

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space

Out of Memory? Buffer

  • verflow?

Time

Stack Overflow

slide-26
SLIDE 26

@odinthenerd

26

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space Time

Latentcy

Out of Memory? Buffer

  • verflow?

Stack Overflow

slide-27
SLIDE 27

@odinthenerd

27

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space Time

Latentcy Jitter

Out of Memory? Buffer

  • verflow?

Stack Overflow

slide-28
SLIDE 28

@odinthenerd

28

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space Time

Latentcy Jitter Dead Time

Out of Memory? Buffer

  • verflow?

Stack Overflow

slide-29
SLIDE 29

@odinthenerd

29

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space Time

Latentcy Jitter Dead Time Turn Around

Out of Memory? Buffer

  • verflow?

Stack Overflow

slide-30
SLIDE 30

@odinthenerd

30

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space Time

Latentcy Jitter Dead Time Turn Around Optimizer

Out of Memory? Buffer

  • verflow?

Stack Overflow

slide-31
SLIDE 31

@odinthenerd

31

Functional Correctness

Unit Tests

Localtity of Reasoning

Formal Proof

Space Time

Latentcy Jitter Dead Time Turn Around Optimizer Caching

Out of Memory? Buffer

  • verflow?

Stack Overflow

slide-32
SLIDE 32

@odinthenerd

Auto-Intern GmbH 32

slide-33
SLIDE 33

@odinthenerd

Race conditions

Auto-Intern GmbH 33

void some_ISR(){ global_thing++; } int main(){

  • -global_thing;

return 0; }

slide-34
SLIDE 34

@odinthenerd

Race conditions

Auto-Intern GmbH 34

auto w = global_thing;

  • -w;

global_thing = w;

slide-35
SLIDE 35

@odinthenerd

Race conditions

Auto-Intern GmbH 35

auto w = global_thing; void some_ISR(){ global_thing++; }

  • -w;

global_thing = w;

slide-36
SLIDE 36

@odinthenerd

Atomics to the rescue?

Auto-Intern GmbH 36

std::atomic<int> global_thing; void some_ISR(){ global_thing++; } int main(){

  • -global_thing;

return 0; }

slide-37
SLIDE 37

@odinthenerd

Atomics to the rescue?

Auto-Intern GmbH 37

std::atomic<int> global_thing; void some_ISR(){ global_thing++; } int main(){

  • -global_thing;

return 0; }

sorry, unimplemented: Thumb-1 hard-float VFP ABI

slide-38
SLIDE 38

@odinthenerd

Auto-Intern GmbH 38

Emil Fresk

slide-39
SLIDE 39

@odinthenerd

Auto-Intern GmbH 39

What abstractions can I use?

slide-40
SLIDE 40

@odinthenerd

Auto-Intern GmbH 40

What abstractions can I use?

slide-41
SLIDE 41

@odinthenerd

Register abstraction DSL

Auto-Intern GmbH 41

struct my_thing{ static constexpr auto init = list( set(thing_hw::super_bit), clear(thing_hw::naughty_bit), unsafe_write(42_c,thing_hw::danger_zone)); };

slide-42
SLIDE 42

@odinthenerd

Auto-Intern GmbH 42

Chiel Douwes

slide-43
SLIDE 43

@odinthenerd

What does the standard library provide?

  • <initializer_list> <cstddef>
  • <cstdarg> <type_traits>
  • <cstdint> <climits> <atomic>
  • <new> <limits>
  • <typeinfo> <exception> <cfloat>
  • <cstdlib> (program startup and termination)
  • <ciso646> <cstdalign> <cstdbool>

43

slide-44
SLIDE 44

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 44

slide-45
SLIDE 45

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 45

  • use an internal code generator
slide-46
SLIDE 46

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 46

  • use an internal code generator
  • use a declarative paradigm
slide-47
SLIDE 47

@odinthenerd

drivers

Auto-Intern GmbH 47

auto myUart = make_uart( interface<blocking_tx>, uart1, 9600_baud, rx = 0.9_pin, tx = 0.10_pin ); myuart.blocking_send("hello world");

slide-48
SLIDE 48

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 48

  • use an internal code generator
  • use a declarative paradigm
  • use Conan
slide-49
SLIDE 49

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 49

  • use an internal code generator
  • use a declarative paradigm
  • use Conan

SVD

slide-50
SLIDE 50

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 50

  • use an internal code generator
  • use a declarative paradigm
  • use Conan

SVD Python translator

slide-51
SLIDE 51

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 51

  • use an internal code generator
  • use a declarative paradigm
  • use Conan

SVD

Extend

Python translator

slide-52
SLIDE 52

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 52

  • use an internal code generator
  • use a declarative paradigm
  • use Conan

SVD conan

Extend

Python translator

slide-53
SLIDE 53

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 53

  • use an internal code generator
  • use a declarative paradigm
  • use Conan

SVD conan TMP

Extend

Python translator

slide-54
SLIDE 54

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 54

  • use an internal code generator
  • use a declarative paradigm
  • use Conan

SVD conan TMP User

Extend

Python translator

slide-55
SLIDE 55

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 55

  • use an internal code generator
  • use a declarative paradigm
  • use Conan

SVD conan TMP User

Extend

Python Translator

slide-56
SLIDE 56

@odinthenerd

drivers

Auto-Intern GmbH 56

auto myUart = make_uart( interface<blocking_tx>, uart1, 9600_baud, rx = 0.9_pin, tx = 0.10_pin ); myuart.blocking_send("hello world");

slide-57
SLIDE 57

@odinthenerd

How to target 10,000 platforms

Auto-Intern GmbH 57

  • use an internal code generator
  • use a declarative paradigm
  • use Conan

SVD conan TMP User

Extend

Python Translator

slide-58
SLIDE 58

@odinthenerd

Event based paradigm

Auto-Intern GmbH 58

  • Sleeping is trivial
slide-59
SLIDE 59

@odinthenerd

Event based paradigm

Auto-Intern GmbH 59

  • Sleeping is trivial
  • High priority latency tool enforceable
slide-60
SLIDE 60

@odinthenerd

Event based paradigm

Auto-Intern GmbH 60

  • Sleeping is trivial
  • High priority latency tool enforceable
  • Stack depth low and enforceable
slide-61
SLIDE 61

@odinthenerd

Event based paradigm

Auto-Intern GmbH 61

  • Sleeping is trivial
  • High priority latency tool enforceable
  • Stack depth low and enforceable
  • Traditionally event handlers = hard
slide-62
SLIDE 62

@odinthenerd

Event based paradigm

Auto-Intern GmbH 62

  • Sleeping is trivial
  • High priority latency tool enforceable
  • Stack depth low and enforceable
  • Traditionally event handlers = hard
  • Coroutines = awesome
slide-63
SLIDE 63

@odinthenerd

Event based paradigm

Auto-Intern GmbH 63

  • Sleeping is trivial
  • High priority latency tool enforceable
  • Stack depth low and enforceable
  • Traditionally event handlers = hard
  • Coroutines = awesome
  • We may be able to fix exceptions
slide-64
SLIDE 64

@odinthenerd

The world will be awesome, just different

Auto-Intern GmbH 64

slide-65
SLIDE 65

@odinthenerd

@odinthenerd

04.11.2016 Auto-Intern GmbH 65

  • Github.com
  • Twitter.com
  • Gmail.com
  • Blogspot.com
  • LinkedIn.com
  • Embo.io