Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Far eseguire due funzioni indipendenti

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

1
voti

[21] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto Utenteedgar » 23 ott 2020, 10:24

stefanopc ha scritto:ti dico come faccio solitamente da autodidatta

Autodidatta per autodidatta dico la mia per il caso specifico:
Azzero una variabile per ciascuna task
Imposto un interrupt a 1 secondo

Non me ne vogliano i puristi, nella routine di gestione dell'interrupt bisognerebbe eseguire il minimo possibile ma se si tratta solo di far lampeggiare due led faccio lo gnorri :mrgreen:

Al verificarsi di un interrupt:
Incremento la variabile di ciascuna task
se la prima variabile è uguale a due inverto l'uscita e azzero la variabile
allo stesso modo
se la seconda variabile è uguale a tre inverto l'uscita e azzero la variabile

Non devo fare somme di semiperiodi, azzeramenti di timer globali, etc etc, in più, lavorando con interi <255, si lavora su un byte, con guadagno di tempo macchina.
My 2 cents
Avatar utente
Foto Utenteedgar
10,0k 4 5 8
Master
Master
 
Messaggi: 5229
Iscritto il: 15 set 2012, 22:59

1
voti

[22] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto UtenteIlGuru » 23 ott 2020, 10:31

Tutte ottime soluzioni, ma l'OP non sapeva che void va scritto separato da loop() e che nello stesso sorgente non ci possono stare due funzioni con lo stesso nome.
Il problema era a monte.
\Gamma\nu\tilde{\omega}\theta\i\ \sigma\epsilon\alpha\upsilon\tau\acute{o}\nu
Avatar utente
Foto UtenteIlGuru
5.482 2 10 13
G.Master EY
G.Master EY
 
Messaggi: 1924
Iscritto il: 31 lug 2015, 23:32

0
voti

[23] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto Utentelemure64 » 23 ott 2020, 10:40

[...]Non me ne vogliano i puristi, nella routine di gestione dell'interrupt bisognerebbe eseguire il minimo possibile ma se si tratta solo di far lampeggiare due led faccio lo gnorri :mrgreen:


Interessante soluzione a cui ho sempre voltato le spalle; per la mia mentalità (e ovviamente in-cultura in alcuni sotto-settori) interagire con l'hardware al punto di chiamare interrupt è un terreno scivoloso e ho sempre evitato. Però voglio provare a giocarci, appena esce per caso un arduino dal cassetto ci provo :)
Avatar utente
Foto Utentelemure64
689 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 421
Iscritto il: 23 giu 2020, 12:26

0
voti

[24] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto Utenteedgar » 23 ott 2020, 11:00

IlGuru ha scritto:l'OP non sapeva che void va scritto separato da loop()

Questo, non usando il C, non lo sapevo nemmeno io :mrgreen: :mrgreen: :mrgreen:
Avatar utente
Foto Utenteedgar
10,0k 4 5 8
Master
Master
 
Messaggi: 5229
Iscritto il: 15 set 2012, 22:59

0
voti

[25] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto Utentelucaking » 23 ott 2020, 11:23

IlGuru ha scritto:Tutte ottime soluzioni, ma l'OP non sapeva che void va scritto separato da loop() e che nello stesso sorgente non ci possono stare due funzioni con lo stesso nome.
Il problema era a monte.

Va beh dai, in nove mesi lo avrà imparato.... :mrgreen:

Scherzi a parte, a me fa piacere che la discussione sia andata avanti, ora c' è, è pubblica e chiunque può trarne spunti interessanti.
Soprattutto quelli come me, che da autodidatti trafficoni, magari due led riuscivano pure a farli lampeggiare, ma sul come ci sarebbe stato parecchio da dire.
A sto punto, ci starebbe bene l' intervento di qualche professionista che dica la sua su come sarebbe meglio farlo.
Avatar utente
Foto Utentelucaking
1.651 4 5 8
Expert
Expert
 
Messaggi: 1445
Iscritto il: 29 mag 2015, 14:28

0
voti

[26] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto UtentedrGremi » 23 ott 2020, 18:32

Sinceramente tutto sono tranne che un professionista. Ho "giocato" un po' con arduino e poi con gli lpc della nxp.
La cosa secondo me più "pulita" è quella di settaresi un timer e poi implementare una specie di scheduler che esegue le funzioni necessarie.
Oppure una FSM e si fa cambiare stato con il timer.

Ovviamente poi dipende cosa si sta facendo, non è detto che si abbiano dei timer liberi a disposizione. Soprattutto ricercare "la soluzione perfetta" su una cosa abbastanza semplice non credo abbia troppo senso.
Se il main è vuoto si può anche usare la funzione millis e "salvando" l'ultima volta che si è lanciata la funzione si fa cambiare lo stato al LED dopo il tempo prefissato.
Avatar utente
Foto UtentedrGremi
2.294 3 5 9
Master EY
Master EY
 
