The QP-lwIP integration has been carefully designed for hard real-time control-type applications, in which the TCP/IP stack is used to monitor and configure the embedded device as well as to provide remote user interface (e.g., by means of a web browser). In particular, The lwIP stack, which is not reentrant, is strictly encapsulated inside a dedicated active object (lwIP-Manager), so interrupt locking is unnecessary, which is critical for low interrupt latency. Also, the Ethernet interrupt service routine (ISR) runs very fast without performing any lengthy copy operations. This means that hard-real-time processing can be done at the task level, especially when you use the preemptive QK™ kernel built into QP for executing your application. No external RTOS component is needed to achieve fully deterministic real-time response of active object tasks prioritized above the lwIP task.
The QP-lwIP integration uses exclusively the event-driven lwIP API. The heavyweight Berkeley-like socket API requiring a blocking RTOS and is not used, which results in much better performance of the lwIP stack and less memory consumption.
NOTE: The lwIP source code has not been modified in any way to match the event-driven, run-to-completion execution model underlying QP. In other words, QP works with the standard lwIP code, as distributed from the lwIP homepage.
The QP-lwIP integration has been also carefully designed for portability. All hardware-specific code is clearly separated in the Ethernet/lwIP device driver with the clean interface to the lwIP stack and the QP application.
NOTE: This QP™ Development Kit (QDK™) contains only the software dependent on the particular processor and the compiler, but does not contain the portable QP™ Baseline Code. In other words, you need to download and install the QP™ Baseline Code, before you install any QDK™.
LICENSING: The QDKs™ are licensed the same way as the QP™ frameworks.
learn more about QP™ licensing
QP™ Development Kits (QDKs) for lwIP TCP/IP
The QP-lwIP example code available for download below provides all you need to develop professional TCP/IP applications with lwIP, including embedded code and host-based utilities. The example code is based on the Dining Philosopher Problem (DPP) sample application described in Chapter 7 of PSiCC2 as well as in the Application Note "Dining Philosophers Problem" (included in the example code distribution). The goal is to demonstrate lwIP running alongside an existing real-time application, as opposed to lwIP running all by itself that fails to show how lwIP can share the CPU and cooperate with other software components. The QP-lwIP example code includes the following components:
- The DPP example with lwIP for the cooperative "vanilla" kernel described in Chapter 7 of PSiCC2
- The DPP example with lwIP for the preemptive QK kernel described in Chapter 10 of PSiCC2
- lwIP source code version 1.4.0 (available also from http://savannah.nongnu.org/projects/lwIP)
- lwIP Ethernet device driver for the Texas Instruments Stellaris MCUs
- The web server (HTTP-Daemon) with Server-Side Includes (SSI) and rudimentary Common Gateway Interface (CGI) capabilities
- Example website consisting of multiple HTTP pages, graphics, and examples of SSI and CGI
- lwIP Example of using UDP communication to and from the embedded target
qfsgen.exehost utility for generating ROM-based file system data for the web pages (now availale in the Qtools collection)
qudp.exehost utility for generating and receiving UDP packets to and from the target (now availale in the Qtools collection)
|QDK/C lwIP-IAR||EK-LM3S6965||QP/C-4.5.02 & lwIP-1.4.0||IAR EWARM||Manual (1.5MB)||Download (7.5MB)|
|QDK/C lwIP-GNU||EK-LM3S6965||QP/C-4.5.02 & lwIP-1.4.0||GNU (Sourcery CodeBench)||Notes (0.01MB)||Download (7.5MB)|
|QDK/C++ lwIP-IAR||EK-LM3S6965||QP/C++-4.5.02 & lwIP-1.4.0||IAR EWARM||Manual (1.5MB)||Download (7.9MB)|
|QDK/C++ lwIP-GNU||EK-LM3S6965||QP/C++-4.5.02 & lwIP-1.4.0||GNU (Sourcery CodeBench)||Notes (0.01MB)||Download (8.0MB)|
Third Party QP™-lwIP Ports
|STM32||STM3220G-EVAL||QP/C-4.5.02 & lwIP-1.4.0||GNU (Sourcery CodeBench)||Notes (0.01MB)|
Last updated: November 02, 2012