I wanted to share with this group my experience with finding an operating system that "out of the box" had most of the features our product, an oxygen concentrator, needed in a small FLASH footprint with solid performance.
I am the embedded firmware developer for this project. I have had over 33 years working with embedded systems, starting out with an Intel 8051 for an infrared touch panel controller for a flat panel AC plasma display to using the latest Kinetis KE14Z ARM Cortex-M0+ microcontroller for an oxygen concentrator. In the 1980s and 90s designing code to meet the requirements of a product that used a microcontroller was manageable for a single individual. As time marched on, the requirements for a product became more challenging to meet. Some of these features are USB connectivity (MSD), File Systems (FAT32), Ethernet connectivity (TCP/IP), bootloader for field upgradeability, cryptography, and LCD support. Designing embedded code with these features and without a reliable OS today can be an overwhelming task.
My recent project had me looking for a very low cost microcontroller that could meet the growing marketing requirements of this marketing such as:
- Allowing reliable field upgradeability through an easy and reliable method to update the firmware through a UART connection. uTasker has many other options to update firmware in the field securely through USB, MSD, SD, Ethernet, SPI FLASH.
- LCD support
- Fault tolerate storage of non-volatile data
- Smallest FLASH/RAM footprint because of high volume of the product
- A way to visualize during development, manufacture, and service the operation of the device.
After evaluating several manufacturer's microcontrollers, the most cost effecive solution was NXP's KE14Z microcontroller. The big differentiator was FreeMASTER. FreeMASTER far surpased the closest competitor, uC/Probe in my evaluation. The next step was to find an operating system and middleware. Looking first at FreeRTOS with FreeMASTER and SDK support worked well, but was lacking in requirements 1, 2, 3 and 4. As I searched the internet, I came across a product called, uTasker, by M.J.Butcher Consulting. Studying uTasker website, www.utasker.com, and its documentation/videos, it became clear that this product could meet all the requirments "out of the box". Since the full source code is available for evaluation as well as support from the author himself, Mark Butcher, I found the only cost I had was the evaluation time. What I have found during my 4 months of development on the project:
- uTasker is extremely code efficient. Most options are dependent on preprocessor definitions which only allow code to compile if the option is defined. Evaluating MCUXpresso SDK with the ConfigTools was found to use a much greater amount (8x) of code space than uTasker.
- uTasker is deterministic. I have designed my system for a 1 ms interrupt timer which is exactly 1 ms while maintaining the other support options being event driven in the background.
- DMA as well as hardware ADC sampling are designed into uTasker for the most efficient operation automatically taking advantage of hardware built into the microcontroller.
- Low power is designed into uTasker in every area that can be put into a low power mode when not used. If low power is not desired, using one simple definiton allows you to turn off this feature.
- uTasker is NOT multi-threading, but co-operative. This is an important point to remember. If you want to run two independent threads, you will need to design your code to manage them co-operatively. I found being forced to design this way made me more aware of potential problems and how to design them out before they became a problem.
- uTasker has a FREE simulator mode built in it that is really very good. uTasker was designed to work with Visual Studio. The same code that drives your embedded product can be recompiled to drive a virtual project. All the GPIO, USB, Ethernet, UART have been rerouted to use your PC resources within uTasker. You can even interact and customize the simulator graphics using various common PC tools.
- The cost of uTasker is very resonable for the quality and support that is given.
- Mark Butcher has been working on uTasker for over 12 years, so the product is very mature, stable, and continues to be supported with useful interfaces.
The only commitment is that you will need to put some time into reading the documentation and watching the videos to understand how to modify uTasker for your needs. From my point of view though, this is educational time (and fun) that even if you decide not to use uTasker, you will be a better embedded software developer because of this time investment.