Initial commit with submodules
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user