Menu Close

MCU Dev In Style

It always bothers me when I see ugly, unmaintainable MCU code, which seems to be prevalent in the embedded programming world. Everywhere I look, I see ugly code where all sorts of bugs can easily lurk!

NUCLEO-H743ZI Dev Board

I am an advocate of modern C++. I can use high-level constructs such as higher-order functions without ever sacrificing on performance. The code is just as fast and tight as, ugly, low-level C. C++ can be ugly too, but if you do it right, it can be elegant and beautiful!

Here’s an example of how I write mine, and I am proud of it! It’s one of my test programs: the obligatory blink LED sample code, but notice that here, we’re using three real-time threads, each blinking an LED at different rates (Aside: The observant reader might note this can also be done using timers instead of delays. Sure! But this particular example is about threads). In my opinion, using real-time threads is a must for any serious MCU development. This code runs on an STM32H7 480Mhz MCU.

int main()
{
   auto led1 = out<snq::led1>();
   auto led2 = out<snq::led2>();
   auto led3 = out<snq::led3>();

   auto f1 = snq::thread(
      [&]
      {
         while (true)
         {
            snq::delay_ms(1000);
            led1 = !led1;
         }
      }
   );

   auto f2 = snq::thread(
      [&]
      {
         while (true)
         {
            snq::delay_ms(500);
            led2 = !led2;
         }
      }
   );

   while (true)
   {
      snq::delay_ms(250);
      led3 = !led3;
   }
}