“RISC-V: A Baremetal Introduction using C++. Intro.



  • Verification and bring up of processor cores and peripherals.
  • Porting and debugging RTOSes for new processors, SoCs.
  • Deeply embedded firmware for USB-PD/USB Type-C and power conversion.
  • Debugging embedded Linux boot-up and drivers.
Ee Ja Nai Ka? FujiQ Highlands.
Bare-metal, not for everyday programming.

Modern C++?

  • About RISC-V, bare-metal programming, and C++.
  • What does a pure C++ application look like for embedded RISC-V?
  • Compiling, debugging, flashing to the RISC-V target.
  • What target platform and toolchains are used for this exercise?
  • How do RISC-V processors exit reset and set up the stack and global environment?
  • How can we use the C++ algorithms library to simplify startup?
  • What do we need RISC-V system registers for? How can we access them?
  • Can C++ hide the complexity of using special instructions?
  • What does the standard RISC-V timer look like?
  • How can we abstract timing using std::chrono in C++? Can C++ access MMIO registers?
  • What is the basic interrupt model or RISC-V?
  • What is a C++ lambda function? Can they handle interrupts in C++?

The Next Step.



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Phil Mulholland

Phil Mulholland

Experienced in Distributed Systems, Event-Driven Systems, Firmware for SoC/MCU, Systems Simulation, Network Monitoring and Analysis, Automated Testing and RTL.