Allora, diciamo, in maniera sommaria, io ho degli array semplici costituiti da 8 a 16 elementi che rappresentano i breakpoint degli assi X e Y delle mappe corrispondenti vere e propie, che saranno multidimensionali con lo stesso numero di elementi per ogni asse, ovvero, se ho 10 elementi nell'asse delle X e 10 nell'asse delle Y, allora la X saranno le Colonne, e la Y saranno le righe di un'array tipo: Mappa[10][10]={......} la ricerca dei breakpoint mi darà dei valori (diciamo un "i" ed un "j" ) pari all'index in array, a sua volta nel calcolo dell'interpolazione andiamo ad assegnare a delle variabili specifiche il contenuto dell'array mappa[ i ][ j ] per facilitare il lavoro, ho deciso di usare solo array come byte, e ricorrere a fattori di conversione per risalire alle misure ingegneristiche di tale parametro, così ho semplificato sia la gestione delle array in RAM, che in EEPROM visto che poi, le dovrò memorizzare li per poi caricarle in RAM all'avvio del sistema, potrei farlo in flash, ma credo che in EEPROM vada bene, su questo, poi si vedrà.
Diciamo che l'ideale sarebbe avere i breakpoint RPM e Load configurabili in base a necessità dettate dalla singola applicazione su cui poi, questa "pseudo" centralina andrà a montarsi, questo perché se ho due motori diametralmente diversi, magari uno da moto di piccola cilindrata tanti giri ed uno da vettura poco efficiente e da pochi giri, la prerogativa sarà distribuire i breakpoint in maniera da essere più ravvicinati dove i cambiamenti di rendimento volumetrico provocano altrettanti cambiamenti nella curva di coppia sviluppata (ricordate quando sui programmi di F1 si parla dei "buchi di coppia" ecco, questo per esempio, richiede una maggiore capillarità di breakpoint giri per tentare di limitare al massimo le perdite in quella zona).
Per fortuna, nell'applicazione che ho in mente, i giri sono pochi, quindi avere 16 breakpoint giri è più che sufficiente, mentre per il carico motore, me ne bastano 8 quindi una mappa da [8][16] basterebbe, ovviamente, di mappe che si sovrappongono ce ne sono diverse, ma queste da 8x16 sono le principali e più grandi, le altre sono da 10x10 e 8x8.
Stasera vedo di studiare un po il tema della ricerca binaria.
Purtroppo ho visto che non è la ricerca la parte più "lenta" della funzione dove ho intenzione di posizionare questi calcoli, ma i calcoli di interpolazione in se. Ho una bella formula che mi fa l'interpolazione dei 4 punti entro cui il motore sta funzionando in quel momento, da come l'ho testato funziona, ma utilizza dei valori float che costano un botto in tempi di eseczione come voi ben mi avete insegnato, ho tentato di evitare l'uso di float a favore di valori int/unsigned int ma siccome ad un certo punto del calcolo, poi avrei bisogno di dividere svariate volte per riportare i valori calcolati a valori "reali" tutto quello che ho risparmiato passando da float ad int lo perdo eseguendo le divisioni. Adesso mi è venuta l'idea di vedere se posso gestire i valori int così come escono fuori per poi dividerli solo all'ultimo, con un'unica divisione.