Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Salto multiplo

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Salto multiplo

Messaggioda Foto UtenteEcoTan » 19 set 2015, 19:36

Ho scritto un programma in C dove c'è una variabile intera che può assumere tutti i valori da 0 a 50, ed una routine ISR che deve eseguire 50 diverse (sequenze di) istruzioni a seconda del valore presentato dalla detta variabile. Attualmente ho risolto con 50 istruzioni "if" che testano i singoli valori, ma si può fare di meglio dal punto di vista della rapidità di esecuzione della ISR?
Avatar utente
Foto UtenteEcoTan
7.720 4 12 13
Expert EY
Expert EY
 
Messaggi: 5426
Iscritto il: 29 gen 2014, 8:54

0
voti

[2] Re: Salto multiplo

Messaggioda Foto UtenteRussell » 19 set 2015, 19:42

non è possibile usare gli "switch" "case" ?
Avatar utente
Foto UtenteRussell
3.373 3 5 9
Master
Master
 
Messaggi: 2193
Iscritto il: 4 ott 2009, 10:25

0
voti

[3] Re: Salto multiplo

Messaggioda Foto UtenteCandy » 19 set 2015, 19:45

Sicuramente compito per uno switch, ma bruttissimo per una ISR. Dovresti ristrutturare il codice ed alleggerire la ISR, per come la vedo io. Per solo tu sai perché lo hai fatto...
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

5
voti

[4] Re: Salto multiplo

Messaggioda Foto Utentesimo85 » 19 set 2015, 20:00

Array di puntatori a funzione ?

Esempio (su Linux):

Codice: Seleziona tutto
#include <unistd.h>
#include <string.h>

void foo(void)
{
   write(1, __FUNCTION__ , strlen(__FUNCTION__));
   write(1, "\n", 1); 
}

void bar(void)
{
   write(1, __FUNCTION__ , strlen(__FUNCTION__));
   write(1, "\n", 1);
}

int main(void)

   void (*functions[])() = {foo, bar};
   /* call foo */
   functions[0]();
   /* call bar */
   functions[1]();

   return 0;
}


Poi, se ti va, fai delle prove con if - else, switch - case etc. ed osserva il disassembling del codice..
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

2
voti

[5] Re: Salto multiplo

Messaggioda Foto UtenteTardoFreak » 19 set 2015, 21:45

Come suggerito da Foto Utentesimo85 la soluzione migliore è un'array di puntatori a funzione.
Scrivere una lista di "if" è equivalente a scrivere uno "switch", non cambia niente se non la sintassi. Questo sistema è vantaggioso solo per il primo (massì, anche per il secondo) caso, ma tremendamente svantaggioso per l'ultimo caso che necessita che vengano fatti tutti i confronti.
L'accesso ad un'array di puntatori a funzione è invece immediato ed estremamente veloce.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

3
voti

[6] Re: Salto multiplo

Messaggioda Foto UtenteDirtyDeeds » 19 set 2015, 22:29

Nota: se usi il compilatore gcc puoi usare un'estensione non standard che ti permette di implementare i computed goto (v. anche qui).
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[7] Re: Salto multiplo

Messaggioda Foto UtenteTardoFreak » 19 set 2015, 23:00

GOTO :?:
Orrore, abominio, maledizione!

Il povero Dijkstra urla vendetta!

Amico mio, da te proprio non me lo sarei mai aspettato. :cry:
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[8] Re: Salto multiplo

Messaggioda Foto UtenteCandy » 20 set 2015, 0:13

Tf, switch non è per nulla equivalente di if. Lo switch salta direttamente alla unica condizione senza controllare tutte le condizioni.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

2
voti

[9] Re: Salto multiplo

Messaggioda Foto UtenteTardoFreak » 20 set 2015, 0:22

No Mauro, non potrebbe farlo. Non è una tabella ma una comparazione multipla.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[10] Re: Salto multiplo

Messaggioda Foto UtenteCandy » 20 set 2015, 0:24

Allora non hai ancora disassemblato molto codice.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 13 ospiti