Workshop project for the FSFW. Get started from a simple hello world application.
Go to file
Robin Müller 37201b367c
move main
2022-10-05 12:00:40 +02:00
fsfw@fd46784d0d completed 02 2022-10-04 11:09:29 +02:00
ws-ipc move main 2022-10-05 12:00:40 +02:00
ws-objects add IPC workshop 2022-10-04 12:00:46 +02:00
ws-tasks update README 2022-10-05 11:37:03 +02:00
.gitignore starting impl 2022-09-02 09:58:43 +02:00
.gitmodules init fsfw-from-zero 2022-09-02 08:39:20 +02:00
CMakeLists.txt lower cmake requirement 2022-10-05 09:57:53 +02:00
FSFWConfig.h continue workshop 2022-09-28 18:35:15 +02:00
LICENSE add license 2022-09-28 20:03:58 +02:00 01 ws ipc 2022-10-05 11:03:55 +02:00
main.cpp remove shared counter 2022-10-05 11:47:24 +02:00
start_main.cpp remove shared counter 2022-10-05 11:47:24 +02:00

FSFW From Zero Workshop

This workshop gives an introduction to the Flight Software Framework, starting from a simple hello world program in C++. As such, it it also suitable for people with basic C++ skills who want to learn how the FSFW works and how to build On-Board Software (OBSW) in general. This workshop does not rely on external hardware and can be done on a host machine (e.g. laptop).


I really recommend doing this in an Unix environment. If you do not have or do not want to use a VM, consider using Ubuntu WSL on Windows.

  1. git installed
  2. cmake installed as the build system generator
  3. C++ compiler installed. On Windows, you can use MinGW64 or clang. On Unix, you can use the pre-installed GCC but you might have to install g++ or build-essentials explicitely.
  4. Build system for C/C++ installed. For Windows, it is recommended to use ninja. On Unix, you can use the pre-installed make tool.

Getting started

Start by cloning this repository and updating the submodules to also clone the Flight Software Framework:

git clone
cd fsfw-from-zero
git submodule init
git submodule update

This workshop uses CMake like the framework to build the application. This command sequence will build the software

mkdir build
cd build && cmake ..
cmake --build . -j

This will generate the fsfw-from-zero executable inside the build folder. It is recommended to use an IDE like VS Code or CLion. Those generally have good CMake support.


This workshop is organised in chapters which have multiple tasks. For each task, solution source files will be provided but you are encouraged to work to the solution on your own.

It is recommended to have a basic understanding of C++ basics and object-oriented programming in general before doing this workshop. There are various books and online resources available to learn this.

All tasks are done in the main.cpp of this project and are located in subfolders. In general, it is recommended to start with the ws-tasks workshop and then move to the ws-objects workshop.

Tasks workshop

This chapter provides an introduction into the thread/tasks abstractions provided by the framework. The chapter descriptions and solutions are located inside ws-tasks.

Objects and Object Manager workshop

This chapter will introduce the object manager and expand the knowledge of the tasks workshop by showing how to conveniently create global addressable objects. The chapter description and solutions are located inside ws-objects.

WIP: IPC workshop

Usually, objects have to interact with other objects or software internal entities like threads of OS services in some shape or form. This workshop introduced methods to perform this Inter-Process communication (IPC) in a thread-safe way. The chapter description and solutions are located inside ws-ipc.

WIP: TMTC workshop

Provides an introduction into TMTC handling, as virtually all space systems are remote systems where telemetry and telecommands are the primary data interface available to communicate with the satellite.

WIP: Structuring your project and managing third-party dependencies with CMake

OBSW usually becomes very complex as more and more features and functionality is added. We need to split the software into smaller dedicated modules as this happens to keep complexity in check. This workshop shows how this is done with CMake. Another common task is the integration of third-party libraries. In general, this is a painful process in C/C++ with no built-in package management and an archaic header system. This workshop will attempt to alleviate some of the pain by showing how to integrate a CMake compatible library by example and how to intgerate a library without CMake support.

WIP: Controller workshop

This chapter will introduce the ControllerBase and ExtendedControllerBase class and the various helper interfaces they expose.