Selecting the right emulator for the job can be challenging. Many development teams try to either skimp by using the emulator included with low cost development boards or purchase an emulator that is produced by their toolchain vendor. For example, teams using IAR Workbench may purchase an IAR I-Jet which integrates well and provides tools not otherwise available. Purchasing the emulator of a compiler vendor can be a good idea if you are tied to that one toolchain but if compilers change from project to project this may not be the wisest chose. I recently broke down and purchased a SEGGER J-Link Ultra+ (which I am absolutely loving so far) and here are some of the factors that I considered when selecting an new emulator.
1) Number of break-points
I hate playing the two break-point game. Place two critical break-points and restart your system and now you have disable one in order to get the debugger to stop complaining. Start the system, now reenable the breakpoint and debug. What a waste of time! As professional developers we should be looking to minimize debugging time and having the capability to have as many break-points as needed should be a major factor in deciding on the emulator. I’ve come across a number of “professional” $400 debuggers that still limit breakpoints to two so read the specifications closely! (The SEGGER J-Link Ultra+ has unlimited flash break-points!)
2) Choose a 3rd party emulator
Selecting an emulator that is produced by a compiler vendor can provide some really cool extra features such as energy correlation to the program counter. In some applications an energy monitor may be very useful but if the toolchain may change in the future, being tied to that emulator is going to cost more money in the long run. I’ve learned this lesson the hard way by first having an IAR I-Jet, then a Keil U-Link. An open source toolchain or another proprietary toolchain most likely won’t support these emulators. The alternative is to select a 3rd party vendor such as SEGGER. (I am only mentioning them a lot because I just purchased the J-Link Ultra+. I have no affiliation with SEGGER just to be totally transparent). A 3rd party emulator is usually supported by many compiler vendors and changing compilers won’t result in having to purchase a new emulator.
3) Cost shouldn’t be a factor
Emulators can be expensive! I spent roughly $800 on the SEGGER J-Llink Ultra+ and while I cringe at having spent that much, the value the emulator provides far outweighs the cost. The J-Link Ultra+ is faster, has unlimited break-points, is compatible with multiple toolchains, supports multiple microcontroller cores along with a number of other neat features. The emulator will no doubt not just survive multiple projects but be my primary emulator for the next 5 – 10 years. Even though the initial investment seems high, over the course of its use, a quality, fast and professional emulator will no doubt pay for itself multiple times over.