Ashok struggles with hard fault system crashes [don't miss this fresh take on a common problem]

Posted by Magnus Unemyr on May 16, 2017 9:00:00 AM

Ashok is a devoted Cortex-M developer. Meet him in this short video about the challenges of embedded development! In this episode, Ashok is stuck with mysterious hard fault exceptions that make his embedded system crash. Despite his years of development experience, he just can't figure out what is wrong with his excellent code.

Watch the movie below to get to know Ashok and his struggles!

Read More

Topics: Debugging

Graphical Visualization of the Internal Behavior of an RTOS [don't just see half the picture]

Posted by Magnus Unemyr on May 10, 2017 11:08:11 AM

Debugging RTOS-based applications often introduce new complexities. In this blog post, I will reveal a trick that can give you completely new insights into the system as you debug it.

Have you ever plotted the internal behavior of an RTOS graphically, live in real-time? If you haven’t, perhaps you should consider this powerful debug technique now. Read more to find out how!

Read More

Topics: Debugging, RTOS, SWV

Automate your ARM Cortex-M debug sessions [advanced GDB development and debugging]

Posted by Magnus Unemyr on Mar 3, 2017 1:56:37 PM

Debuggers are obviously created to help developers look inside the application as it executes in the target system. The whole point is to create an interactive, or semi-interactive, execution environment where the developer largely control the execution. But what if you want to completely automate the debugger? There are many use-cases where that is convenient.

In fact, this is possible using Atollic TrueSTUDIO. You can write script files that completely control the execution of the debugger. In effect, you can completely automate certain repetitive debugger tasks.

Read More

Topics: GNU tools (GCC/GDB), Debugging, Atollic TrueSTUDIO

The Ultimate Guide to ETM Instruction Tracing [Cortex-M debugging]

Posted by Magnus Unemyr on Nov 18, 2016 8:15:00 AM

Embedded developers can use a plethora of debugging technologies to solve their problems. But for the most difficult of bugs, there is one option in particular that many seasoned developers turn to - ETM instruction tracing. This is the "heavy guns" of debugging.

Read this blog post to learn more on ETM instruction tracing.

Read More

Topics: Debugging

How to use the most powerful debug techniques on ARM Cortex-M devices [SWV]

Posted by Magnus Unemyr on Nov 16, 2016 3:50:22 PM

While developing embedded software, you will introduce hard-to-find bugs sooner or later. We all think we won't, but most of us are wrong - we all do it. This is when you need a few tricks up your sleeves. You need professional debug capabilities, like SWV.

Serial Wire Viewer (SWV) real-time event- and data tracing are among the most valuable debugging techniques a Cortex-M developer can use. So useful, in fact, that I have written many blog posts on how to use SWV for debugging. To make it easier to find those blog posts, I took the time to list them all here, along with some annotations.

Read More

Topics: Debugging, Atollic TrueSTUDIO

8 debugging techniques every ARM developer should use

Posted by Magnus Unemyr on Oct 27, 2016 8:30:00 AM

I remember the old times. Debugging was mostly made using printf()-output that was redirected to a UART channel and a serial cable hooked up to a terminal window on the PC. This technique was however too slow when debugging interrupt handlers, so I had to toggle a LED or set a digital I/O pin and let the oscilloscope visualize its value, to see what happened inside the interrupt handler.

Sometimes, a rudimentary debugger with run-stop-step debugging was available, but not always. In a historical perspective, this was not so long ago, although younger developers will probably think it was during the medieval times. Luckily, modern developers now enjoy much better tools to look into the target system and debug it. In this blog post, I summarize my best advice for ARM Cortex-M debugging. I have saved my best advice to the very end!

Read More

Topics: Debugging, Embedded Software Development

Learn how to use SWV to do real-time data tracing on ARM Cortex-M devices [video tutorial]

Posted by Magnus Unemyr on Oct 14, 2016 8:51:02 AM

Cortex-M developers have fantastic debug capabilities right at their fingertips. One extremely useful debug capability, that Serial Wire Viewer (SWV) event- and data tracing enables, is real-time data tracing. With a debugger that supports this useful functionality, you can watch variable values live as the target system runs at full speed (no need to stop on a breakpoint to watch a variable value).

And not only that. You can even watch an "oscilloscope style" real-time graph, that plots variable values live as the target system run at full speed. And you can monitor the memory reads and writes of particular variables too, and use the data access history log to work out when and why a certain variable suddenly got that erroneous value it should never get. Learn how to use these powerful debug techniques in this free video tutorial!

Read More

Topics: Debugging, Atollic TrueSTUDIO

Code-block execution time measurement using SWV/ITM tracing [video tutorial]

Posted by Magnus Unemyr on Oct 7, 2016 10:47:22 AM

Most software developers are used to execution time profiling, where the execution time of different C functions are measured and visualized - usually as bar graphs with timing information added to the bars. But what if you want to measure the execution time of a code-block that is not exactly one complete function - and one function only?

Say, you want to measure the execution time of a block of code (for example, 15 lines of C code) somewhere deep within a function, or the time it takes from a push-button is clicked to some result is achieved. In the first example, you only want to measure the execution time of a small part of a C function, and in the latter example, you want to measure the execution time between two events across many functions. In neither of these cases, traditional execution time profiling is of any help. Luckily, you can easily do this using SWV/ITM tracing on Cortex-M microcontrollers. This free video tutorial show you how!

Read More

Topics: ARM Cortex, Debugging, Atollic TrueSTUDIO

Statistical profiling: Performance analysis using SWV [video tutorial]

Posted by Magnus Unemyr on Sep 27, 2016 10:19:10 AM

Using the Serial Wire Viewer event- and data tracing capability of most Cortex-M cores, you can use statistical profiling to quickly get a good understanding of how your software application uses the CPU resources. This insight is essential if you want to optimize your application for speed.

Atollic TrueSTUDIO supports SWV statistical profiling, thus giving developers a great tool for performance analysis and speed optimization. Watch this free video tutorial to learn how to use SWV statistical profiling:

Read More

Topics: Debugging, Atollic TrueSTUDIO

ARM development: what do Cortex developers want from a modern IDE?

Posted by Magnus Unemyr on Sep 21, 2016 11:46:28 AM

In terms of ARM development, many software developers spend a major part of the work week in front of their ARM development tools; primarily the IDE with its integrated C/C++ compiler and debugger. How does a modern ARM IDE compare to what embedded developers were using a few years ago?

In this blog post, I will highlight some of the advances the embedded market has made in terms of the C/C++ IDE (including the compiler and debugger itself) – and in particular, what tool features are now available for ARM Cortex developers specifically.
Read More

Topics: ECLIPSE, ARM Cortex, GNU tools (GCC/GDB), Debugging, Embedded Software Development, Project migration, version control, issue management, editing

Use DYNAMIC printf() during your debug sessions [be lazy and save time]

Posted by Magnus Unemyr on Sep 19, 2016 1:56:23 PM

printf()-style debugging has been around since the beginning of time (at least, since the beginning of the software industry). As popular as printf() debugging has been, and still is, it is very inconvenient and time-consuming.
Not only do you have to clutter your code with printf() instrumentation, you have to rebuild and relaunch the debug session every time you need to watch a new condition, and you lose the debug context every time you do so. But now, there is a better way: Dynamic printf().
Read More

Topics: ECLIPSE, Debugging, Atollic TrueSTUDIO

Read "Advanced development & debugging of ARM-based devices" [whitepaper series]

Posted by Magnus Unemyr on Aug 23, 2016 10:30:00 AM

Old habits can prevent you from making progress. It is often said that even after a long time, you only use the features of a software product you tried when you first installed the product. And so, many ARM Cortex developers still use only basic methodologies like single-stepping, running to breakpoints, and printf() debugging - despite having much more powerful capabilities already installed in their tools.

Make sure you don't fall behind other embedded developers - read this whitepaper to find out what great time-saving and quality-improving capabilities smart developers enjoy!

Read More

Topics: ARM Cortex, Software quality, Debugging, Atollic TrueSTUDIO, Embedded Software Development, version control, Getting Started, issue management