volevo chiedere se e possibile associare il codice tra parentesi graffe a "qualcosa"
im modo da scrivere solo una parola
questo per evitare di ripetere per molte volte la stessa cosa e finire di esaurire le risorse
GINGARDU:
questo per evitare di ripetere per molte volte la stessa cosa e finire di esaurire le risorse
Anche se realizzi una macro, o una funzione dedicata, per snellire la scrittura del codice sempre e comunque dovrai avere quel tot di istruzioni in cascata ripetute tot volte, anche se non le vedi nel codice direttamente verranno comunque compilate con il relativo impegno della flash/ram.
puoi usare gli array (quì uso 2 array paralleli, ma una matrice è più "pulita" per evitare diverse dimensioni tra i 2 array):
int dimensioneArray=10;
int arrayPin[] = {2,3,4,5,6,7,8,9,10,11};
int arrayStato[] = {HIGH,HIGH,LOW,HIGH,LOW,HIGH,HIGH,LOW,LOW,LOW}; //attenzione HIGH e LOW non sono boolean ma int!!!
int settaPin(int pin[], int stati[], int dimensione){
for(int i=0;i<dimensione;i++){
digitalWrite(arrayPin[i], stati[i]);
}
}
altra versione, che però deve settare tutti i pin in nel range da "inizio" a "fine":
int settaPin(int stati[], int inizio, int fine){
for(int i=inizio;i<fine;i++){
digitalWrite(i, stati[i]);
}
}
In tutti i casi devi fare attenzione alle dimensioni e all'inizializzazione degli array, ovviamente
GINGARDU:
questo per evitare di ripetere per molte volte la stessa cosa e finire di esaurire le risorse
Anche se realizzi una macro, o una funzione dedicata, per snellire la scrittura del codice sempre e comunque dovrai avere quel tot di istruzioni in cascata ripetute tot volte, anche se non le vedi nel codice direttamente verranno comunque compilate con il relativo impegno della flash/ram.
Il pre processore in questo non esegue nessuna ottimizzazione?
Sapevo,forse erroneamente, che una serie di operazioni identiche consecutive venivano comunque ridotte ad un unico set di istruzioni chiamato ripetutamente.
se vuoi allegerire le istruzioni di digitalwrite,potresti considerare l'idea,se hai molte digitalwrite di pin consecutivi con valori noti a compile-time,di settare direttamente i registri..in questo modo setti(o resetti) più pin per volta..
GINGARDU:
questo per evitare di ripetere per molte volte la stessa cosa e finire di esaurire le risorse
Anche se realizzi una macro, o una funzione dedicata, per snellire la scrittura del codice sempre e comunque dovrai avere quel tot di istruzioni in cascata ripetute tot volte, anche se non le vedi nel codice direttamente verranno comunque compilate con il relativo impegno della flash/ram.
Macro e funzioni sono due cose completamente diverse. Se scrivi una funzione e la richiami in 10 punti del codice non hai occupazione di progmem pari a 10 x dimensione della funzione. In altre parole, il codice di una funzione non viene ripetuto (ricopiato) ad ogni chiamata, ma è presente una sola volta in tuto il programma e viene, appunto, soltanto "richiamato".
m_ri:
se vuoi allegerire le istruzioni di digitalwrite,potresti considerare l'idea,se hai molte digitalwrite di pin consecutivi con valori noti a compile-time,di settare direttamente i registri..in questo modo setti(o resetti) più pin per volta..
he he ci sono arrivato ma in ritardo ormai avevo quasi scritto tutto
comunque anche se mi fa incazz*** ho deciso di ririscrivere tutto l'ambaradan
cosi la prossima volta imparo =(
e quando faccio un qualcosa ci penso bene quali pin assegnare e a risparmiare pin e memoria
accorpare pin dove possibile