Stuff goes wrong - it is a fact of life. Embedded devices are typically very reliable, but not immune to failure. A common failure mode is a lock-up - the device freezes and will not respond to any user interaction. This could be caused by either a software or a hardware problem. A device can perform a self-test and sometimes software can preempt its own failure, but freezes happen, and what do you do?
Not long ago, I was on vacation and rented a car. To me, a car is a tin box full of embedded systems. This vehicle had more than most, as just about everything was automatic: proximity sensors all round, keyless ignition, automatic door locking and unlocking, automatic lights – the list goes on. In the space of five days, I observed two failures:
- The fuel gauge was apparently an analog needle but was actually driven by electronics. On starting the car, it would sweep from Empty to Full and back twice (like it was calibrating?), then settle on to the current fuel level. One day it settled on Empty, when I was sure that I had half a tank.
- One day I drove forward into a parking space. When I was ready to leave, I tried to put the car into Reverse (as this was in Europe, the car was what my American friends call “stick shift”). But I could not get it to select this gear.
Both these problems were fixed in the same way: turn off the car, wait and turn it back on again – in effect, cycling the power. They were both transient faults, as they did not reoccur.
Killing the power on a device is a little drastic, but it will very frequently address the problem of a freeze - at least temporarily, as the root cause may still be lurking. If the software was stuck in a loop, the resulting reset will cause the code to start over. If the cause of the looping was a software error, chances are that it will happen again. If it was a hardware fault - a peripheral not responding or a memory glitch - it may be transient, and the power cycle will have cleared it for good.
If the device has a power cord, then this drastic solution is a possibility. But what about the battery-powered devices that we all have: cellphones, MP3 players, digital cameras, GPS devices, TV/media remote controls? It used to be common for such devices to have a Reset button. This was typically recessed down a tiny hole and you would need a paper-clip to press it. It would normally have much the same effect as a power down - indeed, in some cases it might have actually interrupted the power, but I guess that asserting a general reset line was more likely.
Modern devices have no such reset facility. I just scoured my house looking for an example of something that did, and it took a while. Nowadays, it is usually a matter of finding the instruction manual, which will suggest something like "Press the Menu and the Vol+ buttons and hold for 7-10 seconds." And, most of the time, the device is reset, and all is well.
But this new approach has two drawbacks. First off, you need to know what arcane button pressing/holding sequence to perform. Second, it might not work. I am unsurprised that this approach does sometimes fail, as it has an in-built complexity that leads to just one more thing to go wrong. The detection of two buttons being pressed and held for a specific time period requires either software (which may have crashed) or some somewhat complex hardware (which may also fail).
Fortunately, there is often another option: pop the back off of the device, remove the battery, pause for a few seconds, then replace it. However, this is not always an option. Bring back the Reset button is what I say!
By the way, coming back to my car problems. It was very odd that the gear shift behaved like it did, as I would expect the stick to be mechanically linked to the gear-box. Not so. It is just a glorified joy-stick, that is made to feel like a “real” gear shift and tell a computer which gear you want. I suppose that this means that the manufacturer can produce an automatic shift version (or even convert a car) by just installing a slightly different lever and changing the software.