Files

62 lines
2.6 KiB
Markdown

# RTOS Sample Project for Raspberry Pi Pico 2 (Multicore)
This project demonstrates a hybrid implementation of FreeRTOS and Bare-metal execution on the Raspberry Pi Pico 2 (RP2350), utilizing both processor cores.
## Project Description
The project showcases how to run a Real-Time Operating System (FreeRTOS) on one core while maintaining a high-precision hardware-timer-driven process on the second core.
### Core 0: FreeRTOS
Core 0 runs the FreeRTOS scheduler and manages multiple concurrent tasks:
1. **LED Blink Task**: Uses a custom C++ class `Pico2LED` to toggle the built-in LED every 200ms.
2. **USB Print Task**: Prints the system status to the USB serial console every 1 second, including counters from both cores.
### Core 1: Bare-metal (Hardware Timers)
Core 1 operates in a bare-metal mode to ensure maximum predictability and precision:
- It creates a dedicated **Hardware Alarm Pool**.
- It runs a **Repeating Timer** that increments a global counter every 1000ms via a hardware interrupt.
- The core remains in a low-power state (`__wfi`) until the next interrupt occurs.
## Algorithm Description
The project implements a multi-core synchronization and execution flow:
1. **Initialization (Core 0)**:
- Initialize standard I/O.
- Launch Core 1 using `multicore_launch_core1()`.
2. **Bare-metal Execution (Core 1)**:
- Initialize a hardware alarm pool specifically for Core 1.
- Schedule a repeating timer interrupt.
- Enter a loop of "Wait For Interrupt" (`__wfi`).
3. **RTOS Execution (Core 0)**:
- Create FreeRTOS tasks for LED control and USB logging.
- Start the scheduler via `vTaskStartScheduler()`.
4. **Inter-core Communication**:
- Core 0 reads the `core1_counter` variable (marked as `volatile` to prevent compiler optimization) to display the hardware timer\'s progress.
## Installation and Setup
### 1. Prerequisites
Ensure you have the Raspberry Pi Pico SDK installed and configured.
### 2. FreeRTOS Sources Setup
```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. Build Process
1. `mkdir build && cd build`
2. `cmake ..`
3. `make`
4. Flash the `.uf2` file to the Pico 2.
## Project Structure
- `rtos_sample.cpp`: Main application code (Multi-core logic).
- `CMakeLists.txt`: Build configuration.
- `port/`: FreeRTOS configuration and port files.
- `freertos_sources/`: FreeRTOS kernel and support libraries.