Go on Embedded Systems and WebAssembly
77 points by uticus 4 hours ago | 10 comments
carverauto 2 hours ago
We're using TinyGo and the Wazero runtime for our WASM plugin system in ServiceRadar, highly recommend both if you're using golang.
replytatjam 2 hours ago
Writing embedded code with an async-aware programming language is wonderful (see Rust's embassy), but wonder how competitive this is when you need to push large quantities of data through a micro controller, I presume this is not suitable for real-time stuff?
replynasretdinov 2 hours ago
You can disable GC in tinygo, so if you allocate all the necessary buffers beforehand it can have good performance with real-time characteristics. If you _need_ dynamic memory allocation then no, because you need GC it can't provide realtime guarantees.
replycarverauto 2 hours ago
We're streaming RSTP camera feeds through WASM plugins and host-bridge adapters, no problem. I was surprised how well it worked TBH.
replyhttps://code.carverauto.dev/carverauto/serviceradar/src/bran...
clktmr 2 hours ago
I've written a fair amount of code for EmbeddedGo. Garbage Collector is not an issue if you avoid heap allocations in your main loop. But if you're CPU bound a goroutine might block others from running for quite some time. If your platform supports async preemption, you might be able to patch the goroutine scheduler with realtime capabilities.
replyrandusername 49 minutes ago
Can you elaborate on this and how it would be different from signaling on interrupts and DMA?
replyHardware-level async makes sense to me. I can scope it. I can read the data sheet.
Software async in contrast seems difficult to characterize and reason about so I've been intimidated.
It does indeed produce much smaller binaries, including for macOS.