🛠 Exploiter les deux cœurs M0+ avec les FIFO inter-cœurs

Raspberry Pi Pico · avance · Schéma : IMG-pico-avance-1-pico-double-coeur.svg — RP2040 avec les deux cœurs Cortex-M0+ côte à côte reliés par une file FIFO matérielle et une ligne d'interruption inter-cœur, mémoires partagées en dessous

Objetivos

El RP2040 es simétrico: dos Cortex-M0+ idénticos, un crossbar AHB totalmente conectado y, sobre todo, FIFOs de hardware entre núcleos (32 × 32 bits en cada dirección) con interrupciones dedicadas. Vas a lanzar una tarea en el núcleo 1 (adquisición) y mantener el núcleo 0 para la salida, intercambiando datos mediante blocking_fifo_push/pop — el patrón productor/consumidor propio del RP2040.

Hardware

Código completo

// multicore_fifo.c — core1 acquiert l'ADC, core0 affiche
#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/multicore.h"
#include "hardware/adc.h"

void core1_entry(void) {                    // tourne sur le cœur 1
    adc_init;
    adc_gpio_init(26);
    adc_select_input(0);
    while (true) {
        uint32_t sample = adc_read;       // 12 bits
        blocking_fifo_push(&fifo0_write_to_read, sample);
        sleep_ms(100);
    }
}

int main(void) {
    stdio_init_all;
    multicore_launch_core1(core1_entry);    // démarre le cœur 1
    while (true) {
        uint32_t sample = blocking_fifo_pop(&fifo1_write_to_read);
        printf("core0 recoit: %lu\n", sample);
    }
}

Verificación esperada

La consola muestra un valor ADC cada ~100 ms producido por el otro núcleo. Verifica la simetría: el núcleo 1 se inicia mediante multicore_launch_core1 desde el núcleo 0, y ambos comparten la misma RAM de 264 KB. Prueba el bloqueo: desconecta el potenciómetro de GP26, los valores siguen siendo coherentes (flotantes) pero nada falla — la FIFO actúa como búfer.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales