@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 Crap! A possible future of embedded development Auto-Intern GmbH 4
@odinthenerd Are you a hard real-time system? Auto-Intern GmbH 5
@odinthenerd Are you a hard real-time system? Are you master of everything? Auto-Intern GmbH 6
@odinthenerd Are you a hard real-time system? Are you master of everything? Do you assume endless RAM? Auto-Intern GmbH 7
@odinthenerd Realtime systems Auto-Intern GmbH 8
@odinthenerd Realtime systems Auto-Intern GmbH 9
@odinthenerd Realtime systems Auto-Intern GmbH 10
@odinthenerd Functional Correctness 11
@odinthenerd Functional Correctness Unit Tests 12
@odinthenerd Functional Correctness Localtity of Unit Tests Reasoning 13
@odinthenerd Functional Correctness Localtity of Unit Tests Reasoning auto diego = std::make_unique<radioactive_frog>(charge::max_plad); 14
@odinthenerd Functional Correctness Localtity of Unit Tests Reasoning { auto diego = std::make_unique<radioactive_frog>(charge::max_plad); } 15
@odinthenerd Functional Correctness Localtity of Unit Tests Reasoning { auto diego = std::make_unique<radioactive_frog>(charge::max_plad); // lots of terrible things } 16
@odinthenerd Functional Correctness Localtity of Unit Tests Reasoning { auto diego = std::make_unique<radioactive_frog>(charge::max_plad); // lots of (moderately) terrible things } 17
@odinthenerd Functional Correctness Localtity of Unit Tests Reasoning Formal Proof 18
@odinthenerd Functional Correctness Localtity of Unit Tests Reasoning Formal Proof 19
@odinthenerd Functional Correctness Localtity of Unit Tests Space Reasoning Formal Proof 20
@odinthenerd Functional Correctness Localtity of Unit Tests Space Reasoning Formal Proof Out of Memory? 21
@odinthenerd Functional Correctness Localtity of Unit Tests Space Reasoning Formal Proof Out of Memory? Buffer overflow? 22
@odinthenerd Functional Correctness Localtity of Unit Tests Space Reasoning Formal Proof Out of Memory? Buffer overflow? Stack Overflow 23
@odinthenerd Functional Correctness Localtity of Unit Tests Reasoning Formal Proof Space Out of Buffer Memory? overflow? Stack Overflow 24
@odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Space Out of Buffer Memory? overflow? Stack Overflow 25
@odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Latentcy Space Out of Buffer Memory? overflow? Stack Overflow 26
@odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Latentcy Jitter Space Out of Buffer Memory? overflow? Stack Overflow 27
@odinthenerd Functional Correctness Time Localtity of Unit Tests Reasoning Formal Proof Latentcy Jitter Dead Time Space Out of Buffer Memory? overflow? Stack Overflow 28
@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
@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
@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
@odinthenerd Auto-Intern GmbH 32
@odinthenerd Race conditions void some_ISR(){ global_thing++; } int main(){ --global_thing; return 0; } Auto-Intern GmbH 33
@odinthenerd Race conditions auto w = global_thing; --w; global_thing = w; Auto-Intern GmbH 34
@odinthenerd Race conditions auto w = global_thing; void some_ISR(){ global_thing++; } --w; global_thing = w; Auto-Intern GmbH 35
@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
@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
@odinthenerd Emil Fresk Auto-Intern GmbH 38
@odinthenerd What abstractions can I use? Auto-Intern GmbH 39
@odinthenerd What abstractions can I use? Auto-Intern GmbH 40
@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
@odinthenerd Chiel Douwes Auto-Intern GmbH 42
@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
@odinthenerd How to target 10,000 platforms • • • Auto-Intern GmbH 44
@odinthenerd How to target 10,000 platforms • use an internal code generator • • Auto-Intern GmbH 45
@odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • Auto-Intern GmbH 46
@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
@odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan Auto-Intern GmbH 48
@odinthenerd How to target 10,000 platforms • use an internal code generator • use a declarative paradigm • use Conan SVD Auto-Intern GmbH 49
@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
@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
@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
@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
@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
@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
@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
@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
@odinthenerd Event based paradigm • Sleeping is trivial • • • • Auto-Intern GmbH 58
@odinthenerd Event based paradigm • Sleeping is trivial • High priority latency tool enforceable • • • Auto-Intern GmbH 59
@odinthenerd Event based paradigm • Sleeping is trivial • High priority latency tool enforceable • Stack depth low and enforceable • • Auto-Intern GmbH 60
@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
@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
@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
@odinthenerd The world will be awesome, just different Auto-Intern GmbH 64
Recommend
More recommend