Back to résumé

Article ghostwritten for Wind River Systems.

GUIs for embedded applications 

Embedded computers (ECs) are showing up everywhere: medical equipment and machines, test instruments, office equipment, industrial process controls, PDAs, vehicle navigation and monitoring devices, set-top boxes, and home appliances.  These embedded software-based devices are becoming ubiquitous across vertical markets. However, despite the vertical market, graphical user interfaces (GUIs), once the domain of PC users only, are increasingly in demand for these smart devices.

The movement towards greater use of GUIs in embedded devices is based in part on user demand that these applications provide intuitive interfaces that make every feature easy to use.  This must be combined with a zero learning curve for people with no prior experience with the device. In addition, the phenomenal increase in net-centric computing has made it possible, and therefore an end-user expectation, to remotely access any kind of information.  New features and services can be added to an embedded device simply by downloading data over an information network, but GUIs must make this process painless for the user. To accomplish this, embedded GUIs have special requirements.

Embedded vs. Desktop

Unlike desktop computers, embedded devices are designed for specific and narrowly-defined purposes. They are also made of completely custom hardware and software integrations.  Manufacturers of ECs select the microprocessor, peripherals, memory, and supporting hardware that best serve the requirements of their product. Then, they choose the appropriate system software, including graphics toolkits for generating a device’s UI.  There can be no mass standardization because each EC is created to perform a unique function. 

Thus, the one-size-fits-all desktop GUIs that serve all users equally well (in theory, at least) cannot satisfy the extremely diverse graphics requirements of embedded and net-centric applications.  Any graphics solution for embedded applications must allow developers to design custom GUIs for any number of particular devices.

Another distinguishing factor between desktop GUIs and embedded GUIs is the difference in the end user learning curve required for each.  A desktop GUI such as Windows has pull-down menus that in turn may have sub-menu. But, at first glance, the meaning of the items on these menus may not be immediately apparent.  A user who had never seen a PC desktop previously would have to go through a complex learning process before he or she was able to use the desktop efficiently.

For most embedded applications, however, the developer cannot assume the user has any existing knowledge of or time to learn the user interface.  GUIs need to provide an interface that is so intuitive that a user with no prior experience with the device can leverage its capabilities immediately, with virtually no learning curve. 

Technical Issues

There are other critical requirements to consider before undertaking the design of a graphics solution for an embedded application.  If the right design parameters are included from the outset, a successful product can be assured and costly modifications late in the design process can be avoided.

Embedded environments involve custom hardware, so one of the most important requirements in embedded GUI design is that any GUI solution needs to be easily adaptable to non-standard hardware.  This is important because succeeding generations of a device might have processors, graphics controllers, or board layouts that differ from the original.  To make sure the GUI can be ported easily to the new architecture, software architecture should allow developers to write a new graphics driver for the GUI without impacting the rest of the software.

While the technology used to build a GUI is very important, it is ineffective without a graphics layer that glues a GUI's components to its hardware controller. This requires a 2-D stack for hardware abstraction that allows quick implementation of support for custom configurations or new graphics hardware. 

The 2-D stack needs to provide the flexibility for a variety of optimization (acceleration) requirements.  In order to incorporate the different acceleration features of a graphics chip, developers need to be able to optimize driver software one step at a time in a logical and efficient manner.  One tool that addresses this need is Wind River's Universal Graphics Library™ (UGL), a 2-D graphics stack for hardware abstractions that provides open application programming interfaces (APIs) for chip, input, and frame buffer specifics. 

Typically, writing a driver for a graphics controller requires a great deal of customization before it can provide the best performance for a particular application because different applications might have very different optimization requirements. For example, one application might heavily rely on drawing clipped rectangles whereas a different application needs to draw many ellipses. The large number of specialized graphics chips and the many different possible variations and optimizations for a driver make it unlikely that a given driver will be available as an off-the-shelf product.  The designer should plan to create a customized driver for each project.  This will require appropriate tool support and should be a consideration when choosing graphics libraries for embedded applications. 

Obviously, a GUI needs to be able to communicate with its underlying application, but in embedded devices the communications link must also shield the application so that the GUI won’t interfere with real-time performance.  For example, the interactive GUI on a TV set-top box must be able to order programming from a remote source without disrupting the TV signal.

