The QP/C Framework can be easily adapted to various operating systems, processor architectures, and compilers. Adapting the QP/C software is called porting, and the QP/C Framework has been designed from the ground up to make porting easy.
The QP/C distribution contains many QP/C ports, which are organized into the three categories:
All QP/C ports are located in sub-directories of the <qp>/ports/ top-level directory, with the hierarchical organization outlined below:
<qp> // QP/C or QP/C++ installation directory +---ports/ // ports directory | | | [1a]-arm-cm/ // ports for ARM Cortex-M | | +---qk/ // ports for preemptive QK kernel | | | +---armclang/ // port with ARM-Clang (Compiler Version 6) toolchain | | | +---gnu/ // port with GNU-ARM toolchain | | | +---iar/ // port with IAR toolchain | | +---qv/ // ports for non-preemptive QV kernel | | \---qxk/ // ports for dual-mode QXK kernel | | | [1b]-arm-cr/ // ports for ARM Cortex-R | . . . | [1c]-msp430/ // ports for TI MSP430 | [1d]-risc-v/ // ports for RISC-V | . . . | | | [2a]-embos/ // ports for embOS RTOS (3rd-party RTOS) | [2b]-freertos/ // ports for FreeRTOS (3rd-party RTOS) | [2c]-threadx/ // ports for ThreadX RTOS (3rd-party RTOS) | [2d]-uc-os2/ // ports for uC/OS-2 RTOS (3rd-party RTOS) | . . . | | | [3a]-posix/ // port to POSIX (multithreaded) | | | [3b]-posix-qv/ // port to POSIX (single-threaded) | | | [4a]-win32/ // port to Win32 (multithreaded) | | | [4b]-win32-qv/ // port to Win32 (single-threaded) | [2z]-zephyr/ // port to Zephyr RTOS (3rd-party RTOS)
[1a-d] Native Ports are located in sub-directories named after the CPU architecture, such as arm-cm for ARM Cortex-M or arm-cr for ARM Cortex-R. Under that directory, the sub-directories qk and qv contain ports for the QK and QV kernels, respectively.
[2a-d] Ports to 3rd-party RTOS are located in sub-directories named after the RTOS, such as embos for embOS RTOS or freertos for FreeRTOS, etc.
[3a-b] Ports to the POSIX OS Standard are located in sub-directories named posix for the POSIX API (multi-threaded variant) and posix-qv for the POSIX API (single-threaded) variant.
[4a-b] Ports to the Win32 API are are located in sub-directories named win32 for the Win32 API (multi-threaded variant) and win32-qv for the Win32 API (single-threaded) variant.
[2z] Port to Zephyr RTOS is an exception in that it is located outside the <qp>/ports directory and instead it is located directly in <qp>/zephyr. This code organization is required for QP/C to be recognized as a Zephyr Module↑.