Go Down

Topic: [RISOLTO] dichiarare variabili al momento che servono oppure no (Read 1 time) previous topic - next topic

gpb01

... mentre non conoscevo il 1284P, ma non trovo moduli , sai indicare qualche link?
E' una bella MCU con il doppio della SRAM del 2560 (ma metà della flash ... però comunque 128K) ... una schedina facilmente reperibile in Italia è QUESTA ;)

Guglielmo

P.S.: Non farti ingannare da quel midi nel nome ... non ha nulla a che vedere con il protoccolo per musica, è per indicare che è una via di mezzo tra una mini, micro e mega :D :D :D
Search is Your friend ... or I am Your enemy !

dr_vagus

E' una bella MCU con il doppio della SRAM del 2560 (ma metà della flash ... però comunque 128K) ... una schedina facilmente reperibile in Italia è QUESTA ;)

Guglielmo

P.S.: Non farti ingannare da quel midi nel nome ... non ha nulla a che vedere con il protoccolo per musica, è per indicare che è una via di mezzo tra una mini, micro e mega :D :D :D
bellissima, ma... 20 fischioni!!!!   è difficile tenere il confronto con STM32...
----
don't be ...Vagus.

maubarzi

il mio lo allego. Attualmente è lo sketch che sto usando ... sono quasi 600 righe e secondo me non è riducibile. Magari mi sbagliassi...
Ci ho dato un'occhiata...
Premetto che non sono per le ottimizzazioni estreme se non servono o se costano di più del passaggio a piattaforme più potenti.

Però se ci dovessi proprio far stare questo software su una scatola di vermi, da una prima occhiata mi pare ci siano alcuni punti su cui intervenire.
Hai un sacco di costanti che si potrebbero definire come #define
Poi ci sono un sacco di stringhe costanti per formattare i messaggi di errore, queste si potrebbero tutte trasferire nella EEPROM con una funzione generica che legge da un indirizzo preciso per una lunghezza precisa entrambi definiti come define o cablati senza passare per variabili.
Poi, forse, analizzando bene il codice si potrebbero eliminare gran parte delle variabili globali rendendole locali e dichiarandole solo dove realmente servono, non ho analizzato in dettaglio, ma qualcosa sicuramente si può recuperare anche qui.
Ci sono anche un paio di String bonificabili.

Resta però valida la mia premessa iniziale, se con pochi euro riesci a passare a qualcosa di più "potente" non vale la pena spendere ore in ottimizzazioni perchè costerebbero di più del cambio MCU.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Silente

Qualche consiglio:
incorpora fino alla morte le boolean in variabili di tipo byte (non so per che cosa le usi ma ne ho contate una quindicina soltanto tra le dichiarate globali)
Contrario, solo in apparenza, a quanto dissi: sei certo che tutta quella pappardella di variabili globali ti siano utili? Quelle che ti servono solo per momenti rendile locali, che poi spariscono.
Ho visto una cosa che non mi piace:un, ma forse sono di più, esemplare di String. Estinguili.
Rendi #define TUTTE le variabili il cui valore NON debba cambiare nel programma. Altro che "const unsigned long", e pin di pulsanti manco dichiarati const.
Sicuro che ti serva leggere lobstato di pulsanti e ricordarlo in variabile? Se tale variabile la usi una volta sola in lettura basta leggere lo stato del pulsante in quel punto.
Poi mi spieghi perché dichiari alcune bool come =!HIGH (5 caratteri) e non come =LOW (3 caratteri)? Il risultato é lo stesso, ma il secondo é più chiaro.

Non ho ancora attaccato oa loop()
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

Datman

Servono davvero quelle float e quelle long?... Ti servono tutte quelle cifre o puoi dividere arrotondando? Si alleggerirebbero anche i calcoli.
Inoltre, facendo for() da n a 0, anziché da 0 a n, si guadagna qualcosa in velocità, perché i confronti vengono fatti con 0.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

maubarzi

