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

Arduino Opta (micro PLC, 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

Objetivos

Comprender y aprovechar la arquitectura de doble núcleo del STM32H747XI del Opta: Cortex-M7 hasta 480 MHz (el sketch PLC) y Cortex-M4 hasta 240 MHz (disponible como coprocesador Zephyr, documentado para la placa arduino_opta). Casos de uso: descargar al M7 de un procesamiento intensivo (filtrado FFT, gestión de red, control de pantalla) en el M4, e intercambiar datos mediante memoria compartida. Este es el nivel «bare metal / RTOS» del Opta.

Material

Código completo

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

/* Zone partagee conventionnee (adresse a adapter a votre layout memoire) */
struct partage {
  uint32_t seq;        /* numero de sequence, incremente par le M4 */
  int32_t  mesures[8]; /* 8 valeurs d'entrees 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;                 /* ecriture 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; // meme zone
void loop {
  uint32_t s = shm->seq;
  Serial.printf("seq=%u m0=%d\n", s, shm->mesures[0]);
  delay(100);
}

Verificación esperada

El M4 incrementa la secuencia cada 10 ms; el M7 muestra números de secuencia crecientes y mediciones coherentes. > ia real.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales