Embedded Basics – The Difference between Restart and Reset
When using an Eclipse based IDE to debug an embedded system, undoubtedly the reader has come across the reset and restart buttons in the debug perspective. From a high-level view, these two options may seem the same but there are important differences on when a developer should use restart over reset. Let’s look at how these are used in a standard application and also when using a bootloader.

First, let’s discuss the basics and possibly the obvious. Pressing the reset button causes the program to reset to the application entry at “power-on reset”. When the reset button is pressed, a developer will find themselves in the processors reset handler. A developer can then step through all the code including the low-level initializations. There is often quite a bit that occurs before an application ever gets to main.
If a developer doesn’t care about what happens before main and simply wants to start the application over and get back to main, they can press the restart button. Restart is a combination operation. The result is the same as if a developer had pressed reset and then play with a break-point located on the first line of main. Restart is sometimes defined as the application from the entry point. (Notice that this is different than the power-on entry point).
Second, reset and restart may seem nearly identical for a developer working with a single application in memory but if a developer has a bootloader AND an application, that is where it gets interesting. During bootloader development, a develop may use debugger commands to directly access the application code space. These commands might be something like the following:
set $sp = *0x280000
set $pc = *0x280004
set {int}0xe000ed08 = 0x280000
These are telling the debugger on start-up to set the stack pointer, program counter and interrupt vector table to a location other than the first location in memory. When these commands are executed, something interesting and useful occurs that developers need to be aware. The reset button still behaves as expected. Pressing it will return to the reset entry-point which will be the bootloader reset vector. However, if a developer presses the restart button, they do not get a reset followed by a run. Instead, they will find themselves in the reset handler for their application code!
Developers who are working in just a single application space will hardly notice any difference between reset and restart. In fact, they will mostly favor restart. A developer working in an environment with a bootloader will still favor restart to debug and work with their application but reset will also provide them a way to enter their bootloader and debug the combined bootloader / application program.
Struggling to keep your development skills up to date or facing outdated processes that slow down your team, raise costs, and impact product quality?
Here are 4 ways I can help you:
- Embedded Software Academy: Enhance your skills, streamline your processes, and elevate your architecture. Join my academy for on-demand, hands-on workshops and cutting-edge development resources designed to transform your career and keep you ahead of the curve.
- Consulting Services: Get personalized, expert guidance to streamline your development processes, boost efficiency, and achieve your project goals faster. Partner with us to unlock your team's full potential and drive innovation, ensuring your projects success.
- Team Training and Development: Empower your team with the latest best practices in embedded software. Our expert-led training sessions will equip your team with the skills and knowledge to excel, innovate, and drive your projects to success.
- Customized Design Solutions: Get design and development assistance to enhance efficiency, ensure robust testing, and streamline your development pipeline, driving your projects success.
Take action today to upgrade your skills, optimize your team, and achieve success.
Very comprehensive explanation…Thanks.
Clear Idea ..Thanks
Very good information. Thanks for sharing Jacob