Poi mi spieghi perché dichiari alcune bool come =!HIGH (5 caratteri) e non come =LOW (3 caratteri)? Il risultato é lo stesso, ma il secondo é più chiaro.
Folcloristico come uso ma il numero di caratteri è ininfluente al fine dello spazio occupato nel compilato ;)

EDIT:
Vorrei rivedere un cicinin questa mia affermazione:
Premetto che non sono per le ottimizzazioni estreme se non servono o se costano di più del passaggio a piattaforme più potenti.
Intendo su progetto one shot, se si tratta di un prodotto con un ciclo di vita non brevissimo invece sono abbastanza per l'ottimizzazione, magari non maniacale ma quasi ;)
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Silente

Lo so. era solo per dire che ti piace pure scrivere di più
Dove va un numero va una variabile, una funzione e/o  un test.
Per ottenere devi spiegare

Strumenti/Formattazione automatica fino alla morte!
Cristianesimo:bibbia='C':K&R

maubarzi

Però non negherai che è un modo carino di scrivere codice, per me è pure simpatico.
Sembra quasi una firma stilistica ;)
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Standardoil

a me personalmente non piace
preferisco semmai scrivere 1 piuttosto che !LOW, che passa per una macro e una negazione per scrivere un uno, mi sembra una pippa inutile
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

maubarzi

incorpora fino alla morte le boolean in variabili di tipo byte (non so per che cosa le usi ma ne ho contate una quindicina soltanto tra le dichiarate globali)
Si potrebbero usare i bit di un singolo int per le 15 boolean che hai contato invece di 15 byte o addirittura di 15 int, non ricordo come erano dichiarate.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

Standardoil

Si potrebbero usare i bit di un singolo int per le 15 boolean che hai contato invece di 15 byte o addirittura di 15 int, non ricordo come erano dichiarate.

no credo che ci guadagnamo molto, perchè poi diventa più complicata la gestione, considero l'attule compromesso "boolean grande uguale uguale a byte" un buon compromesso
Prima legge di Nelson (che sono io): Se vuoi il mio aiuto dimostrami almeno che hai letto il nostro "aiutateCi ad aiutarVi"

Non bado a studenti, che copino altrove

Tu hai problema-Io ti domando-Tu non mi rispondi: vuol dire che non ti serve più

maubarzi

si, forse hai ragione, probabile che sprechi di più a indicare di leggere il bit N con la bitRead che a dichiararlo e usarlo come byte
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

gpb01

si, forse hai ragione, probabile che sprechi di più a indicare di leggere il bit N con la bitRead che a dichiararlo e usarlo come byte
No, anzi ... si risparmia tantissimo a raggruppare valori booleani in un singolo bit di un byte e poi fare il set, reset e test con gli operatori bitwise e magari, per brevità di scrittura, con l'ausilio della macro _BV() ...

Code: [Select]
set    : varByte |= _BV(numeroBit);
reset  : varByte &= ~(_BV(numeroBit));
test   : if (varByte & _BV(numeroBit)) ....

... tutte cose eseguite in uno paio di cicli macchina o poco più ... ;)

Guglielmo

P.S.: la macro _BV() è definita in <avr/sfr_defs.h> come:  #define _BV (bit)   (1 << (bit))
Search is Your friend ... or I am Your enemy !

maubarzi

Non si parlava di tempo di esecuzione ma di spazio utilizzato in memoria.
se ad ogni test devi aggiungere un byte per indicare numeroBit già ti sei perso il vantaggio mi sa.
Nessuna buona azione resterà impunita!

Preistoria -> medioevo -> rinascimento -> risorgimento -> rincoglionimento!

gpb01

se ad ogni test devi aggiungere un byte per indicare numeroBit già ti sei perso il vantaggio mi sa.
... mmm ... non ne sono sicurissimo. Certo, occorrerebbe valutare quante variabli booleane ti servono, quali operazioni fai più spesso, ecc. ecc. e valutare caso per caso l'ottimizzazione migliore :)

Guglielmo
Search is Your friend ... or I am Your enemy !

Go Up