Following up on our previous post on understanding floating point math and speed of operations on 8-bit AVRs, we ran across an excellent article today on Arduino math optimization. Alan walks through his implementation of an exponential moving average algorithm. An exponential moving average normally requires floating point arithmetic, but due to the lack of native support on 8-bit AVRs, Alan worked out a way to do it with fixed point math.
After some experimentation, he was able to get his version running quite a bit faster than the floating point version, and offers a detailed writeup and tips along the way. Just as we found in our brief testing, the easiest AVR math optimization is to avoid division, since these processors don’t have a native divide instruction. If you’re looking to squeeze every last drop of performance out of your 8-bit chip and can’t (or won’t) upgrade to something more powerful, check this out for some good ideas.
Hello there and welcome back! Faster code Fridays is our weekly series that doesn’t ever fall on a Friday, unless our laziness becomes so strong that it interferes with our disregard for naming conventions. We figure we’ll forgetfully publish one of these things on a Friday at some point. Even a broken clock is right twice a day, eh?
If you’re a first-time visitor, Faster code Fridays highlights code optimization techniques that are useful for embedded systems. Embedded applications often deal with time critical applications that require maximum performance and minimum execution time. In fact, good coding practice is often more apparent when working with microcontrollers, because you don’t have four 4GHz cores and 8Gb of RAM to get you out of trouble. We’ll use Arduino-compatible code for most of our examples, though these techniques are applicable to AVR, PIC, or any number of platforms.
Embedded systems have never been more important. With the growth of trends such as Arduino, the “internet of things”, and inexpensive wireless connectivity, even seemingly simple devices can process data and communicate with the outside world.
Whether you are looking to gain a basic knowledge of circuits and electrical engineering or build on an established career, it’s important to learn from the right resources. The following books have been selected by the EngBlaze editorial team as some of the best guides to embedded systems development. These are only a taste of what’s available, but they provide a good introduction for various skill levels and backgrounds.
Everyone seems to have a snazzy weekly feature these days, and we didn’t want to feel left out. Unfortunately, we could only think of a few catchy names for our series, and it’s not Friday today. Oh well. Consider it a preview publication.
Embedded systems often deal with time critical applications that require maximum performance and minimum execution time. Writing efficient code requires solid study of language and platform fundamentals, and there’s no substitute for concentrated practice. However, there are small tips and tricks to squeeze the last drop of performance out of your programs. Faster code Fridays highlights these techniques so you can implement them into your repertoire. We’ll use Arduino-compatible code for most of our examples, though these techniques will work on a number of platforms.
Recently we’ve seen a few options for compiling and programming your processor of choice in the cloud. Online IDEs offer a lot of convenience, as you don’t have to worry about OS idiosyncrasies or implementation details on your specific machine. You simply put in source code and get compiled files out. Power users may want alternatives with more features, but just like other app categories, we’re guessing online development environments will get more polished as time goes on. Most online environments are limited to standard desktop languages, but lately some online options have popped up in the microprocessor arena.