da
c1b8 » 2 mag 2009, 22:52
Hai tralasciato un particolare: così facendo non ottimizzi.
Mi spiego meglio.
Per ottimizzare del codice è mia abitudine seguire nell'ordine i tre passi seguenti:
1) rimozione istruzioni inutili
2) parlare la stessa lingua
3) rivisitazione algoritmo.
Tu stai tentando di realizzare la fase 3 senza aver eseguito le prime 2 fasi e questo non ti aiuta.
Vediamo di capire le diverse fasi.
1) rimozione istruzioni inutili
Durante lo sviluppo si aggiungono istruzioni che nel corso del progetto possono diventare del tutto inutili nel codice. Un esempio è la funzione acc_led che era previsto venisse chiamata per spegnere tutti i led. Questo non è più vero e quindi la if iniziale (if (x+y+z==0)) è inutile e spreca tempo per niente (oltre alla valutazione true/false esegue tre somme). ELIMINARE.
In questa situazione potrebbero trovarsi altre funzioni o parti del codice.
2) parlare la stessa lingua
Quando programmi devi ricordarti che sistema hai sotto per parlare con lui nel migliore dei modi. E' come se tu facessi un viaggio all'estero senza prima aver imparato la lingua, ti troverai a dover ricorrere spesso a "intermediari" o a scendere a compromessi. Nel tuo caso hai intrapreso un viaggio nel mondo dei microcontrollori ad 8 bit, privi di coprocessore matematico e la cui lingua preferita è il "digitale".
Non utilizzare, dove possibile, un interprete per dialogare, ma impara il linguaggio del posto ed utilizzalo.
Un esempio: se impieghi funzioni matematiche quali moltiplicazione e/o divisioni (anche la % è una divisione) il sistema non ti capisce ed avrà bisogno di un traduttore (nel tuo caso il mikroC che inventa una funzione apposita). Sapendo che il sistema parla il 'binario' usa funzioni binarie quindi: << o AND o OR
Ti assicuro che puoi ottenere gli stessi risultati ma in tempi molto minori.
In questa ottica si possono modificare diversi punti del codice: richiamare la acc_led senza sommare 1 a x, y, z. Di conseguenza nella acc_led eliminare il -5. Ancora la acc_led esegue un y*4 che può trasformarsi in y<<2.
E avanti così in altri punti del codice.
3) rivisitazione algoritmo.
Questo è il punto più complesso e quindi l'ultimo. Si tratta di mettere in dubbio il lavoro svolto fino a questo punto e cambiarlo. Prima di arrivare a questo però dovresti essere sicuro di aver provato tutte le altre possibilità.
Ciao.
Fabio