Home > FreeRTOS


In this course, attendees will learn how to design and develop embedded software using FreeRTOS, one of the most used open-source real-time operating systems (RTOS) in the world.

The following topics will be covered:

  • Introduction to real-time systems: types of real-time systems, foreground/background based systems, shortcomings of the super-loop technique, the real-time kernel, multitasking systems, context switches, task scheduler, scheduling policies, advantages of using an RTOS.
  • Hardware and development environment: introduction to the Freedom boards, FRDM-KL46Z development kit, development environment, MCUXpresso IDE and SDK, documentation, and references.
  • Introduction to FreeRTOS: history, FreeRTOS and Amazon FreeRTOS, market position, features, source code and coding standard, conventions, license, OpenRTOS, and SafeRTOS, porting and integrating FreeRTOS.
  • Task management: what is a task, creating and deleting tasks, event-based tasks, task states, priorities, task scheduler, preemptive and collaborative modes, tick interrupt, tick interrupt hook, delay routines, idle task, idle task hook, energy saving and tickless idle mode, co-routines.
  • Task communication: queues, reading from and writing to queues, stream buffers, message buffers, queue sets.
  • Notification mechanisms: binary semaphores, counter semaphores, managing resource access with semaphores, task notifications, event groups.
  • Interrupt management: hardware events, introduction to interrupt handling in ARM Cortex-M, implementing an interrupt service routine (ISR), top-half and bottom-half, delegating interrupt handling to tasks, data transfer techniques, interrupts used by the kernel, interrupt priority configuration.
  • Software timers: introduction to software timers, enabling and configuring software timers, types of software timers, handling interrupts on timers, daemon task startup hook.
  • Concurrency management: shared resources and the need for concurrency management, thread safety and reentrance, critical sections and mutual exclusion, mutex, recursive mutex, disabling interrupts, pausing the scheduler, priority inversion, priority inheritance, deadlocks, gatekeeper tasks.
  • Memory management: advantages and disadvantages of static allocation and dynamic allocation, static memory allocation functions, dynamic memory allocation algorithms, memory fragmentation, monitoring the heap, monitoring the stack and identifying stack overflows.
  • Support tools: displaying information about running tasks, enabling Run Time Statistics, tracing, trace hook macros, kernel-aware debugging, simulators and emulators.
  • Designing with FreeRTOS: dividing the system into tasks, setting priorities, RMS (Rate Monotonic Scheduling) technique, defining the size of the stack, memory allocation, communication between tasks, interrupt handling, choosing the scheduler.
  • Final Thoughts: Additional links and resources, book recommendations, final questions and comments, closing.

For more details on the content of this training session, you can download the full agenda and the training slides (in Portuguese).

Some pictures of training sessions already presented are available here.


Students, engineers and software developers of embedded systems projects.


Basic knowledge of embedded systems, firmware (bare-metal) development for microcontrollers, intermediate knowledge of the C language.


All required development tools and equipment will be provided by Embedded Labworks.


The course material contains the slides of the presentations, book of activities and exercises, reference guides, and additional reference documents. All materials will be provided in an electronic format at the start of the training session.

Development kits

The training exercises will be performed on a Freescale's Freedom platform (FRDM-KL46Z), based on a Kinetis KL46 microcontroller (ARM Cortex-M0+) and several communication and control interfaces. For more information on this platform, click here.

Open sessions

The open training sessions are presented in a pleasant environment, with a properly equipped laboratory and Internet access. Classes are usually presented full time, with a stop for lunch and a coffee break in the morning.

If you are interested in participating in the training but there is no open session available, please fill the pre-registration form clicking here. We will contact you as soon as a new training session is opened.

In-company sessions

If you plan to train your team or a group of people, consider a training session in your company.

In-company classes have the same characteristics of an open training session. In this model, the company is responsible for providing the necessary resources needed for the training, including room, data projector and development machines. This model also brings big advantages for the company, since the cost of transportation and accommodation of several employees is reduced only to the instructor.

If your company has a special requirement, we can study a program that meets your needs in a specific way, like preparing the training material for a specific hardware platform or developing additional content. Do not hesitate to contact us by e-mail or leaving a message in the contact page.

Take the training to your city

You can take the training session to your community at any city in Brazil!

Can't afford to take the course in São Paulo? Do you have a study group and want to learn more about a specific technology? Do you coordinate or participate in the coordination of a course at your university and would like to train the teachers and students? Do you have a space and would like to get some friends together and spend enjoyable hours learning about embedded systems?

Send an e-mail or leave a message in the contact page. Send the name of the course you are interested and the city. If we can get together a group of interested people, we can bring the training to your city!

Customers who already attended

If you have any question, please send an e-mail or leave us a message on the contact page.

Contact us