rpc-coeur-m4.ino
La función estrella de la Portenta: el M7 llama a una función exportada por el M4 con sintaxis de llamada local. Dos cerebros Arduino en un módulo, hablando por RPC: el sketch M4 mínimo está en los comentarios.
Hardware
Un Arduino Portenta H7 (módulo ST STM32H747 doble núcleo Cortex-M7 @ 480 MHz + M4 @ 240 MHz, 8 MB SDRAM, conector high-density), alimentado por USB-C o 5 V. Ningún componente externo.
Cableado
Nada que cablear. Los dos sketches se graban por separado (selector M7/M4 en modo DFU).
Funcionamiento
RPC.exportFunction publica el símbolo por el lado M4; RPC.call serializa los argumentos y espera el resultado. El try/catch cubre la ausencia de firmware M4.
Ejecución
Arduino IDE con el core « Arduino Mbed OS Portenta Boards »: elige « Portenta H7 » (núcleo M7), el puerto USB-C y Subir. El selector M7/M4 del modo DFU permite cargar también el núcleo M4.
Variantes
Delegar al M4 las tareas de tiempo real (motores) mientras el M7 gestiona USB/pantalla, o compartir un búfer en RAM común.
rpc-coeur-m4.ino
// RPC Portenta : le M7 (ce croquis) appelle une fonction du M4.
// Cote M4 : un second croquis Arduino expose additionner().
#include "RPC.h"
unsigned long t0 = 0;
void setup() {
Serial.begin(9600);
while (!Serial && millis() < 3000);
Serial.println("M7 : appel du M4 via RPC");
}
void loop() {
if (millis() - t0 < 2000) return;
t0 = millis();
// L'appel est distant mais s'ecrit comme un appel local.
int a = (int)(millis() / 1000);
int b = 41;
int resultat;
try {
resultat = (int)RPC.call("additionner", a, b);
Serial.printf("M4 a calcule %d + %d = %d\n", a, b, resultat);
} catch (...) {
Serial.println("M4 absent : televerser le croquis M4 (bouton M4 du DFU)");
}
}
// Croquis M4 minimal :
// #include "RPC.h"
// int additionner(int x, int y) { return x + y; }
// void setup() { RPC.exportFunction("additionner", additionner); }
// void loop() {}