🛠 Exploiter les deux cœurs et la FIFO inter-cœurs

Raspberry Pi Pico 2 · avance · Schéma : IMG-pico-2-avance-1-pico2-double-coeur-fifo.svg — SoC RP2350 avec les deux cœurs Cortex-M33, la FIFO matérielle inter-cœurs et la mémoire partagée de 520 Ko

Objectifs

Le RP2350 embarque deux cœurs Arm Cortex-M33 (ou deux cœurs RISC-V Hazard3 au choix, architecture sélectionnée au boot). Ce tutoriel fait tourner un producteur sur le cœur 0 et un consommateur sur le cœur 1, reliés par la FIFO matérielle 32 places du SDK, puis par la mémoire partagée. C'est la différence majeure avec une carte mono-cœur.

Matériel

Code complet

/* multicore_fifo.c — coeur 0 produit, coeur 1 consomme via hardware/fifo */
#include "pico/stdlib.h"
#include "pico/multicore.h"
#include <stdio.h>

#define LED_PIN 25

void coeur1(void) {                /* execute sur le deuxieme M33 */
    gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT);
    uint32_t somme = 0, n = 0;
    while (true) {
        uint32_t v = multicore_fifo_pop_blocking;  /* attend une donnee */
        somme += v; n++;
        if (n == 100) {
            gpio_put(LED_PIN, !gpio_get(LED_PIN));
            multicore_fifo_push_blocking(somme);     /* rapporte la somme */
            somme = 0; n = 0;
        }
    }
}

int main(void) {
    stdio_init_all;
    multicore_launch_core1(coeur1);   /* démarre le coeur 1 */
    uint32_t tick = 0;
    while (true) {
        multicore_fifo_push_blocking(++tick);        /* 1..N */
        if (multicore_fifo_rvalid) {               /* rapport pret ? */
            printf("somme des 100 derniers = %u\n",
                   multicore_fifo_pop_blocking);
        }
        sleep_ms(1);
    }
}

Vérification attendue

La LED pulse toutes les 100 valeurs et le terminal affiche les sommes croissantes (100·n + 5000 par fenêtre). Mettez un point d'arrêt ou une boucle occupée dans coeur1 : le cœur 0 continue de tourner — preuve que les deux M33 exécutent en parallèle réel.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels