Skip Navigation

Standard Training Course: Realtime Programming for the QNX Neutrino RTOS


This course is designed for anyone who develops QNX® Neutrino® RTOS realtime applications. By the end of the course, you will have written several example programs and learned to apply QNX Neutrino RTOS concepts to real-world applications.

  1. Familiarize  yourself with the features, services, and architecture of the QNX Neutrino RTOS.
  2. Focus on real-world problems and the techniques for solving them.
  3. Provide hands-on exercises so the developer can learn to apply the concepts introduced throughout the course.

You must have a good working knowledge of C and a general knowledge of operating systems. Familiarity with embedded systems or realtime concepts is an asset.


The course consists of the following sections:

We’ll start with an overview of the QNX Neutrino RTOS architecture, covering what the microkernel and the process manager do. We talk about standards, protected address spaces, process/thread model, timing, and scheduling. We also introduce various types of IPC, synchronization, what a resource manager is and where shared objects fit in.

This section provides a quick introduction to editing, compiling, running, and debugging your application from the QNX Momentics IDE, giving the minimum needed to do the programming exercises in the programming sections.

Unlike many common legacy RTOSs, QNX Neutrino executes programs in separate, memory protected, processes. This section touches on how a system design problem can be broken down into separate processes, and how processes are started and terminated. In addition, in this section we'll discuss what a thread is, how to start and stop a thread, and how to synchronize resource access via QNX Neutrino RTOS and POSIX function calls. Several hands-on lab exercises form a significant component of this section.

Explores the various methods that the QNX Neutrino RTOS provides for allowing two or more processes to exchange information and control. We focus on the QNX message passing that is fundamental to how QNX Neutrino works, but also examine pulses and shared memory.

A quick look at the relative advantages and disadvantages of the various IPC methods supported by QNX with a few to choosing which method(s) to use in your system.

An introduction to hardware access methods including IO-mapped and memory-mapped IO, allocating DMA-safe memory, and interrupt handling.

An explanation of how to meet deterministic timing requirements. We discuss timing architecture and how to handle periodic timing, one-shot timing, time-stamping, benchmarking, and timeouts.

Discusses how to configure your application for Multicore, how scheduling works, where ISRs run, and processor affinity. Also examines how to perform synchronization among threads and between threads and ISRs.

A detailed look at building boot images, which contain the binaries that run just after the reset vector. Boot images typically include components such as startup code, the process manager, the kernel, drivers, and a startup script. We also explore various ways to load a boot image onto your target.

Any process can be a resource manager, and drivers almost always are. This section looks at the capabilities of resource managers, include pathname-space resolution, IPC message formats, and general structure. Through a set of exercises we'll look at the initialization of a simple resource manager and the handling of read() and write() operations.

Course Dates and Locations

All BlackBerry QNX training courses are hands-on, instructor led using real-world examples to give your development team the grounding they need in QNX best practices so that you get the most out of your investment. Hosted on or off-site.


Please contact for further information.