| ../ | ||
| README.md | 4925 | Mar 17 12:00:06 2026 |
| libraries/ | 512 | Mar 14 22:21:33 2026 |
| programs/ | 512 | Mar 15 20:46:56 2026 |
| scripts/ | 512 | Mar 16 22:59:12 2026 |
In order to use this framework, you will need to clone the arm-mcu git repository with the following command:
git clone https://github.com/pmunts/arm-mcu.git
Your project does not need to be within the Arduino Framework for ARM MCU Platforms checkout directory.
The Arduino IDE 2 does not use anything from the GNU make project except for the sketch source file(s).
An Arduino IDE 2 Debian package for Linux x86-64 aka amd64 machines is available at the Munts Technologies Debian Package Repository. It is packaged from the official Arduino release. Unfortunately there is no official Arduino IDE 2 release for ARMv8 aka arm64 machines.
FreeRTOS is an open source lightweight Real Time Operating System that has been ported to many microcontrollers, including ARM 32-bit microcontrollers. FreeRTOS was originally published in 2003 by Richard Barry. Amazon Web Services acquired ownership or a least stewardship of the FreeRTOS project in 2017, apparently to facilitate the creation of microcontroller Internet of Things nodes to feed AWS backend applications. FreeRTOS has been very widely used throughout the world by developers across industries ranging from hobbyists to Fortune 500 companies.
The Arduino-Pico core package for RP2040 and RP2350 microcontrollers includes a tightly integrated implementation of FreeRTOS SMP (Symmetric Multi-Processing). The following minimal sketch skeleton illustrates how create an RP2040 or RP2350 multicore Arduino FreeRTOS application:
#define ENABLE_FREERTOS
#include <Arduino_ARM.h>
void Task0(void *parameters) // Runs on CPU core 0
{
for (;;)
{
taskYIELD();
}
}
void Task1(void *parameters) // Runs on CPU core 1
{
for (;;)
{
taskYIELD();
}
}
void setup() // Runs on CPU core 0
{
xTaskCreate(Task0, "main", 512, NULL, 1, NULL);
}
void loop() // Runs on CPU core 0
{
}
void setup1() // Runs on CPU core 1
{
xTaskCreate(Task1, "main", 512, NULL, 1, NULL);
}
void loop1() // Runs on CPU core 1
{
}
All of loop(), setup1(), and loop1() are optional. For compatibility, an idle task running on core 0 will call loop() if it is defined and an idle task running on core 1 will call loop1() if it is defined.
Because of how well FreeRTOS has been integrated into the Arduino-Pico core package, it is now probably easier to develop a FreeRTOS application for an Arduino RP2040 or RP2350 platform than for any other hardware/software combination.
The STM32FreeRTOS Arduino library provides FreeRTOS support for STM32 microcontrollers. Since it is delivered as a library, it is not integrated as tightly with the STM32 core package, and FreeRTOS applications for Arduino are implemented exactly the same as with any other GCC C or C++ framework. The following minimal sketch skeleton illustrates how create an STM32 Arduino FreeRTOS application:
#define ENABLE_FREERTOS
#include <Arduino_ARM.h>
void Task0(void *parameters)
{
for (;;)
{
taskYIELD();
}
}
void setup()
{
xTaskCreate(Task0, "main", 512, NULL, 1, NULL);
vTaskStartScheduler();
}
void loop()
{
}
Your setup() function must call xTaskCreate() to create at least one FreeRTOS task and then call vTaskStartScheduler() which does not return and replaces all of the normal Arduino background processing. For compatibility, the FreeRTOS idle task calls loop().