-
Docker and GitHub Actions for Embedded Compilation
Using Docker and GitHub actions to build an embedded project. These scripts have been added to to the modern C++ RISC-V blinky project to implement build on push. Dockerfile docker_entrypoint.sh action.yml .github/workflows/main.yml The general flow is: The github/workflows/main.yml has a trigger on push, this invokes an action in action.yml. The...
-
C++ Co-routines
A key feature of C++20 is co-routines. I’ve spent lots of time using python coroutines, greenlets and SystemC threading. Co-routines should allow a general model of event driven asynchronous programming. However, in C++ they are not easy at all… These references are critical: Lewis Baker’s “C++ Coroutines: Understanding Symmetric-Transfer” -...
-
Things to Think About When Doing Low Level Embedded Systems Development.
A draft for Medium. What are the foundations of designing and implementing low level software that interacts with real world systems? (By low level I mean baremetal or small footprint RTOS, on a small processor core - Not embedded Linux on a Cortex-A class MCU) An introductory embedded systems book...
-
RISC-V: A Baremetal Introduction using C++. Conclusion.
This post is a draft for Medium. This is the last post in the series. Is it possible to write pure modern C++ baremetal firmware from ground up for RISC-V? The answer is a qualified yes. The toolchain using Platform IO supported modern C++ with a small configuration change. The...
-
RISC-V: A Baremetal Introduction using C++. Interrupt Handling.
This post is a draft for Medium. This is the seventh post in a series. This post is about RISC-V interrupt handling in C++. What are the basics of interrupt handing in RISC-V? Can we utilize modern C++ to simplify the interrupt handling? RISC-V Machine Mode Interrupts The RISC-V ISA...