Accelerating embedded design with cloud-enabled development platforms
In order to help programmers meet these challenges, the next generation of IDEs must provide seamless access to MCU manufacturers’ support services, support from user communities, as well as rich ecosystems of third-party applications and tools. They must also be able to serve as a virtual workspace that allows software and hardware engineers working in multiple locations to efficiently coordinate their efforts.
This article is intended to familiarize you with some of the common challenges involved with creating products based on today’s powerful, feature-rich MCUs and how cloud-enabled IDPs such as Atmel Studio 6 with the built-in app store Atmel Gallery. As you will see shortly, the term “IDP” distinguishes this new breed of development tool from traditional IDEs because IDPs provide end-to-end support for the embedded design cycle from project management and code generation to project engineering, testing and evaluation.
The Hidden Costs of Complexity
Nearly any designer who’s worked with embedded systems for a few years has witnessed a rapid evolution in the capabilities and complexity of the applications they create - and the MCUs that power them. The advanced processing architectures that power today’s MCUs use a combination of highly-efficient CPUs and dedicated hardware cores to deliver 10X or more MIPs/mW than an equivalent device did five years ago.
MCU makers use ever-shrinking process geometries to enhance these processors with generous amounts of memory, networking capabilities, and collections of application-specific peripherals. The resulting SoCs are powerful, complex platforms that allow developers to create cost-effective products with strategically-differentiated feature sets, capable of competing in demanding, mature markets.
Unfortunately, the complexity of modern MCUs that makes them so versatile also adds complexity to the development process. Furthermore, the IDEs and debug tool provided by MCU vendors were originally developed to support far less complex MCUs and software applications that mostly had to deal with hardware interfaces. Instead, today’s complex embedded systems are breeding new types of problems that are beyond the capabilities of what today’s IDEs were ever meant to provide.
Figure 1. Designers increasingly must deal with more complex end user devices - requiring more software design but being faced with disjointed tools and software eco-systems.
One common source of problems is the additional software required to deal with the multiple peripherals, I/O, and other hardware capabilities that have turned even modestly-priced MCUs into powerful SoCs. The additional drivers, APIs and extensive application code require the developer to create larger, more complex software structures, which are usually assembled from a combination of home-grown code and third-party IP collected from a variety of sources.
Until recently however, integrating blocks of ready-to-run code from IP vendors, user forums, and other sources that lie outside the IDE’s ecosystem has been a difficult process, requiring careful attention to the MCU’s specific hardware configuration and how it communicates with other software elements (pointers, memory allocation, interrupt priorities, etc…).