C++ Exceptions for Smaller Firmwarestd::vector std::unordered_map std::shared_ptr 111213 Lets not forget about ● std::inplace_vector: p0843r8 voted into C++26 @ St Louis 2024 ISO C++ meetingTIME SPACE So why do firmware developers avoid C++ simplified Introduction to I2C SDA SCL SDA SCL SDA SCL ADDRESS (7-bit) Byte 0 STA NACK/ ACK W/R ACK Byte 1 ACK NACK Wanna Learn More? i2c-bus.org 23 STOPPossible I2C Errors 24 ⚠ ADDR NACK NACK Device Not Present IO ERROR Unexpected Bus State ADDRESS (7-bit) Byte 0 STA NACK/ ACK W/R ACK Byte 1 ACK NACK STOPLet's consider an I2C I/O expander 25 output_pin output_pin output_pin output_pin0 码力 | 237 页 | 6.74 MB | 6 月前3
Data Is All You Need for Fusioni < R1; i++) { for (int j = 0; j < C2; j++) { result[i][j] = 0; for (int k = 0; k < R2; k++) { result[i][j] += A[i][k] * B[k][j]; } } } caller: push r4 ; do work mov r0, #4 bl callee pop r4 ; do %7,%%r15; movq %1,%%r14; movq %6,%%r11; salq £4,%%r11;"\ "cmpq £24,%%r15; jb 3243431f;"\ "3243430:\n\t"\ COMPUTE_m24n4 "subq £24,%%r15; cmpq £24,%%r15; jnb 3243430b;"\ "3243431:\n\t"\ "cmpq £8,%%r15; jb "subq £8,%%r15; cmpq £8,%%r15; jnb 3243432b;"\ "3243433:\n\t"\ "cmpq £2,%%r15; jb 3243435f;"\ "3243434:\n\t"\ COMPUTE_m2n4 "subq £2,%%r15; cmpq £2,%%r15; jnb 3243434b;"\ "3243435:\n\t"\ "movq %%r14,%1;"\0 码力 | 151 页 | 9.90 MB | 6 月前3
Is std::mdspan a Zero-overhead Abstraction? - Oleksandr Bakirov - CppConr10, r11 add r9, r8 cmp rcx, rdi je .LBB0_16 .LBB0_3: test rsi, rsi je .LBB0_2 cmp rsi, 8 jb .LBB0_11 mov r11, rbx imul r11, rcx add r11, rdx mov r8, qword ptr [rsp - 32] imul r8, rcx add r8, qword ptr [rsp - 64] mov r15, r11 sub r15, r8 cmp r15, 32 jb .LBB0_11 mov r8, qword ptr [rsp - 40] imul r8, rcx add r8, qword ptr [rsp - 72] sub r11, r8 mov r8d, 0 cmp r11, 32 jb .LBB0_12 xor r8d, r8d .LBB0_9:0 码力 | 75 页 | 1.04 MB | 6 月前3
Adventures in SIMD Thinking (Part 1 of 2)pdst, rf_512 r) { _mm512_mask_storeu_ps(pdst, (__mmask16) 0xFFFFu, r); } r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r pdst pdstCopyright rf_512 r, msk_512 mask) { _mm512_mask_storeu_ps(pdst, (__mmask16) mask, r); } m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 m10 m11 m12 m13 m14 m15 0 0 1 1 0 0 1 1 0 0 0 0 1 1 1 1 m0 m1 r2 r3 m4 m5 r6 r7 m8 m9 m10 m10 m11 r12 r13 r14 r15 r mask r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 pdst pdstCopyright © 2020 Bob Steagall K E W B C O M P U T I N G 11 CppCon 2020 - Adventures in SIMD Thinking0 码力 | 88 页 | 824.07 KB | 6 月前3
Implementing Particle Filters with RangesVIEW std::generator (C++23) templateR, typename RNG, typename P = std::ranges::range_value_t<R>> requires std::ranges::random_access_range<R> && std::uniform_random_bit_generator RNG> && ParticleLike std::generator
sample(R&& particles, RNG& gen) { auto dist = particles | std::views::transform(&P::weight) | std::ranges: VIEW std::generator (C++23) template R, typename RNG, typename P = std::ranges::range_value_t<R>> requires std::ranges::random_access_range<R> && std::uniform_random_bit_generator 0 码力 | 83 页 | 4.70 MB | 6 月前3
Class Layout{R4‐R6,LR} MOV R4,R0 MOV R5,R2 MOV R6,R3 BL _Z9terminateP2HRP6Salary MOV R1,R5 MOV R0,R4 BL _Z9terminateP2HRP6Hourly MOV R1,R6 MOV R0,R4 POP {R4‐R6 {R4‐R6,LR} MOV R4,R0 MOV R5,R2 MOV R6,R3 BL _ZN2HR9terminateEP6Salary MOV R1,R5 MOV R0,R4 BL _ZN2HR9terminateEP6Hourly MOV R1,R6 MOV R0,R4 POP POP {R4‐R6,LR} B _ZN2HR9terminateEP4Temp 12 Identical Results, Up To Renaming Copyright © 2020 by Stephen C. Dewhurst and Daniel Saks Non-Static Data Member Layout What do we know about0 码力 | 51 页 | 461.37 KB | 6 月前3
Deciphering C++ CoroutinesResult r = outer_function (); }16/55 A mental model for coroutines: Cooperative Threads void spawn_task () { // ... Result r = outer_function (); } Result outer_function () { PartialResult r = middle_function from_partial_result (r); }16/55 A mental model for coroutines: Cooperative Threads PartialResult middle_function () { auto r = inner_function (); return PartialResult :: from_io_result (r); }16/55 A mental coroutines: Cooperative Threads PartialResult middle_function () { auto r = inner_function (); return PartialResult :: from_io_result (r); } IoResult inner_function () { auto data = blocking_io (...); //0 码力 | 156 页 | 1.79 MB | 6 月前3
Hidden Overhead of a Function APIeax ret 0 R A W str xzr, [x8] ret mov QWORD PTR [rdi], 0 mov rax, rdi ret sub rsp, 24 xor eax, eax mov QWORD PTR [rcx], rax mov rax, rcx add rsp, 24 ret 0 S M A R T 42armv8-a eax ret 0 R A W str xzr, [x8] ret mov QWORD PTR [rdi], 0 mov rax, rdi ret sub rsp, 24 xor eax, eax mov QWORD PTR [rcx], rax mov rax, rcx add rsp, 24 ret 0 S M A R T 43 x0 x86-64 gcc 14.2 (-m32) x86 msvc v19.40 VS17.10 mov r0, #60 bx lr mov eax, 60 ret mov eax, 60 ret 0 i n t mov r1, #60 str r1, [r0] bx lr mov eax, DWORD PTR [esp+4] mov DWORD PTR0 码力 | 158 页 | 2.46 MB | 6 月前3
Distributed Ranges: A Model for Building Distributed Data Structures, Algorithms, and Viewsnamespace std::ranges; using namespace std::execution; templateR> auto dot_product(R&& x, R&& y) { using T = range_value_t<R>; auto z = views::zip(x, y) | views::transform([](auto namespace std::ranges; using namespace std::execution; template R> auto dot_product(R&& x, R&& y) { using T = range_value_t<R>; auto z = views::zip(x, y) | views::transform([](auto namespace std::ranges; using namespace std::execution; template R> auto dot_product(R&& x, R&& y) { using T = range_value_t<R>; auto z = views::zip(x, y) | views::transform([](auto 0 码力 | 127 页 | 2.06 MB | 6 月前3
Balancing Efficiency and Flexibility: Cost of Abstractions in Embedded Systemspush {r0, r1, r2, lr} ldr r3, [pc, #28] ; (80001e4) mov r2, sp str r3, [sp, #0] movs r3, #6 strb r3, [r2, #4] ldr r3, [sp, #0] mov r0, sp ldr r3, [r3, #0] blx blx r3 ldr r3, [sp, #0] mov r0, sp ldr r3, [r3, #4] blx r3 b.n 80001d0 Nop ; (mov r8, r8) .word 0x08000258 0x08000258 : 0x080001b1 0x0800025c : 0x08000199 CPin address in r3. 43 : push {r0, r1, r2, lr} ldr r3, [pc, #28] ; (80001e4 ) mov r2, sp str r3, [sp, #0] movs r3, #6 strb r3, [r2, #4] ldr r3, [sp, #0] mov r0, sp 0 码力 | 75 页 | 2.12 MB | 6 月前3
共 262 条
- 1
- 2
- 3
- 4
- 5
- 6
- 27
相关搜索词
C++ExceptionsforSmallerFirmwareDataIsAllYouNeedFusionstdmdspanZerooverheadAbstractionOleksandrBakirovCppConAdventuresinSIMDThinkingPartofImplementingParticleFilterswithRangesClassLayoutDecipheringCoroutinesHiddenOverheadFunctionAPIDistributedModelBuildingStructuresAlgorithmsandViewsBalancingEfficiencyFlexibilityCostAbstractionsEmbeddedSystems