To create GUI applications for use across a range of processors and applications, graphics products must be based on cross-platform standards and should be portable between different operating systems.  A manufacturer may use a GUI based on a C++ GUI library in an embedded application. He or she might also want to use the same interface, or components of it, in a non-embedded product using a different OS.  Designers will not want to write the same UI twice for two different operating systems.

Take future uses into account

Another primary consideration is scalability, since one of the most challenging elements in embedded design is extremely limited memory.  If there are portions of the software stack that are not required in the context of a specific application, the device designer should be able to scale those portions out of the stack to minimize the amount of RAM or ROM needed. 

Conservation of resources is equally important.  Desktop technologies are too resource-hungry to import into embedded applications. They require too much processing power as well as having large RAM and ROM requirements.  Developers need to use a suite of tools – such as Zinc™ – for the embedded environment that deals very carefully with system resources. 

Internationalization is particularly important for GUIs.  Often an embedded device is sold overseas as well as in the U.S.  A graphics solution must be easily adaptable to display dates, time, measurements, currency, and language in forms appropriate for the country where the device will be marketed.

The localization must be handled independently of the core application, however.  Most of the software will be the same no matter where the device is used, so it is not logical to have a separate version of the entire software package for each country where the device will be marketed.  The software that will stay the same will be the core application. For localization a separate software module should be provided that can be called from the core application.

Localization for Asian countries presents a special problem.  A normal 8-bit representation can handle 256 characters, which is enough for the Latin alphabet, but Asian languages have a very different constitution, where characters cannot be represented with an 8-bit value. A 16-bit value will reference about 65,000 characters, which is enough for all characters used throughout the world. A software stack needs to be able to deal with this different representation of characters.

Choose the right language

Before choosing a language to implement a GUI, it is important to analyze the specific requirements for the application. The principal choices are between Java and C++.  Although the two languages share certain attributes, they differ in significant ways that make one or the other more suitable for a given application, depending on the performance you need and the jobs the device must do.

C++ GUI libraries are an extension of the classic embedded-systems programming approach, with system libraries compiled for a specific target processor and linked with the real-time operating system.  This provides the highest performance and maximum scalability with a minimal memory footprint. The Zinc API is completely portable, allowing applications to be reused on a wide range of applications.  As a result, user interface developers can build and test a GUI on their preferred development platforms and later deploy it on the VxWorks® real time operating system (RTOS).

The Java™ programming language, especially the PersonalJava™ technology, offers standards-based API portability and efficiency for embedded applications with an economical memory footprint.  And because of its modular, object-oriented approach, Java is well-suited for writing GUIs. Because of Java's widespread use and its standardized APIs, there is a wide range of excellent commercial development tools available to help developers create user interfaces.  However, Java is slower than C++ due to its interpretative execution, so if performance is the ultimate criterion for an application, Java might not be the best approach.  Also, Java requires more memory than C++.  If a minimum memory footprint of two Mbytes or less is critical application, Java is not the best option.  The memory footprint for Zinc is less than one Mbyte, for Java it is two Mbytes plus.

If an embedded design requires the ability to download additional applications or upgrade a GUI once the device is in the field, Java is the best approach because it allows dynamic download so additional applications can be downloaded and existing applications can be upgraded.  There are also an increasing numbers of home appliances that offer services and/or upgrades via the Internet.  In the C++ approach everything is burned into ROM or built into the device, so it is suitable only for devices where upgrades and downloads are not required.

Another consideration is available programming expertise.  Building GUIs is still fairly new to many embedded developers.  There are plenty of people with C++ experience, but the API for embedded applications is relatively new one, so the learning curve may be significant when a developer new to embedded tries to get a product to market fast.  People with Java development experience may be more available.  However, the requirements of the application must be the developer’s first consideration.

Wind River addresses all of the requirements listed above with two products: Personal Jworks™ for developing GUIs in Java, and Zinc for GUIs implemented in C++.  Both products include Wind River’s Universal Graphics Library, a 2-D stack for hardware abstraction that allows developers to optimize driver software one step at a time, as described above.

###

 

Back to top           Back to résumé

Back to Word Sculptors main page