The QP/C++ 5.4.0 release changes the basic philosophy of distributing the QP frameworks by combining the "QP/C++ Baseline Code" with all currently available "QP/C++ Development Kits" (QDK/C++). This is done to eliminate any potential mistakes in downloading and installing separate pieces of code.
Additionally, this release changes the basic philosophy of building your embedded applications with the QP/C++ framework. Starting with this release, all examples for embedded boards include the QP/C++ framework as source code within the projects, instead of statically linking with a QP/C++ library. (NOTE: It is still possible to use QP/C++ as a library, but you need to build such libraries yourself, as they are no longer provided in the QP/C++ distribution.)
The move to building QP/C++ from sources ensures the consistent toolset version and compiler options applied to the application code as well as the QP/C++ framework code. (NOTE: The QP/C++ examples for "big operating systems", like Windows or Linux, still use QP/C++ as a pre-compiled library that is statically linked with the application code.)
NOTE: Even though the QP/C++ source has been re-packaged in this release, the changes have minimal impact on the existing QP/C++ applications. The biggest difference is that "opaque" pointers to active objects derived from QMActive now need to be also typed QMActive (as opposed to QActive), because QMActive is no longer a subclass of QActive and the automatic upcast no longer applies.
The changes in basic approach to distributing and building the framework have also the following ripple effects:
The QP/C++ source code has been simplified and has been re-packaged into a much smaller number of source files. The whole QP/C++ source code now resides in the single source folder. Additionally, the source code files have now the read-only protection to prevent inadvertent changes to the QP/C++ source code that is part of your projects.
It is no longer necessary to define the QPCPP environment variable to build the QP/C++ examples. All directories and files referenced by example projects are relative to the project folder. This change reflects the fact that most development tools add source files to the project using relative paths (and now the projects contain QP/C++ source code, not just the QP library).
The QP/C++ Ports folder has been reorganized to contain all currently available QP/C++ ports. The ports are organized into three categories: native QP/C++ ports ("bare-metal"), ports to 3rd-party RTOSes, and ports to big operating systems (Windows and Linux).(NOTE: the ports are now documented in the this QP/C++ Reference Manual. Each port sub-directory contains a README link to the corresponding page in the online documentation)
The QP/C++ Examples folder has been reorganized to reduce the repetitions and contains all currently available QP/C++ examples. The folder includes four categories of examples: native QP/C++ examples ("bare-metal"), examples for 3rd-party RTOSes, examples for big operating systems (Windows and Linux), and examples for 3rd-party Middleware. As mentioned before, all example projects for embedded systems use QP/C++ as source code and not as a library. The examples folder has been expanded to contain all currently available QP/C++ examples, many of them are new in this release. (NOTE: the currently available examples are now documented in the QP/C++ Reference Manual. Each example sub-directory contains a README link to the corresponding page in the online documentation)
A new 3rd_party folder created to contain the Third-Party code used in the QP/C++ ports and examples, such as MCU register files, low-level startup code, device drivers, etc. The 3rd_party folder avoids the need to repeat such code in every project. Also, the separation of the Third-Party components helps to clearly indicate code that comes from various sources, and to which Quantum Leaps, LLC expressly makes no claims of ownership. The Third-Party software components included in this "3rd_party" folder are licensed under a variety of different licensing terms that are defined by the respective owners of this software and are spelled out in the README.txt or LICENSE.txt files included in the respective sub-folders.
This release also comes with the much expanded online QP/C++ Reference Manual, which is cross-linked with the ports and examples.
Changes in detail:
Renamed the "Vanilla" scheduler to the QV cooperative kernel for symmetry with the QK preemptive kernel. Renamed QF::onIdle() callback to QV::onIdle().
Removed class QFsm (which is now deprecated). Legacy state machines coded in the "QFsm-style" will continue to work, but will use the QHsm implementation internally. There is no longer any efficiency advantage in using the "QFsm-style" state machines.
Applied a slight performance improvement to the ARM Cortex-M port to the QK preemptive kernel. The QK port now checks for ISR context by looking at the IPSR register, instead of incrementing and decrementing the QK_intNest_ up-down counter.
Updated ARM Cortex-M examples and provided new examples for NXP mbed-LPC1768, and STM32 NUCLEO-L053R8, and NUCLEO-L152RE boards. All examples now use the latest CMSIS (V4.3.0). All ARM Cortex-M exampels are provided for the ARM-KEIL, GNU-ARM, and IAR-ARM toolsets.
Added the native port and examples to the classic ARM7/9 with AT91SAM7S-EK board and the IAR-ARM toolset.
Added the native port and examples to the AVR (AVRmega) with GNU-AVR and IAR-AVR toolsets. The examples are provided for the Arduino-UNO board.
Added the native port and examples to MSP430 with TI CCS-430 and IAR-430 toolsets. The examples are provided for the MSP430 LauchPad boards (the MSP-EXP430G2 and MSP-EXP430F5529LP for the "classic" MSP430 and "extened" MSP430X, respectively).
Added port to CMSIS-RTOS RTX. Examples are available for TI EK-TM4C123GLX, STM32 NUCLEO-L053R8, and NUCLEO-L152RE boards with ARM-KEIL, GNU-ARM, and IAR-ARM toolsets.
Updated port to embOS. Examples are available for STM32 STM32F4-Discovery board with IAR-ARM toolset.
Updated port to FreeRTOS for the latest version 8.2.1. Examples are available for TI EK-TM4C123GLX board with GNU-ARM and IAR-ARM toolsets.
Added port to Thread-X. Example is available for the Thread-X demo with Visual Studio on Windows.
Updated port to uC/OS-II for the latest version v2.92. Examples are available for TI EK-TM4C123GLX and STM32 NUCLEO-L152RE boards with ARM-KEIL and IAR-ARM toolsets.
Updated port to Win32 (Windows). Modified the port to apply a generous "fudge factor" in over-sizing QP event queues and event pools, to minimize the risk of overflowing queues/pools due to non-deterministic Windows behavior.
Updated the QP-Qt Port (QP/C++ port to the Qt cross-platform GUI framework).
Added new port to Win32-QV (Windows with cooperative "Vanilla" scheduler, previously known as Win32-1T).
Updated the lwIP-QP example for EK-LM3S6965 board.