🛠 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

Objectifs

Le RP2040 est symétrique : deux Cortex-M0+ identiques, un crossbar AHB entièrement connecté et surtout des FIFO matérielles inter-cœurs (32 × 32 bits dans chaque sens) avec interruptions dédiées. Tu vas lancer une tâche sur le cœur 1 (acquisition) et garder le cœur 0 pour la sortie, en échangeant des données par blocking_fifo_push/pop — le pattern producteur/consommateur propre au RP2040.

Matériel

Code complet

// 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);
    }
}

Vérification attendue

La console affiche une valeur ADC toutes les ~100 ms produite par l'autre cœur. Vérifie la symétrie : le cœur 1 démarre par multicore_launch_core1 depuis le cœur 0, et les deux partagent la même RAM de 264 Ko. Teste le blocage : débranche le potentiomètre de GP26, les valeurs restent cohérentes ( flottantes) mais rien ne crashe — la FIFO fait tampon.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels