A C++ bare metal programming environment for Raspberry Pi, providing libraries and drivers for hardware control without an OS.
Circle is a C++ bare metal programming environment for Raspberry Pi single-board computers, enabling developers to write low-level applications that run directly on the hardware without an operating system. It provides comprehensive libraries to interact with the board's peripherals, offering full hardware control and real-time capabilities for embedded development.
Embedded systems developers and hobbyists working with Raspberry Pi hardware who need direct hardware access, real-time performance, or want to build custom firmware without an OS. This includes those developing IoT devices, robotics controllers, custom peripherals, or educational bare-metal projects.
Developers choose Circle for its clean, object-oriented C++ interface to Raspberry Pi hardware, extensive driver support (including USB, networking, displays, and storage), and multi-core/architecture compatibility across most Raspberry Pi models. Unlike OS-based approaches, it eliminates OS overhead for maximum hardware control and deterministic performance.
A C++ bare metal environment for Raspberry Pi with USB (32 and 64 bit)
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Circle provides extensive, object-oriented C++ classes for GPIO, USB, networking, displays, and more, as detailed in the features table, enabling full hardware control without OS interference.
Supports both 32-bit (AArch32) and 64-bit (AArch64) builds across Raspberry Pi 2/3/4/5 with multi-core processing, allowing scalable bare-metal applications.
Includes kernel logging, hardware exception handlers, GDB support, QEMU emulation, and a Kernel Address Sanitizer (Kasan) for memory debugging, as outlined in the debug support section.
Regular releases like 50.1 add features (e.g., NVMe driver, Kasan) and fixes, with detailed documentation and community-driven add-ons ensuring ongoing relevance.
Requires downloading specific toolchains (e.g., GCC 14.3.1), editing configuration files like Rules.mk, and manual SD card firmware copying, which is cumbersome compared to OS-based setups.
Features vary by Raspberry Pi model; for instance, the frame buffer is 'limited' on Pi 5, FIQ is unsupported, and some drivers like NVMe are experimental, leading to fragmentation.
As a bare-metal environment, it lacks the vast library ecosystem of Linux, requiring developers to port or implement functionality from scratch, increasing development time.