Files

4.6 KiB

Пример проекта RTOS для Raspberry Pi Pico 2 (Многоядерность)

Этот проект демонстрирует гибридную реализацию FreeRTOS и Bare-metal выполнения на Raspberry Pi Pico 2 (RP2350), используя оба ядра процессора.

Описание проекта

Проект показывает, как запустить операционную систему реального времени (FreeRTOS) на одном ядре, сохраняя при этом высокоточный процесс на базе аппаратных таймеров на втором ядре.

Ядро 0: FreeRTOS

Ядро 0 запускает планировщик FreeRTOS и управляет несколькими параллельными задачами:

  1. Задача мигания светодиодом (LED Blink Task): Использует пользовательский C++ класс Pico2LED для переключения встроенного светодиода каждые 200 мс.
  2. Задача вывода в USB (USB Print Task): Выводит статус системы в USB-консоль каждую секунду, включая счетчики с обоих ядер.

Ядро 1: Bare-metal (Аппаратные таймеры)

Ядро 1 работает в режиме bare-metal для обеспечения максимальной предсказуемости и точности:

  • Создает выделенный пул аппаратных прерываний (Alarm Pool).
  • Запускает циклический таймер, который увеличивает глобальный счетчик каждые 1000 мс через аппаратное прерывание.
  • Ядро находится в режиме низкого энергопотребления (__wfi) до наступления следующего прерывания.

Описание алгоритма

Проект реализует поток синхронизации и выполнения между ядрами:

  1. Инициализация (Ядро 0):
    • Инициализация стандартного ввода-вывода.
    • Запуск Ядра 1 с помощью multicore_launch_core1().
  2. Bare-metal выполнение (Ядро 1):
    • Инициализация пула аппаратных прерываний специально для Ядра 1.
    • Планирование циклического прерывания таймера.
    • Вход в цикл ожидания прерывания (__wfi).
  3. Выполнение RTOS (Ядро 0):
    • Создание задач FreeRTOS для управления LED и логирования в USB.
    • Запуск планировщика через vTaskStartScheduler().
  4. Межъядерное взаимодействие:
    • Ядро 0 считывает переменную core1_counter (помеченную как volatile для предотвращения оптимизации компилятором), чтобы отобразить прогресс аппаратного таймера.

Установка и настройка

1. Предварительные требования

Убедитесь, что у вас установлен и настроен Raspberry Pi Pico SDK.

2. Установка исходников FreeRTOS

mkdir freertos_sources
cd freertos_sources
git clone https://github.com/raspberrypi/FreeRTOS-Kernel
git clone https://github.com/jondurrant/RPIPico2-Exp
cp -r RPIPico2-Exp/examples/FreeRTOSBlink/port ../port/FreeRTOS-Kernel
cp RPIPico2-Exp/examples/FreeRTOSBlink/FreeRTOS_Kernel_import.cmake ../FreeRTOS_Kernel_import.cmake

3. Процесс сборки

  1. mkdir build && cd build
  2. cmake ..
  3. make
  4. Прошейте .uf2 файл в ваш Raspberry Pi Pico 2.

Структура проекта

  • 📄 rtos_sample.cpp — Основной код приложения (Многоядерная логика) / Main application code (Multi-core logic).
  • ⚙️ CMakeLists.txt — Конфигурация сборки проекта / Build configuration.
  • 📁 port/ — Файлы конфигурации и адаптации (порта) FreeRTOS / FreeRTOS configuration and port files.
  • 📁 freertos_sources/ — Ядро FreeRTOS и вспомогательные библиотеки / FreeRTOS kernel and support libraries.