Initial commit with submodules

This commit is contained in:
step305
2026-10-15 21:54:16 +03:00
commit 572723a9d4
32 changed files with 2251 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
# Пример проекта 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.