Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Come risolvere una lunga cascata di IF

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

1
voti

[11] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto UtentePietroBaima » 23 ott 2021, 10:26

metti in un array tutti i puntatori a funzioni e poi gli indicizzi, come nell’esempio del messaggio [6]
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex
Avatar utente
Foto UtentePietroBaima
84,6k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 11097
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[12] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto Utentealev » 23 ott 2021, 10:40

Non so se soddisfi la richiesta, ma il C di Microchip supporta lo statement switch (), come già detto da MarcoD
https://microchipdeveloper.com/tls2101: ... statements
Avatar utente
Foto Utentealev
4.582 2 9 12
free expert
 
Messaggi: 4966
Iscritto il: 19 lug 2010, 14:38
Località: Altrove

1
voti

[13] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto UtentePietroBaima » 23 ott 2021, 10:45

alev ha scritto:Non so se soddisfi la richiesta

no, non la soddisfa.
Mettere uno switch o una catena di if non è molto diverso.
Inoltre l’uso dello switch è oggi deprecato e viene conservato unicamente per legacy.
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex
Avatar utente
Foto UtentePietroBaima
84,6k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 11097
Iscritto il: 12 ago 2012, 1:20
Località: Londra

1
voti

[14] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto UtenteEtemenanki » 23 ott 2021, 12:35

PietroBaima ha scritto:... non usare l’istruzione “goto”, è veramente orribile...


Perche' ? ... "10 Goto 10" non era una perla di saggezza ? :mrgreen:
"Sopravvivere" e' attualmente l'unico lusso che la maggior parte dei Cittadini italiani,
sia pure a costo di enormi sacrifici, riesce ancora a permettersi.
Avatar utente
Foto UtenteEtemenanki
1.263 1 4 5
Expert EY
Expert EY
 
Messaggi: 863
Iscritto il: 2 apr 2021, 23:42
Località: Dalle parti di un grande lago ... :)

0
voti

[15] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto Utentealev » 23 ott 2021, 12:43

Perla, forse....saggezza? Dipende :mrgreen:
Avatar utente
Foto Utentealev
4.582 2 9 12
free expert
 
Messaggi: 4966
Iscritto il: 19 lug 2010, 14:38
Località: Altrove

2
voti

[16] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto UtentePietroBaima » 23 ott 2021, 12:44

:D

Lo era, ma gli spaghetti stanno sullo stomaco ai programmatori.

Forse questo video spiega meglio perché sia utile costruire puntatori a funzioni:



Oggi, comunque, non si usano più nemmeno i puntatori a funzioni, che sono superati dalle funzioni anonime.

A chi interessa approfondire consiglio di leggere qualcosa sulla programmazione funzionale o sul lambda calcolo.

Questi concetti sono stati fondamentali per costruire gli interpreti dei comandi.

Lo stesso interprete dei comandi DOS era una struttura dati (una lista) di puntatori a funzioni.

Qui un esempio di funzioni anonime in Mathematica.
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex
Avatar utente
Foto UtentePietroBaima
84,6k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 11097
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[17] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto UtenteGioArca67 » 23 ott 2021, 13:10

A mio avviso, senza nulla togliere alla pregevole proposta di Pietro, occorre modificare in modo più pesante il codice.
Siamo in una ISR (fast!! ??).
Quindi l'unica cosa da fare è settare una o due variabili ed uscire. Altrove ci si occuperà di agire in base a quanto settato.
Poi ormai i compilatori sono molto più bravi di un bravo programmatore....
Avatar utente
Foto UtenteGioArca67
1.126 3 7
Expert
Expert
 
Messaggi: 926
Iscritto il: 12 mar 2021, 9:36

0
voti

[18] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto UtentePietroBaima » 23 ott 2021, 13:17

?%
eh??
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex
Avatar utente
Foto UtentePietroBaima
84,6k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 11097
Iscritto il: 12 ago 2012, 1:20
Località: Londra

0
voti

[19] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto UtenteGioArca67 » 23 ott 2021, 13:45

Cosa non ti convince?
1) una ISR deve essere veloce?
2) i moderni compilatori sono più bravi dei bravi programmatori?
Avatar utente
Foto UtenteGioArca67
1.126 3 7
Expert
Expert
 
Messaggi: 926
Iscritto il: 12 mar 2021, 9:36

2
voti

[20] Re: Come risolvere una lunga cascata di IF

Messaggioda Foto UtentePietroBaima » 23 ott 2021, 13:52

Non si sta parlando di come bisogna scrivere una ISR.
Se vuoi possiamo farlo, ma è OT.
L’OP vuole sapere come rendere efficiente una lunga catena di IF.
La risposta è di usare un puntatore a funzioni e di fare un array con tutti i puntatori.
Il codice da scrivere nella ISR sarà pertanto:
Codice: Seleziona tutto
(*fun_ptr_arr[stato])(var1, var2, var3 eccetera);

al posto di tutti quegli IF.
L’efficienza del codice, facendo così, aumenta almeno di un fattore 10.

Se poi vogliamo parlare di come ci si deve comportare in un service di interrupt bisogna considerare questo:
L’applicazione è real-time?
se sì allora la funzione va calcolata nell’ISR e pertanto il uC deve avere una potenza di calcolo adeguata; se no si esce dalla ISR con il puntatore alla funzione e si richiama la funzione fuori, mentre si aspetta il prossimo INT, quando deciso dallo scheduler.
Generatore codice per articoli:
nomi
emoticon
citazioni
formule latex
Avatar utente
Foto UtentePietroBaima
84,6k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 11097
Iscritto il: 12 ago 2012, 1:20
Località: Londra

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti