Offline
God Member
Karma: 6
Posts: 541
|
 |
« on: September 22, 2012, 06:53:53 am » |
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
if (C2 >= 0 && C2 <= 10) { // OO digitalWrite (2, LOW); digitalWrite (3, LOW); //centrale digitalWrite (4, HIGH); //destro digitalWrite (5, LOW); digitalWrite (6, LOW); digitalWrite (7, LOW); digitalWrite (8, LOW); digitalWrite (9, LOW); digitalWrite (10,HIGH); digitalWrite (11, HIGH); }
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
Selvazzano Dentro - Padova
Offline
God Member
Karma: 17
Posts: 521
"Chi sa fa, chi non sa insegna"
|
 |
« Reply #1 on: September 22, 2012, 07:06:04 am » |
Parli di una funzione? SetOutput(LOW, LOW, HIGH, LOW, LOW, LOW, LOW, LOW, HIGH, HIGH);
... void SetOutput(boolean Out2, boolean Out3, boolean Out4, ... boolean Out11) { digitalWrite (2, Out2); digitalWrite (3, Out3); //centrale digitalWrite (4, Out4); //destro digitalWrite (5, Out5); digitalWrite (6, Out6); digitalWrite (7, Out7); digitalWrite (8, Out8); digitalWrite (9, Out9); digitalWrite (10,Out10); digitalWrite (11, Out11); }
|
|
|
|
|
Logged
|
|
|
|
|
Italy
Offline
Full Member
Karma: 6
Posts: 102
|
 |
« Reply #2 on: September 22, 2012, 07:11:32 am » |
Pensavo di aver avuto un dejavù..ed infatti http://arduino.cc/forum/index.php/topic,112350.msg844509.html#msg844509Stai chiedendo la stessa cosa? N.
|
|
|
|
|
Logged
|
"The question is not whether intelligent machines can have emotions, but whether machines can be intelligent without any emotions"
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7340
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #3 on: September 22, 2012, 07:26:35 am » |
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.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #4 on: September 22, 2012, 07:43:29 am » |
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
0
Offline
Tesla Member
Karma: 81
Posts: 8184
:(){:|:&};:
|
 |
« Reply #5 on: September 24, 2012, 03:40:56 am » |
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
|
|
|
|
|
Logged
|
|
|
|
|
MC
Offline
God Member
Karma: 9
Posts: 670
|
 |
« Reply #6 on: September 24, 2012, 03:40:02 pm » |
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.
|
|
|
|
|
Logged
|
Vi è una spiegazione scientifica a tutto. La fede è solo quell'anello che si porta al dito dopo il matrimonio.
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16431
Don't know what I do
|
 |
« Reply #7 on: September 24, 2012, 04:02:00 pm » |
Dipende da come il compilatore ottimizza il codice. Per avere la certezza di ciò andrebbe disassemblato un firmware compilato.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Sr. Member
Karma: 6
Posts: 462
|
 |
« Reply #8 on: September 24, 2012, 04:04:30 pm » |
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..
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Edison Member
Karma: 26
Posts: 1339
You do some programming to solve a problem, and some to solve it in a particular language. (CC2)
|
 |
« Reply #9 on: September 25, 2012, 04:51:23 am » |
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".
|
|
|
|
« Last Edit: September 25, 2012, 05:00:07 am by tuxduino »
|
Logged
|
|
|
|
|
MC
Offline
God Member
Karma: 9
Posts: 670
|
 |
« Reply #10 on: September 29, 2012, 02:32:25 pm » |
Dipende da come il compilatore ottimizza il codice. Per avere la certezza di ciò andrebbe disassemblato un firmware compilato.
E la madonna.... se non ricordo male è possibile avere in uscita insieme al file hex anche il file asm , non occorre disassemblare.
|
|
|
|
|
Logged
|
Vi è una spiegazione scientifica a tutto. La fede è solo quell'anello che si porta al dito dopo il matrimonio.
|
|
|
|
Offline
God Member
Karma: 6
Posts: 541
|
 |
« Reply #11 on: September 29, 2012, 02:45:24 pm » |
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 ah mannaggia l'esperienza
|
|
|
|
|
Logged
|
Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...
|
|
|
|
|