Salto multiplo
Moderatore:
Paolino
28 messaggi
• Pagina 1 di 3 • 1, 2, 3
0
voti
[1] Salto multiplo
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?
5
voti
Array di puntatori a funzione ?
Esempio (su Linux):
Poi, se ti va, fai delle prove con if - else, switch - case etc. ed osserva il disassembling del codice..
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..
2
voti
Come suggerito da
simo85 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.
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.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
3
voti
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
instead of
(Anonimo).
...'cos you know that
ain't
, right?
You won't get a sexy tan if you write
in lieu of
.
Take a log for a fireplace, but don't take
for
arithm.
instead of
(Anonimo)....'cos you know that
ain't
, right?You won't get a sexy tan if you write
in lieu of
.Take a log for a fireplace, but don't take
for
arithm.-

DirtyDeeds
55,9k 7 11 13 - G.Master EY

- Messaggi: 7012
- Iscritto il: 13 apr 2010, 16:13
- Località: Somewhere in nowhere
0
voti
GOTO
Orrore, abominio, maledizione!
Il povero Dijkstra urla vendetta!
Amico mio, da te proprio non me lo sarei mai aspettato.
Orrore, abominio, maledizione!
Il povero Dijkstra urla vendetta!
Amico mio, da te proprio non me lo sarei mai aspettato.
"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.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
2
voti
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.
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
-

TardoFreak
73,9k 8 12 13 - -EY Legend-

- Messaggi: 15754
- Iscritto il: 16 dic 2009, 11:10
- Località: Torino - 3° pianeta del Sistema Solare
28 messaggi
• Pagina 1 di 3 • 1, 2, 3
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 13 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)




