# Пример проекта 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 ```bash 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.