🛠 Exploiter le double cœur : M7 pour le PLC, M4 en coprocesseur

Arduino Opta (micro automate, STM32H747) · avance · Schéma : IMG-opta-plc-avance-1-opta-double-coeur-rpc.svg — architecture interne du STM32H747 de l'Opta avec le cœur M7 exécutant le sketch et le cœur M4 en coprocesseur Zephyr reliés par mémoire partagée

Objectifs

Comprendre et exploiter l'architecture double cœur du STM32H747XI de l'Opta : Cortex-M7 jusqu'à 480 MHz (le sketch PLC) et Cortex-M4 jusqu'à 240 MHz (disponible comme coprocesseur Zephyr, documenté pour la carte arduino_opta). Cas d'usage : décharger le M7 d'un traitement intensif (filtrage FFT, gestion réseau, pilotage d'afficheur) sur le M4, et échanger des données par mémoire partagée. C'est le niveau « bare metal / RTOS » d'Opta.

Matériel

Code complet

/* copro_m4.c — firmware Zephyr cote M4 (board arduino_opta@m4)
 * Publie une table de mesures dans la RAM partagée ; le M7 la lit.
 */
#include <zephyr/kernel.h>
#include <zephyr/device.h>

/* Zone partagée conventionnee (adresse a adapter a votre layout memoire) */
struct partage {
  uint32_t seq;        /* numéro de sequence, incremente par le M4 */
  int32_t  mesures[8]; /* 8 valeurs d'entrées 0-10 V converties */
};
volatile struct partage *shm = (volatile struct partage *)0x30060000;

void main(void) {
  uint32_t n = 0;
  while (1) {
    for (int i = 0; i < 8; i++) shm->mesures[i] = (int32_t)(n * (i + 1));
    shm->seq = ++n;                 /* écriture de fin : le M7 teste seq */
    k_msleep(10);
  }
}
// cote_m7.ino — lecture cote sketch Arduino (core mbed_opta)
struct Partage { uint32_t seq; int32_t mesures[8]; };
volatile Partage* shm = (volatile Partage*)0x30060000; // même zone
void loop {
  uint32_t s = shm->seq;
  Serial.printf("seq=%u m0=%d\n", s, shm->mesures[0]);
  delay(100);
}

Vérification attendue

Le M4 incrémente la séquence toutes les 10 ms ; le M7 affiche des numéros de séquence croissants et des mesures cohérentes. > re réelle.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels