How long has Express Logic been in business?
Express Logic was founded in 1996 and started licensing THREADX in early 1997. Over the years we have added more and more solutions that now comprise X-WARE IoT PLATFORM.Learn more about Express Logic
What is X-WARE IoT PLATFORM?
X-WARE IoT PLATFORM is the collection of X-WARE run-time solutions including THREADX, FILEX, GUIX, NETX, NETX DUO, and USBX.Explore our Solutions
What is Industrial Grade?
Industrial Grade is what separates X-WARE IoT PLATFORM from the competition, including open source or so called free solutions. Industrial Grade means that all of our products have an emphasis on size, safety, security, advanced technology, speed, and ease-of-use.Industrial Grade
Which safety standards is X-WARE IoT PLATFORM certified to?
THREADX, FILEX, NETX DUO are pre-certified to IEC 61508 SIL 4, IEC 62304 Class C, ISO 26262 ASIL D, UL/IEC 60730, UL/IEC 60335, UL 1998, and EN 50128 SW-SIL 4. In addition, THREADX is MISRA C compliant.
Does X-WARE IoT PLATFORM include source code?
Yes, most X-WARE IoT PLATFORM solution licenses include full ANSI C source code. Please refer to our white paper
Consider the Source for additional information on the source code quality of X-WARE IoT PLATFORM.
Does X-WARE IoT PLATFROM include any open source?
No, there is absolutely no open source or third party source code in our X-WARE IoT PLATFROM solution.
Do X-WARE IoT PLATFORM licenses have run-time royalties?
No, standard X-WARE IoT PLATFORM licenses are royalty-free. Licenses are also reasonably priced and include lower cost, entry level options. Please contact us for more information on licensing.
Does Express Logic provide training?
Yes, Express Logic does provide training at our facility in San Diego, CA. We also provide on-site training. Please check out the training pages on our website for more in-depth information on our training program.Training program
Does Express Logic provide BSPs?
In general, Express Logic leverages BSPs from each semiconductor manufacturer for use within X-WARE IoT PLATFORM.
What processor/tools are supported?
X-WARE IoT PLATFORM supports most popular processors and development tools. Please refer to the solution pages for specific information.Explore our Solutions
Does THREADX (X-WARE in general) Require a Bootloader?
THREADX does not require a bootloader itself and is in general bootloader agnostic. A typical use of THREADX is to be linked and located as part of the application program in a device’s flash memory, where the entry point is tied to the reset vector. However, there are some applications that do require a bootloader. In such applications, THREADX simply looks like the application code image so nothing special is required in THREADX. In either case, THREADX doesn’t know or really care how it was loaded and thus stays out of the way of the application’s particular boot sequence needs.
How do I get started with THREADX?
Each distribution of THREADX contains the Express Startup PDF that details how to get the THREADX demonstration up and running in 4 easy steps!
I’m new to using an RTOS, what resources are available for getting started?
The THREADX User Guide and the THREADX text book
Real-Time Embedded Multithreading are excellent resources to help get you started. The text book includes examples that run on Windows. In addition, there are many example solutions available for web download from our site.
How difficult is it to add THREADX to an existing non-RTOS “main” program?
Adding THREADX to an existing stand-alone program is very easy. To create a simple one thread system, all you will need to do is add a call to
main and add a new function
tx_application_define and a simple thread. You will also need to build the THREADX library and add that to the linker step of your build process. Here is a small example from the THREADX User Guide:
What processor resources does THREADX require?
Aside from memory and the processor register set, THREADX requires one periodic timer interrupt to drive all of the time-related functionality, e.g., thread sleeping, time-slicing, timeouts on API calls, and application timers. It’s also important to note that all non-time related functionality will work without any timer source, which may be an option for some applications.
What timer frequency does THREADX require?
THREADX has no specific requirement with regard to timer frequency. The higher the frequency the better resolution the time functionality is, but with a cost of more overhead. That said, most demonstrations of THREADX are setup with a 10ms timer periodic.
How do I get THREADX setup on my own custom board?
It’s generally useful to start with the supplied THREADX demonstration that runs under simulation or on a vendor’s evaluation board. In general, migrating THREADX to custom hardware is straightforward. It’s probably good to first get a simple
hello world main program running on your board. Once this is in place, THREADX can be added by adding the FREE_MEM section to the linker control file, calling tx_kernel_enter from main and defining tx_application_define that creates at least one thread. The only thing left at this point is setting put the periodic timer so all the THREADX time-related services are operational. The supplied THREADX demonstration will include an example timer interrupt and this is the best reference for setting up your own custom timer. On some architectures, there won’t be any changes required.
Can THREADX APIs be called from ISRs?
Yes, a sub-set of the THREADX API is allowed to be called from ISRs. Please reference the
THREADX Managed Interrupts section in Chapter 3 of the THREADX User Guide for the complete list of APIs that can be called from ISRs. In addition, each API description in Chapter 4 of the THREADX User Guide details what context the API can be called from. It’s important to note that the ISRs that interact with THREADX must also conform to certain conventions that are target specific. Please refer to the ISR section of the readme_threadx.txt document for further details.
Do ISRs need to be in assembly language?
This depends on the processor and in some case the tools. In most architectures, assembly code is required between the interrupt vector and ISR code written in C. Furthermore, the assembly ISR code usually is required to call _tx_thread_context_save and _tx_thread_context_restore at the beginning and end of the assembly ISR code. However, some Cortex-M versions of THREADX do not require any ISR assembly code or calls to _tx_thread_context_save and _tx_thread_context_restore. Please refer to the readme_threadx.txt document for ISR requirements specific to the version of THREADX you are using.
How does THREADX optimize ISR processing?
This is somewhat processor specific, but basically THREADX saves only the complier scratch registers at the beginning of ISR processing. If not preemption is required (due to the ISR processing), the ISR simply recovers the scratch registers and returns to the point of interrupt. Preemption caused by the ISR is the only situation where THREADX performs a context switch back to the core scheduler.
Is the thread stack used in ISR?
No. The thread stack is used to save the compiler scratch registers, but before the ISR processing is executed THREADX switches to the system stack. Because of this, the application does not have to “build-in” the worst case ISR stack size into each thread’s stack requirements. Of course, in some architectures like Cortex-M, this is done automatically by the processor.
How do I select thread priorities?
The basic recommendation on selecting thread priorities is to only use a higher-priority when preemption is absolutely required. In other words, it is best to use as few different priorities as possible. Please refer to the “Choose Thread Priorities Wisely” white paper in the resource center for a more in-depth answer.
How big should my thread stack be?
A thread’s stack must be large enough to handle the worst case stack usage in the call tree from the thread’s entry function plus the amount of stack required to save the register context as defined in the readme_threadx.txt for your specific version of THREADX. Please refer to the
Avoid Stack Overflow white paper in the resource center for a more in-depth answer.
Does THREADX support memory protection?
The thread model is the standard THREADX usage. In this model all threads share (have access to) the same address space. In this mode, the MMU and MPU can be setup statically to protect against code writing over the instruction areas, accessing address 0, etc. Dynamically memory protection is also possible, but is under application control. For thread-level memory protection, an add-on product called THREADX MODULES is available. This product makes it possible to create a separate address space around one or more threads in a module. A thread in a module with memory protection cannot access any memory outside of the module. Please refer to the THREADX MODULES information on the THREADX page of the web site.
Does THREADX support multicore environments?
Yes. THREADX supports both AMP and SMP environments. THREADX AMP is basically standard THREADX running in a separate image on each of the processors, communicating through shared memory. THREADX SMP is a separate product that from one image performs dynamic load balancing over all available cores.
What is preemption-threshold?
Preemption-threshold is a technology only available in THREADX. Preemption-threshold is designed to provide granularity to critical sections – instead of disabling all thread scheduling preemption-threshold makes it possible to only disable scheduling up to a certain priority level that corresponds to only the threads that are participating in the critical section. This technology helps make the system more responsive, reduces unnecessary context switching, and helps guarantee scheduling in certain conditions. Please refer to the “Preemption-Threshold Improves Performance” white paper in the resource center for a more in-depth answer.
What is Event Chaining in THREADX?
Event chaining is a technology unique to THREADX to link objects together via application-defined callbacks when certain events take place. For example, the application can register a callback that is called whenever a message is placed on a group of queues. The callback could in turn set a semaphore whenever there is a message on any of the queues. By doing this, a thread can then wait on just the semaphore. When the semaphore is placed, the thread then can interrogate the queues and find the message. Doing this allows one thread to process multiple objects, thus alleviating the need to dedicate a thread to each system object. Please refer to the
Reduce Overhead with Event Chaining white paper in the resource center for a more in-depth answer.
How do I get started with FILEX?
Each distribution of FILEX contains the Express Startup PDF that details how to get the FILEX demonstration up and running in 4 easy steps!
What file formats are supported by FILEX?
FILEX supports FAT 12/16/32 and exFAT file formats (including long file names).
Is there any limit on the size of the media?
No, providing the media has a FAT compatible format, FILEX can support it.
Does FILEX support SD Cards?
Yes, providing the SD Card has a FAT format, FILEX supports it – as well as any physical media with a FAT format.
What does a FILEX driver need?
FILEX drivers are very simple, basically consisting of sector read/write services. Please refer to Chapter 5 of the FILEX User Guide for a complete description.
Is FILEX fault tolerant?
Yes, FILEX has a fault tolerant option that uses a journaling technique to keep the file system coherent across unexpected power loss situations. Please refer to Chapter 6 of the FILEX User Guide for a complete description.
Does FILEX allow pre-allocation of clusters for faster file writing?
Yes, there are APIs to pre-allocate clusters prior to file writing.
What performance optimizations are available in FILEX?
FILEX provides a logical sector cache, a FAT entry cache, and direct, multi-sector read/write capabilities.
How do I get started with GUIX?
Each distribution of GUIX contains the Express Startup PDF that details how to get the GUIX demonstration up and running in 4 easy steps!
What Languages are supported?
GUIX utilizes UTF8 string encoding internally, enabling support for all global languages. GUIX Studio assists with creating multi-lingual applications by defining a string table, which encodes all statically defined strings for each supported language, and supports export and import of string data.
What fonts can I use with GUIX?
GUIX Studio supports all TrueType and OpenType fonts. Fonts are rendered within GUIX Studio and converted to an optimized format compatible with the GUIX font rendering software. Express Logic provided a small set of TrueType fonts that you are free to use in your applications, and you can also explore the web looking for suitable fonts or you can contract with a font foundry to provide a custom font for your application.
Can I put the application resources in remote storage (i.e. thumb drive, etc.)?
The default and simplest method of binding your application resources (fonts, pixelmaps, strings, and colors) is to generate a source code format resource file using GUIX Studio, and compile and link this resource file with your own application source files. In addition, however, GUIX supports runtime installation of the application resources. GUIX Studio can optionally generate the resource data in .srec format, ready to be programmed into flash memory by your target tools. During startup, your application can call into the GUIX API to install those resources into the GUIX resource tables. Resources tables can also be modified at any time, allowing your application to be re-themed as desired.
Does GUIX support sprites and other animations?
Yes! GUIX provides a gx_sprite widget, in addition to gx_animation_manager, which makes it easy to create sprites and implement various types of animation.
Does GUIX support my hardware graphics accelerator?
When Express Logic creates the hardware display driver for a particular hardware target, if that CPU supports a 2D graphics accelerator and/or multiple graphics planes, Express Logic always customizes the display driver software to take full advantage of the available hardware graphics capabilities.
Can I run GUIX on an RTOS other than THREADX?
Although GUIX is optimized to take advantage of THREADX, we do provide an RTOS binding layer, which implements the required OS services in a generic way. To run on an RTOS other than THREADX, you need to modify this binding layer, which contains about 10 small C functions, so that it correctly calls into your underlying OS. GUIX needs only mutex, message passing, and timer services from the underlying OS.
Does GUIX support more than one display?
Yes! GUIX and GUIX Studio are both designed to support multiple hardware display devices. These displays are completely independent, and can even run in different pixel resolutions and color formats.
Can I create my own widget types?
Yes, you can customize any of the pre-defined widget types to draw and function exactly as you want them to appear and operate. GUIX widgets implement a virtual function interface, allowing you to easily customize the function(s) called to draw any widget or handle incoming events.
How does my application interact with the GUIX screens?
GUIX widgets will send events to your application when they are operated by the user. For example, and gx_button widget will send a gx_event_clicked event to your application when the button is clicked. Your application can control the GUIX widgets and screens by directly invoking the extensive GUIX API.
Do I have to use GUIX Studio?
No, you can implement your entire GUIX application by simply writing C code and invoking the GUIX API. However, we find it is much easier to use the GUIX Studio application for everything except the simplest of graphical applications.
Does GUIX support touch screens? Multi-touch?
Basic touch screen functionality is supported by the GUIX widget set, and example touch drivers generating the needed touch input events are provided for a wide range of evaluation hardware platforms. While no GUIX widgets require multi-touch input, a range of pre-defined multi-touch event types are defined within the GUIX API. If multi-touch support is needed by your application, this becomes a conversation between the touch input driver, which generates the multi-touch event types, and your application, which receives the multi-touch events and acts on them per your design requirements.
What types of graphics can I use with GUIX?
GUIX and GUIX Studio support PNG and JPG graphics formats. PNG format are preferred based on their improved support for blending and transparency.
How do I get started with NETX/NETX DUO?
Each version of NETX and NETX DUO contains the Express Startup PDF that details how to get the NETX and NETX DUO demonstration up and running in 4 easy steps!
What are the differences between NETX and NETX DUO?
NETX is a proper sub-set of NETX DUO. The biggest difference is that NETX only supports IPv4 Internet Protocol. NETX DUO also has additional protocol support, including the IoT protocols MQTT, CoAP, LWM2M, and NETX SECURE TLS/DTLS and IPsec. In addition, NETX DUO is pre-certified to many safety standards.
Does NETX or NETX DUO copy packet contents internally?
No, NETX and NETX DUO provide zero-copy protocol support.
Does NETX or NETX DUO provide a BSD socket interface?
Yes, via a layer on top of the proprietary, zero-copy NETX API.
Can NETX or NETX DUO be used on an RTOS other than THREADX?
No, both NETX and NETX DUO take advantage of certain THREADX optimizations that are not available on other RTOSes and thus would make it difficult to port to another RTOS.
There are multiple interfaces on the board. Should I create multiple IP instances?
No, only one IP instance is required. You can use nx_ip_interface_attach for each physical interface, being USB RNDIS, WiFi, or Ethernet.
I’m using NETX now and I would like to try NETX DUO. Do I need to modify my source code?
No, NETX APIs are compatible with NETX Duo APIs.
Can I use raw socket to send/receive TCP, UDP or ICMP packet?
No, TCP, UDP, ICMP, and IGMP packets are processed by NETX or NETX DUO.
In NETX DUO, can I disable IPv6 functionality?
Yes, IPv6 can be disabled at compilation time.
Does NET DUO have secure socket layer (TLS) support?
Yes, NETX SECURE for NETX DUO supports TLS and DTLS.
What cloud protocols does NETX DUO support?
NETX DUO supports many of the most popular IoT protocols, including MQTT, CoAP, LWM2M, etc. Please contact us for the most up-to-date information.
What is packet chaining?
Packet chaining can be used to form a logical data frame using multiple smaller NETX packets. This also is an integral component in the zero-copy logic of NETX.
How do I get started with USBX?
Each version of USBX contains the Express Startup PDF that details how to get the USBX demonstration up and running in 4 easy steps!
Can USBX be used on an RTOS other than THREADX?
No, USBX takes advantage of certain THREADX optimizations that are not available on other RTOSes and thus would make it difficult to port to another RTOS.
Can USBX be support both host and device sides?
Yes, USBX can be configured to support either device, host, or both.
Does USBX support OTG?
Yes, USBX supports HNP for OTG. For SRP support, the controller needs to support the hardware requirement (line detection, charge pump…) and an additional driver needs to be supplied based on the controller and/or PHY used.
Does USBX support all standard classes?
USBX supports the main standard classes such as storage, CDC, HID, audio, video, printer, pima… As new classes become standard, Express Logic will continue adding them to the current portfolio.
Does USBX support Pictbridge?
Yes, USBX can be used as a Pictbridge Client or Host.
Can USBX support composite devices?
Yes, USBX has full support for composite devices. Multiple instances of the same class can be created on the host or the device.
Does USBX support hubs and cascading hubs?
Yes, the hub class is fully implemented and up to 5 hubs can be cascaded providing enough power is provided to each hub.
Can USBX be used with multiple usb controllers?
Yes USBX supports multiple controllers for implementations that require support for different speeds, like OHCI and EHCI.
Does changing USB controller require changing a lot in a USBX implementation?
No, USBX controller declaration is totally separated from the classes and the stack. In other word, changing the controller definition does not impact the rest of the USB system.
What type of debugging and error log facility USBX provides?
USBX provides support for TRACEX but also contains its lightweight log mechanism which can be easily used by developers to trap and debug issues. Log files can be easily transmitted as they are text files and used for analysis by Express Logic engineers.
Are all controllers supported by USBX equal in performance?
When choosing a USB controller, users should ensure that the controller’s configuration is enough in endpoints, bandwidth, root hubs to support their requirements. Many CPUs today have very simplistic USB controllers unlike PCs and users should not expect the same throughput.
Can USBX support custom classes?
Yes, USBX can support
super classes which allow the class to take control over theh device entirely, unlike a regular class which only target a single interface or a group of interfaces grouped with IAD.
Are there any examples provided by USBX to get started?
Yes, USBX comes with many examples for each class, on host, device, both for all the controllers supported.
How to develop a simple class in USBX?
USBX comes with a simple datapump class which allows customers to experiment with a bulk data transfer between a host and a device.
Can USBX be tested without a controller?
Yes, USBX comes with its own simulator, providing an easy way to test a USB system without real hardware.
Why use TRACEX?
TraceX provides many features, but at the highest-level the main benefit is to help you better understand the running application. This is particularly important in a situation where the application crashes. By examining the trace buffer via TRACEX, obtaining an understanding of what happened before the crash is possible. Another use is to tune the system by looking for performance bottlenecks, priority inversions, etc.
How does TRACEX get the file with system events?
The running target inserts TRACEX events into a circular buffer. This buffer is most often uploaded to the host via the connected debugger.
How many trace events can be captured?
This is a function of the trace buffer supplied by the application. Each trace event requires 32 bytes. The trace buffer size, minus the header size (48 bytes) and object registry size (40 * object names to capture) divided by 32 yields the number of events that can be captured.
Who provides the memory for the circular trace buffer?
The application provides the memory for the circular trace buffer when event tracing is enabled via the tx_trace_enable API. Please refer to the TraceX_User_Guide.pdf for additional information.
How is TRACEX support enabled on the target?
First, the THREADX library must be built with tx_enable_event_trace defined. Next, the application must call the tx_trace_enable API (which also supplies the circular trace buffer for the event capture). Please refer to the TraceX_User_Guide.pdf for additional information.
What events are captured in the event trace?
When enabled, THREADX, FILEX, NETX, and USBX events are captured in the trace buffer.
What time source is used to time-stamp each event?
The time source is specified by the tx_trace_time_source define in tx_port.h. This can be mapped to any 32-bit time source. Of course, the better resolution the more meaningful the timing will be.