Real-Time Multitasking on Maker Pi Pico Using pyRTOS

Real-Time Multitasking on Maker Pi Pico Using pyRTOS

Overview

Running multiple tasks on a microcontroller can be a bit complicated using the traditional coding style (Figure 1). Sometimes we have to restructure the whole code just to add a new feature to the system. Using Real-Time Operating System (RTOS) coding style (Figure 2), it is easier to manage tasks. In this tutorial, we will be using pyRTOS on Maker Pi Pico.

Super Loop Structure

Figure 1: Super Loop Structure

 

Basic RTOS Structure

Figure 2: Basic RTOS Structure

 

What is RTOS?

Real-time operating system (RTOS) is a software component that rapidly switches between tasks, giving the impression that multiple programs are being executed at the same time (see Figure 3). Multicore systems are able to truly run tasks simultaneously by using different cores to run different tasks. RTOS is useful for running multiple tasks that have strict execution timings. For example, NASA’s Perseverance rover uses RTOS (VxWorks) in order to operate various scientific instruments in real-time.

RTOS Execution Timeline

Figure 3: RTOS Execution Timeline

 

Why use RTOS?

An RTOS makes development easier for many projects, and it makes them more expandable, maintainable, portable, and secure. Saving time and cost for development. A simple loop program will get messier, degenerating into spaghetti code, and becoming difficult to manage as new features are added to the code. It will be more difficult to maintain, modify and expand.

 

Multitasking, alone, is enough reason to use an RTOS in many systems. It allows you to break a complex problem into simpler pieces and focus on the development of each task rather than on schedule when things run. It also makes it easier to delegate work among members of a team. RTOS also allows us to utilize the maximum capabilities of the microcontroller, even more so on a dual-core microcontroller like the Pico.

 

Required Hardware

 

Installing pyRTOS on Maker Pi Pico

StepCircuitPythonMicroPython
1Download Mu EditorDownload Thonny
2Download libraries for Maker Pi Pico
3Copy pyRTOS folder from CircuitPython example code to Maker Pi Pico lib folder

Copy pyRTOS folder from MicroPython example code to Maker Pi Pico through Thonny (video below)

 

Coding with pyRTOS (MicroPython Example)

1. Import pyRTOS and tasks dependencies

import pyRTOS
import machine                  # import task dependencies

 

2. Define the task

def task1(self):
ledpin1
= machine.Pin(0, machine.Pin.OUT)         # Task1 setup
ledpin1.value(0)
yield

while True:
ledpin1
.toggle()                                       # Task1 loop
yield [pyRTOS.timeout(1)]                  # Delay for 1 second (Other task can run)

 

3. Add task.

pyRTOS.add_task(pyRTOS.Task(task1))

 

4. Start RTOS

pyRTOS.start()

 

Video Tutorial (MicroPython Example)