A compiler and package set that enables Go programs to run on small 32-bit microcontrollers by generating C as intermediate code.
Emgo is a compiler and toolchain that allows developers to write embedded firmware in Go for small 32-bit microcontrollers. It translates Go code into C, which is then compiled using ARM GCC to produce binaries that run directly on bare-metal hardware. This enables Go's simplicity and productivity in resource-constrained embedded environments.
Embedded systems engineers and hobbyists working with ARM Cortex-M microcontrollers who want to use Go for firmware development. It's particularly suited for those targeting STM32 or nRF5 series chips.
Emgo provides a unique approach by generating C as intermediate code, leveraging mature ARM toolchains while allowing Go's expressive syntax. It's designed for minimal hardware requirements compared to alternatives like Embedded Go, making it ideal for very small MCUs.
Emgo: Bare metal Go (language for programming embedded systems)
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Generates lean C code without the full Go runtime, enabling operation on MCUs with as little as a few KB of RAM and Flash, aligning with its philosophy of efficiency for small hardware.
Leverages ARM GCC for compilation, benefiting from mature optimization and debugging tools in the embedded C ecosystem, as evidenced by the use of arm-none-eabi-* binaries in the setup.
Provides scripts for OpenOCD, ST-LINK, and Black Magic Probe, with RAM loading for faster iteration and ITM trace output for fmt.Print functions, enhancing development workflow.
Includes adapted packages for STM32 and nRF5 series, offering direct peripheral access without low-level C coding, as seen in the examples directory for various boards.
Only supports ARM Cortex-M microcontrollers, excluding other popular embedded architectures, which restricts its use in diverse hardware environments.
Requires manual installation of ARM toolchain, multiple environment variables, and is primarily tested on Unix-like systems, with Windows support being uncertain and cumbersome.
The README notes that main development has moved to Embedded Go, meaning Emgo may receive fewer updates and bug fixes, potentially impacting long-term viability.