Embedded World 2011Express Logic announced the introduction of downloadable application modules for its ThreadX RTOS. Downloadable application modules enable ThreadX-based applications to dynamically receive additional instructions from local mass storage or a network. Applications therefore gain increased functionality without the cost of an increased footprint or additional memory.

This technique also provides on-demand reconfiguration and application updates for deployed systems. The ThreadX Module technology ideally suits situations where application code size exceeds available memory, when new modules need to be added after the product is deployed, or when partial firmware updates are required.

A kernel-module structure is commonly found in operating systems such as Windows and Linux, and in larger RTOSes, such as VxWorks and QNX. Such architecture and functionality is not commonly found in small-footprint RTOSes like ThreadX. Express Logic’s penetration of the RTOS glass ceiling provides a breakthrough for small-footprint applications, which require the reliability and responsiveness of ThreadX, but can now also use downloadable modules to achieve an even greater range of functionality and modularity in their designs.

Picture: Express Logic

ThreadX Modules are collections of application threads, not linked with the ThreadX kernel, but that are instead loaded into target memory and use ThreadX kernel services via an interface with the Module Manager. The ThreadX Module Manager, resident within the ThreadX kernel, initiates a module as well as fields and interfaces all module requests for ThreadX API services. Although there is only one copy of the Module Manager, there are no limits on the number of modules that can be loaded at the same time, and no limits on the number of threads in any one module. In this manner, the ThreadX kernel becomes a distinct execution entity, running continuously to serve Module requests.

If desired, application threads can alternatively be linked with the ThreadX kernel and reside in target memory as part of its executable image. While this option avoids the need to reload the modules containing these threads, it increases the size of the resident kernel image, leaving less memory for use by Modules.