Messaggi: 1455
Iscritto il: 20 nov 2019, 19:49

1
voti

[27] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto Utentestefanopc » 23 ott 2020, 19:34

Non c'entra cosa dicono i pezzi grossi.
C'entra il sistema che più si adatta alle tue esigenze e/o conoscenze.
Tutte le strade portano a Roma ognuno sceglie la sua...
Ciao
600 Elettra
Avatar utente
Foto Utentestefanopc
13,3k 5 9 13
Master EY
Master EY
 
Messaggi: 5567
Iscritto il: 4 ago 2020, 9:11

0
voti

[28] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto UtentedrGremi » 23 ott 2020, 21:47

Hai espresso in termini più semplici quello che volevo dire :D
Avatar utente
Foto UtentedrGremi
2.294 3 5 9
Master EY
Master EY
 
Messaggi: 1455
Iscritto il: 20 nov 2019, 19:49

0
voti

[29] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto UtenteSandroCalligaro » 24 ott 2020, 0:33

stefanopc ha scritto:Non c'entra cosa dicono i pezzi grossi.
C'entra il sistema che più si adatta alle tue esigenze e/o conoscenze.
Tutte le strade portano a Roma ognuno sceglie la sua...
Ciao
Beh, non sono del tutto d'accordo.
Non tutte le soluzioni sono altrettanto valide, e ovviamente quanto una soluzione sia quella giusta dipende dai requisiti. Alcune soluzioni apparentemente facili possono nascondere dei problemi che solo chi ci ha già sbattuto la testa può immaginare.

Lungi da me l'idea del "si è sempre fatto così", ma è importante sfruttare l'esperienza degli altri, per imparare.
Per farlo, bisogna avere possibilmente le basi e guardare attentamente quello che altri, possibilmente esperti (vogliamo chiamarli "pezzi grossi"?), hanno fatto prima di noi (lo "stato dell'arte"). Spesso si scopre che dietro certe scelte c'è almeno un buon motivo. Se si tiene conto anche di quei problemi e si è in grado di fare qualcosa di meglio, ben venga.
Avatar utente
Foto UtenteSandroCalligaro
2.970 2 4 5
G.Master EY
G.Master EY
 
Messaggi: 1181
Iscritto il: 6 ago 2015, 19:25

0
voti

[30] Re: Far eseguire due funzioni indipendenti

Messaggioda Foto Utentelucaking » 24 ott 2020, 8:12

Esatto, Foto UtenteSandroCalligaro ha riassunto perfettamente il mio pensiero.
Non è questione di pezzi grossi, o piccoli, è solo che ascoltando e guardando cosa fanno gli addetti ai lavori o professionisti di un certo settore, a me è SEMPRE capitato di imparare cose che solo con iibri o da semplice hobbista non avrei mai imparato.
Purtroppo l' esperienza non si compra su ebay e quando qualcuno la condivide su un forum, io penso non ci sia prezzo.

Mi rendo conto che la mia "richiesta" è stata un po' priva di senso, in quanto la strada piu corretta da seguire, dipende da piu fattori, tipo l' hardware a disposizione, da cos' altro deve fare il programma,ecc....
Forse più che una richiesta di soluzione sarebbe stato piu sensato un invito ai piu esperti a fare qualche considerazione a riguardo.

Foto Utentestefanopc ha scritto:Non c'entra cosa dicono i pezzi grossi.
C'entra il sistema che più si adatta alle tue esigenze e/o conoscenze.
Tutte le strade portano a Roma ognuno sceglie la sua...

Come ho gia detto, Foto Utentestefanopc, anch' io mi arrangio a scrivere qualche riga di codice in base alle mie esigenze/conoscenze, ma ogni tanto mi capita anche di leggere del codice scritto da chi lo sa fare veramente e mi deprimo.... #-o
Non condivido queste tue affermazioni, per il semplice fatto che ragionando cosi mi sarei accontentato di far lampeggiare i due led come sapevo, (arrivando a Roma per la mia strada) e magari mi sarei anche convinto di saperlo fare senza migliorare di un epsilon.
Ritengo che questo sia uno dei motivi per cui il web è pieno di progetti che usano dei micro con potenze di calcolo paragonabili a quelle dei PC di qualche anno fa per temporizzare un relè o poco più....
Avatar utente
Foto Utentelucaking
1.651 4 5 8
Expert
Expert
 
Messaggi: 1445
Iscritto il: 29 mag 2015, 14:28

PrecedenteProssimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite