ciao a tutti,
premetto che è da poco che mi cimento nella programmazione con arduino...mi ritrovo con un piccolo dubbio vorrei sapere se esiste un comando che una volta chiamato mi rimanda direttamente alla funzione loop() principale ad esempio il "togo" ma che leggendo nel reference sconsigliano di usare....questo è un esempio schematizzato dello sketch
quello che volevo sapere è se io posso con un comando passare direttamente dalla funzione_d() al loop()...so che in questo caso non serve ecc ma era giusto uno schema per cercare di far capire di quello che parlo...una sorta di "return/break" ma anziché uscire solamente dalla funzione io voglio indicargli di preciso in che punto del codice andare a posizionarsi...spero che si sia capito quello che intendo...
NON puoi senza tornare indietro nello stesso ordine ...
... ogni volta che una funzione ne chiama un'altra, come nel tuo caso, l'indirizzo di ritorno viene messo nello stack con una PUSH e quindi, a ritroso, occorre fare altrettante POP per togliere i valori dallo stack e tornare indietro.
Naturalmente puoi creare una semplice variabile di stato che usi, quando ritorni da una funzione, per capire se devi continuare nella funzione chiamante o eseguire subito un return
Guglielmo
Edit : In assembler la cosa è fattibile (... ma è una porcheria farla) perché posso dirgli quanti bytes rimuovere dallo stack
void loop(){
funzione_a(); // va alla funzione e ritorna
funzione_b(); // va alla funzione e ritorna
funzione_c();// va alla funzione e ritorna
funzione_d();// va alla funzione e ritorna
qui prosegue
}
void funzione_a(){
funzione_b();
}
void funzione_b(){
funzione_c();
}
void funzione_c(){
funzione_d();
}
perchè devi ritornare nel loop? se hai cose ripetitive le puoi mettere in un altra funzione e richiamarla da a,b,c,d
ok grazie mille ora che so che non esiste un comando posso mettermi l anima in pace, è da un paio di giorni che cerco una risposta in rete senza trovare risposta...in realta la mia era una domanda più teorica che pratica nel senso che avevo gia risolto con return e controlli if pero volevo capire se ci fosse un comando ad hoc per questi casi...grazie mile a tutti
@ tapirinho: non ha nulla a che vedere con quello che vuole fare lui ...
loop() ---> chiama fA() ---> chiama fB() ---> chiama fC() ---> chiama fD() ...a questo punto lui voleva poter uscire direttamente da fD() senza passare indietro per le funzioni chiamate.
Tu invece, a seconda del "case", chiami UNA alla volta le varie funzioni ... che è ben diverso !
A parte che se ti vediamo usare un "goto" ti mettiamo al rogo ... comunque NON funziona perché :
"A label has the same form as a variable name, and is followed by a colon. It can be attached to any statement in the same function as the goto." (Kernighan - Ritchie, The C programming Language, Second Edition, Pag. 61)
... e ribadiamo, sempre usando una frase del Kernighan - Ritchie, che :
"With a few exceptions, code that relies on goto statements is generally harder to understand and to maintain than code without gotos. Although we are not dogmatic about the matter, it does seem that goto statements should be used rarely, if at all." XD XD XD
gpb01:
@ tapirinho: non ha nulla a che vedere con quello che vuole fare lui ...
loop() ---> chiama fA() ---> chiama fB() ---> chiama fC() ---> chiama fD() ...a questo punto lui voleva poter uscire direttamente da fD() senza passare indietro per le funzioni chiamate.
Tu invece, a seconda del "case", chiami UNA alla volta le varie funzioni ... che è ben diverso !
Guglielmo
già... l'avevo preannunciato ed in effetti è stato proprio così