Let’s face it. No matter how sophisticated our debug tools get, there will always be a place for an old fashioned printf statement. Unfortunately, printf tends be efficient and can dramatically affect the systems real-time performance. For developers using an Arm Cortex®-M3 or better, printf can be remapped to the Instrumentation Trace Macrocell (ITM) which … Continue reading Improve Debug Efficiency with the ITM
Figuring out how to size the stack for an embedded application and the tasks within it can be challenging. In many cases, developers will pick a value that they feel should be enough. These estimates are sometimes a little short, most of the time a gross estimation and rarely spot on. While I always encourage … Continue reading 3 Ways to Perform a Worst-Case Stack Analysis
There are many techniques and processes that developers can follow in order to minimize the defects (bugs) that find their way into embedded software. No matter how carefully one develops their software, there is always going to be a few that sneak through and require us to troubleshoot (debug) the software. In this post, we … Continue reading Evaluating and Mastering Real-Time Debugging Techniques
The oldest, tried and true debugging technique is to sprinkle printf statements throughout embedded software in the hope that an insight to the system behavior will be gleaned. Using printf is not always advisable and can unforeseen real-time implications for the system. Let’s examine the fundamental issues with printf and then a few techniques that … Continue reading Getting the most performance from printf
Debugging embedded software is my least favorite activity but unfortunately a necessary evil. Thankfully recent advances in technology and tool chain innovation has resulted in a plethora of techniques to drastically speed up the debugging process. Let’s examine a few techniques starting from our traditional debugging by break-point through the more advanced instrument trace techniques. … Continue reading 5 Debugging Techniques for the ARM Cortex-M MCU
The debugger is arguably one of the most important tools available to embedded software engineers. The debugger is capable of not only loading firmware on a microcontroller but can peer into the depths of memory and registers, revealing its inner workings. Despite the debuggers importance, many developers overlook some of the most useful features of … Continue reading How well do you know your debugger?
I recently wrote an article for embedded.com entitled “A Peek Inside Amazon FreeRTOS” where I started to analyze the high-level behavior that the Amazon FreeRTOS application exhibits while running on an STM32F475 IoT Discovery Node. In this post, I will continue the analysis by demonstrating how a developer can follow the communication flow and examine … Continue reading Amazon FreeRTOS: Behind the Scenes
I’m a big believer that having the right tools for the job not only can speed up the job, but can also improve the quality of the end product. That is why every month I look at a different tool that can aid developers. This month, I’ve decided to take a look at my newly … Continue reading Unboxing the arm ULINKplus Programmer
The very terminology that we use when developing embedded software can set our perspective and have potentially devastating effects on our ability to deliver successfully. The most commonly used term to describe an issue with software is that “there is a bug” or that the code is “buggy”. The term bug implies that there is … Continue reading Bugs and Errors and Defects, Oh My!
Semi-hosting is a debugging capability supported by ARM processors that allows the embedded target to access i/o capabilities on a host PC through the debugging interface. The i/o capabilities are most often used with printf to transmit text data to a virtual terminal within the debugging environment but it can also be used for file … Continue reading Tools – Getting a grip on Semi-hosting