odin odinthe thener nerd
play

@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


  1. @odinthenerd @odin odinthe thener nerd – not the god Auto-Intern GmbH 1

  2. @odinthenerd A possible future of embedded development Auto-Intern GmbH 2

  3. @odinthenerd Sean Parent Auto-Intern GmbH 3

  4. @odinthenerd Every rything is is Crap! A possible future of embedded development Auto-Intern GmbH 4

  5. @odinthenerd Are you a hard real-time system? Auto-Intern GmbH 5

  6. @odinthenerd Are you a hard real-time system? Are you master of everything? Auto-Intern GmbH 6

  7. @odinthenerd Are you a hard real-time system? Are you master of everything? Do you assume endless RAM? Auto-Intern GmbH 7

  8. @odinthenerd Realtime systems Auto-Intern GmbH 8

  9. @odinthenerd Realtime systems Auto-Intern GmbH 9

  10. @odinthenerd Realtime systems Auto-Intern GmbH 10

  11. @odinthenerd Functional Correctness 11

  12. @odinthenerd Functional Correctness Unit Tests 12

  13. @odinthenerd Functional Correctness Localtity of Unit Tests Reasoning 13

  14. @odinthenerd Functional Correctness Localtity of Unit Tests Reasoning auto diego = std::make_unique<radioactive_frog>(charge::max_plad); 14

  15. @odinthenerd Functional Correctness Localtity of Unit Tests Reasoning { auto diego = std::make_unique<radioactive_frog>(charge::max_plad); } 15

  16. @odinthenerd Functional Correctness Localtity of Unit Tests Reasoning { auto diego = std::make_unique<radioactive_frog>(charge::max_plad); // lots of terrible things } 16

  17. @odinthenerd Functional Correctness Localtity of Unit Tests Reasoning { auto diego = std::make_unique<radioactive_frog>(charge::max_plad); // lots of (moderately) terrible things } 17

  18. @odinthenerd Functional Correctness Localtity of Unit Tests Reasoning Formal Proof 18

  19. @odinthenerd Functional Correctness Localtity of Unit Tests Reasoning Formal Proof 19

  20. @odinthenerd Functional Correctness Localtity of Unit Tests Space Reasoning Formal Proof 20

  21. @odinthenerd Functional Correctness Localtity of Unit Tests Space Reasoning Formal Proof Out of Memory? 21

  22. @odinthenerd Functional Correctness Localtity of Unit Tests Space Reasoning Formal Proof Out of Memory? Buffer overflow? 22

  23. @odinthenerd Functional Correctness Localtity of Unit Tests Space Reasoning Formal Proof Out of Memory? Buffer overflow? Stack Overflow 23

  24. @odinthenerd Functional Correctness Localtity of Unit Tests Reasoning Formal Proof Space Out of Buffer Memory? overflow? Stack Overflow 24

  25. @odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Space Out of Buffer Memory? overflow? Stack Overflow 25

  26. @odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Latentcy Space Out of Buffer Memory? overflow? Stack Overflow 26

  27. @odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Latentcy Jitter Space Out of Buffer Memory? overflow? Stack Overflow 27

  28. @odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Latentcy Jitter Dead Time Space Out of Buffer Memory? overflow? Stack Overflow 28

  29. @odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Latentcy Jitter Dead Time Turn Around Space Out of Buffer Memory? overflow? Stack Overflow 29

  30. @odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Latentcy Jitter Dead Time Turn Around Space Out of Buffer Optimizer Memory? overflow? Stack Overflow 30

  31. @odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Latentcy Jitter Dead Time Turn Around Space Out of Buffer Caching Optimizer Memory? overflow? Stack Overflow 31

  32. @odinthenerd Auto-Intern GmbH 32

  33. @odinthenerd Race conditions void some_ISR(){ global_thing++; } int main(){ --global_thing; return 0; } Auto-Intern GmbH 33

  34. @odinthenerd Race conditions auto w = global_thing; --w; global_thing = w; Auto-Intern GmbH 34

  35. @odinthenerd Race conditions auto w = global_thing; void some_ISR(){ global_thing++; } --w; global_thing = w; Auto-Intern GmbH 35

  36. @odinthenerd Atomics to the rescue? std::atomic<int> global_thing; void some_ISR(){ global_thing++; } int main(){ --global_thing; return 0; } Auto-Intern GmbH 36

  37. @odinthenerd Atomics to the rescue? std::atomic<int> global_thing; void some_ISR(){ global_thing++; } int main(){ --global_thing; return 0; } sorry, unimplemented: Thumb-1 hard-float VFP ABI Auto-Intern GmbH 37

  38. @odinthenerd Emil Fresk Auto-Intern GmbH 38

  39. @odinthenerd What abstractions can I use? Auto-Intern GmbH 39

  40. @odinthenerd What abstractions can I use? Auto-Intern GmbH 40

  41. @odinthenerd Register abstraction DSL 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)); }; Auto-Intern GmbH 41

  42. @odinthenerd Chiel Douwes Auto-Intern GmbH 42

  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

  44. @odinthenerd How to target 10,000 platforms • • • Auto-Intern GmbH 44

  45. @odinthenerd How to target 10,000 platforms • use an internal code generator • • Auto-Intern GmbH 45

  46. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • Auto-Intern GmbH 46

  47. @odinthenerd drivers auto myUart = make_uart( interface<blocking_tx>, uart1, 9600_baud, rx = 0.9_pin, tx = 0.10_pin ); myuart.blocking_send( "hello world" ); Auto-Intern GmbH 47

  48. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan Auto-Intern GmbH 48

  49. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan SVD Auto-Intern GmbH 49

  50. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan Python SVD translator Auto-Intern GmbH 50

  51. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan Extend Python SVD translator Auto-Intern GmbH 51

  52. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan Extend Python SVD conan translator Auto-Intern GmbH 52

  53. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan Extend Python SVD conan TMP translator Auto-Intern GmbH 53

  54. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan Extend Python SVD conan TMP User translator Auto-Intern GmbH 54

  55. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan Extend Python SVD conan TMP User Translator Auto-Intern GmbH 55

  56. @odinthenerd drivers auto myUart = make_uart( interface<blocking_tx>, uart1, 9600_baud, rx = 0.9_pin, tx = 0.10_pin ); myuart.blocking_send( "hello world" ); Auto-Intern GmbH 56

  57. @odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan Extend Python SVD conan TMP User Translator Auto-Intern GmbH 57

  58. @odinthenerd Event based paradigm • Sleeping is trivial • • • • Auto-Intern GmbH 58

  59. @odinthenerd Event based paradigm • Sleeping is trivial • High priority latency tool enforceable • • • Auto-Intern GmbH 59

  60. @odinthenerd Event based paradigm • Sleeping is trivial • High priority latency tool enforceable • Stack depth low and enforceable • • Auto-Intern GmbH 60

  61. @odinthenerd Event based paradigm • Sleeping is trivial • High priority latency tool enforceable • Stack depth low and enforceable • Traditionally event handlers = hard • Auto-Intern GmbH 61

  62. @odinthenerd Event based paradigm • Sleeping is trivial • High priority latency tool enforceable • Stack depth low and enforceable • Traditionally event handlers = hard • Coroutines = awesome Auto-Intern GmbH 62

  63. @odinthenerd Event based paradigm • 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 Auto-Intern GmbH 63

  64. @odinthenerd The world will be awesome, just different Auto-Intern GmbH 64

Recommend


More recommend