As soon as we started programming, we found to our surprise that it wasn’t as easy to get programs right as we had thought. Debugging had to be discovered. I can remember the exact instant when I realized that a large part of my life from then on was going to be spent in finding mistakes in my own programs.

(Maurice Wilkes, 1949, architect of one of the first stored-program computers)

Avoiding Mysterious, Silent Failures of Your Arduino Sketch: Push PROGMEM to the far end

The featured picture of this post was created by DALL-E.

Have you ever used an Arduino Mega 2560 (or a similar board) and, at some point in the development process, experienced the LED mysteriously stopping to blink, garbled text being printed, or funny artifacts appearing in pictures? And all that without any apparent reason or any error or warning message? If you want to know what is behind it and how to solve this problem, read on.

Continue reading

Stop-and-Go

The featured picture of this blog post is by WikimediaImages on pixabay.

One typical debugging activity is setting breakpoints and then running the program from breakpoint to breakpoint, inspecting the program’s internal state at each breakpoint. While this sounds simple, it gets complicated when one looks behind the curtain, which we will do in this blog post.

Continue reading

SNAP: Debugging for the Masses

The featured picture of this post has been created by DALL-E.

Microchip recently lowered the price for its hardware debugger SNAP from more than €50 to less than €20 €10. I have recently created the Python script dw-gdbserver for this and other hardware debuggers so that you can now use SNAP in the Arduino IDE 2 to debug classic ATtinys and small ATmegas. All in all, this is an affordable and care-free debugging solution for classic AVRs.

Continue reading

Interrupted and Very Long Single-Steps

The featured picture of this post has been created by DALL-E.

It often happens in embedded debugging that you suddenly end up in the interrupt dispatch table while single-stepping through your code. Another unrelated problem is that sometimes, single steps can take an eternity. In this blog post, I address both issues and describe how to circumvent them in a gdbserver implementation.

Continue reading

Copyright © 2025 Arduino Craft Corner

Theme by Anders NorenUp ↑