Pages: [1]   Go Down
Author Topic: [Risolto] multithreading?  (Read 652 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 2
Posts: 181
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Buongiorno!

Da un po' cerco informazioni su Arduino. Non ho ancora acquistato nulla e volevo prima di tutto capire alcune cose a livello di funzionamento sw.

Questa è la situazione ipotetica:
- devo gestire alcune uscite (p.es. luci, led, ecc.)
- le uscite hanno un proprio tempo di funzionamento: "ON" per x millisec, poi spegne
- i vari carichi sono attivati da altrettanti ingressi (pulsanti)

Ci saranno quindi vari cicli, oppure delay, ognuno per ogni azione di un pulsante.

Domande:
1. come viene gestita la sovrapposizione di questi tempi? Cioè, se premo un secondo pulsante mentre il primo carico è ancora "ON" e in loop (o delay), cosa succede?
2. immagino che non si parli di multithreading...
3. le eventuali funzioni richiamate alla pressione del relativo pulsante, chiamate in successione, lavorano indipendentemente oppure ogni volta Arduino aspetta la fine di un "processo", prima di iniziare il successivo?

Ovvio che la #3 mi sembrerebbe assurda, però parlando per ora in via del tutto teorica, non si sa mai!

Grazie e perdonate eventuali (mie) banalità per questioni per voi ovvie!

 smiley-red

edit: avevo trovato questo http://hosiris.wordpress.com/2011/10/20/multithreading-con-arduino/ che in pratica conferma i dubbi e suggerisce un "trucco"
« Last Edit: September 20, 2012, 04:30:24 am by andreino » Logged



Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prima cosa benvenuto, c'è l'apposito topic per le presentazioni sarebbe bello che tu ti presentassi a tutti.(ps complimenti per aver usato le sezioni quasi nessuno all'inizio le usa  smiley-mr-green )
Finita questa piccola parentesi vediamo un pò come fare a spiegarti come funziona un arduino
Quote
1. come viene gestita la sovrapposizione di questi tempi? Cioè, se premo un secondo pulsante mentre il primo carico è ancora "ON" e in loop (o delay), cosa succede?
Il loop esegue il tuo codice all'infinito ora se passa la prima volta mette on, se passa la seconda mette off, se metti un delay il codice si blocca e quello che dovrebbe essere eseguito dopo non viene eseguito.
Se invece usi un pulsante puoi fare che quando legge lo stato del pulsante accende o spegne LED e Luci, altrimenti se vuoi che sia a tempo usi la funzione mills che non blocca il codice e ti permette di fare logica sul tempo trascorso(ES accendere un led per 4 secondi).
Quote
2. immagino che non si parli di multithreading...
Se intendi il multitasking,no non esiste però fare un giro di loop di solito impiega molto meno di un secondo quindi esegui velocemente molte operazioni al secondo.
Quote
3. le eventuali funzioni richiamate alla pressione del relativo pulsante, chiamate in successione, lavorano indipendentemente oppure ogni volta Arduino aspetta la fine di un "processo", prima di iniziare il successivo?
Arduino aspetta la fine del processo,ma non vedo quale processo possa essere cosi lungo da bloccare il codice di arduino.
Se hai altre domande chiedi pure,spero nel mio piccolo di essere stato abbastanza esaustivo,comunque riceverai sicuramente altre risposte forse anche più chiare smiley-wink
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 23015
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho scritto un paio di librerie che aiutano a gestire processi in "background". Per background non intendo un multitasking effettivo come quello dei PC desktop ma in modo indipendente dall'utente.
Queste librerie sono schedulatori che possono eseguire delle funzioni predefinite ad intervalli regolari oppure dopo un periodo determinato dall'utente (nel tuo esempio, accendere la luce e poi spengerla dopo X secondi).
Si chiamano looper e leOS: il primo è un semplice schedulatore software, che è legato all'esecuzione del loop principale, il secondo si basa sui timer interni ed opera in maniera del tutto indipendente dal loop.
Logged


Offline Offline
Full Member
***
Karma: 2
Posts: 181
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prima cosa benvenuto, c'è l'apposito topic per le presentazioni sarebbe bello che tu ti presentassi a tutti.(ps complimenti per aver usato le sezioni quasi nessuno all'inizio le usa  smiley-mr-green )
Finita questa piccola parentesi vediamo un pò come fare a spiegarti come funziona un arduino
Quote
1. come viene gestita la sovrapposizione di questi tempi? Cioè, se premo un secondo pulsante mentre il primo carico è ancora "ON" e in loop (o delay), cosa succede?
Il loop esegue il tuo codice all'infinito ora se passa la prima volta mette on, se passa la seconda mette off, se metti un delay il codice si blocca e quello che dovrebbe essere eseguito dopo non viene eseguito.
Se invece usi un pulsante puoi fare che quando legge lo stato del pulsante accende o spegne LED e Luci, altrimenti se vuoi che sia a tempo usi la funzione mills che non blocca il codice e ti permette di fare logica sul tempo trascorso(ES accendere un led per 4 secondi).
Quote
2. immagino che non si parli di multithreading...
Se intendi il multitasking,no non esiste però fare un giro di loop di solito impiega molto meno di un secondo quindi esegui velocemente molte operazioni al secondo.
Quote
3. le eventuali funzioni richiamate alla pressione del relativo pulsante, chiamate in successione, lavorano indipendentemente oppure ogni volta Arduino aspetta la fine di un "processo", prima di iniziare il successivo?
Arduino aspetta la fine del processo,ma non vedo quale processo possa essere cosi lungo da bloccare il codice di arduino.
Se hai altre domande chiedi pure,spero nel mio piccolo di essere stato abbastanza esaustivo,comunque riceverai sicuramente altre risposte forse anche più chiare smiley-wink

Grazie, provvederò a presentarmi!

Credo che la parola chiave sia proprio millis! Parlavo di multithreading perchè in VB.NET sto cercando di imparare e risolvere alcune cose proprio con delegate ecc., da cui il dubbio amletico su Arduino.

Quindi, volendo per esempio stare sulla domotica, se alcuni carichi sono "a tempo", essi dovrebbero essere gestiti ognuno da una variabile "timer" valorizzata con la durata scelta e controllata ad ogni loop del micro.

Ok, ora studio meglio, grazie!

Logged



Offline Offline
Full Member
***
Karma: 2
Posts: 181
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho scritto un paio di librerie che aiutano a gestire processi in "background". Per background non intendo un multitasking effettivo come quello dei PC desktop ma in modo indipendente dall'utente.
Queste librerie sono schedulatori che possono eseguire delle funzioni predefinite ad intervalli regolari oppure dopo un periodo determinato dall'utente (nel tuo esempio, accendere la luce e poi spengerla dopo X secondi).
Si chiamano looper e leOS: il primo è un semplice schedulatore software, che è legato all'esecuzione del loop principale, il secondo si basa sui timer interni ed opera in maniera del tutto indipendente dal loop.

Molto interessante, grazie! Credo che risolva proprio la questione dei vari "processi" simultanei. Non sono riuscito a trovarli probabilmente perchè mi mancano le giuste parole chiave.

Mi sto leggendo ben bene quei post... smiley-mr-green
Logged



Offline Offline
Edison Member
*
Karma: 28
Posts: 2031
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prima cosa benvenuto, c'è l'apposito topic per le presentazioni sarebbe bello che tu ti presentassi a tutti.(ps complimenti per aver usato le sezioni quasi nessuno all'inizio le usa  smiley-mr-green )
Finita questa piccola parentesi vediamo un pò come fare a spiegarti come funziona un arduino
Quote
1. come viene gestita la sovrapposizione di questi tempi? Cioè, se premo un secondo pulsante mentre il primo carico è ancora "ON" e in loop (o delay), cosa succede?
Il loop esegue il tuo codice all'infinito ora se passa la prima volta mette on, se passa la seconda mette off, se metti un delay il codice si blocca e quello che dovrebbe essere eseguito dopo non viene eseguito.
Se invece usi un pulsante puoi fare che quando legge lo stato del pulsante accende o spegne LED e Luci, altrimenti se vuoi che sia a tempo usi la funzione mills che non blocca il codice e ti permette di fare logica sul tempo trascorso(ES accendere un led per 4 secondi).
Quote
2. immagino che non si parli di multithreading...
Se intendi il multitasking,no non esiste però fare un giro di loop di solito impiega molto meno di un secondo quindi esegui velocemente molte operazioni al secondo.
Quote
3. le eventuali funzioni richiamate alla pressione del relativo pulsante, chiamate in successione, lavorano indipendentemente oppure ogni volta Arduino aspetta la fine di un "processo", prima di iniziare il successivo?
Arduino aspetta la fine del processo,ma non vedo quale processo possa essere cosi lungo da bloccare il codice di arduino.
Se hai altre domande chiedi pure,spero nel mio piccolo di essere stato abbastanza esaustivo,comunque riceverai sicuramente altre risposte forse anche più chiare smiley-wink

Grazie, provvederò a presentarmi!

Credo che la parola chiave sia proprio millis! Parlavo di multithreading perchè in VB.NET sto cercando di imparare e risolvere alcune cose proprio con delegate ecc., da cui il dubbio amletico su Arduino.

Quindi, volendo per esempio stare sulla domotica, se alcuni carichi sono "a tempo", essi dovrebbero essere gestiti ognuno da una variabile "timer" valorizzata con la durata scelta e controllata ad ogni loop del micro.

Ok, ora studio meglio, grazie!

Esattamente smiley-wink studia un pò il millis che ti sarà utile,se poi ti scocci usa il leOS e non ci pensare più,per qualsiasi cosa c'è mastercard ops volevo dire il forum  smiley-wink
Logged

"Due cose sono infinite: l'universo e la stupidità umana, ma riguardo l'universo ho ancora dei dubbi..." Albert Einstein

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 333
Posts: 23015
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Le librerie le trovi sul mio sito (vedi link in calce alla mia firma)
Logged


Offline Offline
Full Member
***
Karma: 2
Posts: 181
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@Madwriter: ok! E mi sono presentato!  smiley

@leo72: ok! Non ho ancora niente in mano di mio, ma questo dubbio è risolto: si può fare e tranquillamente Capirete che era un bivio notevole!!  smiley

Grazie, gentilissimi, ora mi metto al lavoro (per lo più a chiedere.... smiley-red)

Logged



Pages: [1]   Go Up
Jump to: