Pages: [1]   Go Down
Author Topic: " Snellire " il codice  (Read 1458 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
Edison Member
*
Karma: 45
Posts: 1417
"Chi sa fa, chi non sa insegna"
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Parli di una funzione?

Code:

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 Offline
Full Member
***
Karma: 6
Posts: 102
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pensavo di aver avuto un dejavù..ed infatti
http://arduino.cc/forum/index.php/topic,112350.msg844509.html#msg844509
Stai 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 Offline
Tesla Member
***
Karma: 130
Posts: 9516
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

questo non me lo dovevi dire  smiley-twist smiley-twist smiley-twist


allora ci stiamo prendendo in giro da soli   smiley-cry smiley-cry smiley-cry


alla  fine per scrivere meno "scriviamo" di piu  smiley-eek-blue
Logged


Le cose si possono considerare facili in due casi: quando le si conosce bene o quando non le si conosce affatto...

0
Offline Offline
Shannon Member
****
Karma: 131
Posts: 10474
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

puoi usare gli array (quì uso 2 array paralleli, ma una matrice è più "pulita" per evitare diverse dimensioni tra i 2 array):

Code:
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":

Code:
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

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

MC
Offline Offline
God Member
*****
Karma: 14
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 332
Posts: 22817
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Dipende da come il compilatore ottimizza il codice. Per avere la certezza di ciò andrebbe disassemblato un firmware compilato.
Logged


Offline Offline
God Member
*****
Karma: 9
Posts: 550
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 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)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 14
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 Offline
God Member
*****
Karma: 8
Posts: 691
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-cry

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...

Pages: [1]   Go Up
Jump to: