error: unable to find a register to spill in class 'POINTER_REGS'

Salve.
Sono uno dei collaboratori di Marlin firmware per stampanti 3d.
Ho questo errore in compilazione sulle schede AVR, la riga in questione è questa:

pid_error[HOTEND_INDEX] = target_temperature[HOTEND_INDEX] - current_temperature[HOTEND_INDEX];

Dove HOTEND_INDEX va da 0 a 3 e il problema è nella variabile float array current_temperature[].

Ho praticamente risolto cosi:

float current_temp;

  switch (HOTEND_INDEX) {
    case 0:
      current_temp = current_temperature[0]; break;
    case 1:
      current_temp = current_temperature[1]; break;
    case 2:
      current_temp = current_temperature[2]; break;
    case 3:
      current_temp = current_temperature[3]; break;
  }

E poi messo la riga in questione cosi:

pid_error[HOTEND_INDEX] = target_temperature[HOTEND_INDEX] - current_temp;

Ora l'errore è sparito, ma non riesco proprio a capire perché...
Ma la cosa ancora più strana è che la riga subito dopo è questa:

dTerm[HOTEND_INDEX] = K2 * PID_PARAM(Kd, HOTEND_INDEX) * (current_temperature[HOTEND_INDEX] - temp_dState[HOTEND_INDEX]) + K1 * dTerm[HOTEND_INDEX];

E quì l'errore non me lo da...

Potete aiutarmi a trovare una risposta logica?

Grazie mille

MagoKimbra

Ciao,
in attesa di risposte :slight_smile: ... nel rispetto del regolamento, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con attenzione il su citato REGOLAMENTO ... Grazie mille.

Guglielmo

P.S.: Hai un link al sorgente completo che ti da errore ? È su github ?

... sembra sia un errore noto con i float e sembra che anche con la 5.1 non sia risolta ::slight_smile:

Prova ad aggiungere l'opzione di ottimizzazione: attribute((optimize("O2"))); ...
... sembra che in alcuni casi risolve.

Guglielmo

Ops scusami... Avevo già scritto nella sezione generale in inglese, quindi mi ero completamente dimenticato di fare il posto di presentazione anche nella sezione Italiana...
Faccio subito... Intanto grazie per le risposte...
Si MarlinKimbra è su github...
L'errore è nel file temperature.cpp...