Offline
God Member
Karma: 4
Posts: 762
|
 |
« on: March 17, 2013, 11:36:56 am » |
Leo il tuo leOS è un mezzo bidone!  Lo sto implementando nel mio mega-schetch un pezzo per volta, una funzione per volta (levando i delay()). La prima e seconda funzione vanno bene, ma alla terza funzione, quella che legge il BMP085 già va in tilt. Uso la libreira Adafruit per il BMP085. Che tu sappia usa qualche timer in conflitto con il leOS?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17011
Don't know what I do
|
 |
« Reply #1 on: March 17, 2013, 11:46:49 am » |
Leo il tuo leOS è un mezzo bidone!  Queste sono le soddisfazioni della vita  Lo sto implementando nel mio mega-schetch un pezzo per volta, una funzione per volta (levando i delay()). La prima e seconda funzione vanno bene, ma alla terza funzione, quella che legge il BMP085 già va in tilt.
Uso la libreira Adafruit per il BMP085. Che tu sappia usa qualche timer in conflitto con il leOS?
Vedo che la lib usa una funzione di delay (quella della toolchain Avr) e la Wire. La Wire mi sa che è incompatibile con il leOS perché usa gli interrupt. La delay Avr non so su cosa si basi.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 762
|
 |
« Reply #2 on: March 17, 2013, 12:58:23 pm » |
Mannaggia... allora farò un mezzo-e-mezzo.
leOS dove funziona, e delay() dove non si può.
Leo ma secondo te qualunque libreria di questo tipo mi darebbe problemi? Anche un coso serio come FreeRTOS?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17011
Don't know what I do
|
 |
« Reply #3 on: March 17, 2013, 04:50:55 pm » |
Leo ma secondo te qualunque libreria di questo tipo mi darebbe problemi? Anche un coso serio come FreeRTOS?
Più che FreeRTOS, usa ChibiOS/RT. Di entrambi esiste un port per Arduino correntemente mantenuto: http://arduino.cc/forum/index.php/topic,145716.0.htmlma ChibiOS/RT pare offrire più features ed impattare meno sulla memoria rispetto a FreeRTOS. Esistono però dei problemi anche con essi, non sono perfetti al 100%. Ad esempio, il delay è una di quelle cose che dà noia agli RTOS perché blocca i thread a bassa priorità. Usare il looper invece? Il looper è uno scheduler come il leOS che, però, non è basato su interrupt. E' meno preciso e può "perdere dei colpi" però non blocca nulla perché usa i millis di Arduino.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 762
|
 |
« Reply #4 on: March 17, 2013, 04:58:36 pm » |
Looper? Però devo installare l'accrocchio su una macchina abbastanza "importante" e deve stare acceso 24 ore al giorno.
Millisec tira le cuoia dopo 47 giorni, e la macchina mi si pianta...
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17011
Don't know what I do
|
 |
« Reply #5 on: March 17, 2013, 05:13:31 pm » |
Looper? Però devo installare l'accrocchio su una macchina abbastanza "importante" e deve stare acceso 24 ore al giorno.
Millisec tira le cuoia dopo 47 giorni, e la macchina mi si pianta...
Allora usa secTimer che ti ho consigliato nell'altro thread, va in overflow dopo un centinaio d'anni 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17011
Don't know what I do
|
 |
« Reply #6 on: March 17, 2013, 05:14:23 pm » |
|
|
|
|
|
Logged
|
|
|
|
|
Online
God Member
Karma: 3
Posts: 609
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
|
 |
« Reply #7 on: March 18, 2013, 07:02:30 am » |
Millisec tira le cuoia dopo 47 giorni, e la macchina mi si pianta...
Guarda che non ti devi preoccupare che millis() vada in overflow. Quando fai una somma il risultato che ottieni (omettendo il flag carry) è modulo "n", nel caso di millis() è modulo 32. Semplificando il discorso, se millis andasse a 8 bit, quello che ottieni appartiene sempre all'intervallo 0-255. Se fai 250+10 ottieni 260-256 = 4. Ora, supponendo che tu abbia letto che millis() vale 250 e l'istante dopo vale 4, quando te fai 4-250 in teoria otterresti (se fossero numeri con segno)-246, ma visto che non lo sono e il risultato che ottieni è sempre compreso nell'intervallo 0-255 quello che ottieni facendo 4-250 è -246+256 = 10, guarda caso il numero di millisecondi che ti interessa. L'unico problema che potresti avere con l'overflow di millis() è se te leggi millis() ora e poi lo rileggi dopo che è andato in overflow 2 volte... P.S. Leo il tuo leOS è un mezzo bidone!  Scusami ma l'esperienza e la competenza di Leo mi sembrano fuori discussione, ed inoltre non mi sembra carino offendere l'operato di un'altra persona che si è messo a lavorare gratuitamente per fornire alla comunità di Arduino una libreria utile come leOS. Ovvio, non è un RTOS, quindi ha i suoi limiti, ma sta a te conoscerli e valutare se fa al caso tuo o meno. Inoltre, se pensi di aver trovato un baco, perché non lo risolvi e lo dici a Leo così che lo possa sistemare?
|
|
|
|
« Last Edit: March 18, 2013, 08:40:44 am by Janos »
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17011
Don't know what I do
|
 |
« Reply #8 on: March 18, 2013, 10:38:53 am » |
L'unico problema che potresti avere con l'overflow di millis() è se te leggi millis() ora e poi lo rileggi dopo che è andato in overflow 2 volte...
Detto in altre parole, bisogna che l'intervallo sia inferiore al modulo Scusami ma l'esperienza e la competenza di Leo mi sembrano fuori discussione, ed inoltre non mi sembra carino offendere l'operato di un'altra persona che si è messo a lavorare gratuitamente per fornire alla comunità di Arduino una libreria utile come leOS. Ovvio, non è un RTOS, quindi ha i suoi limiti, ma sta a te conoscerli e valutare se fa al caso tuo o meno. Inoltre, se pensi di aver trovato un baco, perché non lo risolvi e lo dici a Leo così che lo possa sistemare?
Guarda che non me la sono mica presa, l'ho presa per battuta e difatti ho risposto ad essa come tale. 
|
|
|
|
|
Logged
|
|
|
|
|
Online
God Member
Karma: 3
Posts: 609
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
|
 |
« Reply #9 on: March 18, 2013, 11:04:37 am » |
Detto in altre parole, bisogna che l'intervallo sia inferiore al modulo
Giustissimo, ma detto così mi smonti tutta la spiegazione... Ho fatto una supercazzola sdraiata a destra e te me l'hai sintetizzata in 10 parole...  P.S. Me lo ero immaginato che non te la eri presa, però ugualmente non mi era sembrato un commento felice...
|
|
|
|
« Last Edit: March 18, 2013, 11:08:06 am by Janos »
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 762
|
 |
« Reply #10 on: March 19, 2013, 02:09:11 pm » |
Cioè, se le continue verifiche su Millis, non superano i 47 giorni (cioè non faccio un controllo ora e l'altro tra 48 giorni) il millis non dà problemi? A Leo devo tirare un pò le balle ogni tanto, se no si rilassa! 
|
|
|
|
|
Logged
|
|
|
|
|
Online
God Member
Karma: 3
Posts: 609
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
|
 |
« Reply #11 on: March 19, 2013, 03:08:53 pm » |
 Dipende come lo utilizzi. Se utilizzi in maniera differenziale (ovvero del tipo millis() - tempoPrec >= intervallo) non hai problemi.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 226
Posts: 17011
Don't know what I do
|
 |
« Reply #12 on: March 19, 2013, 05:13:00 pm » |
Cioè, se le continue verifiche su Millis, non superano i 47 giorni (cioè non faccio un controllo ora e l'altro tra 48 giorni) il millis non dà problemi?
Se fai un controllo del tipo if (millis - vecchio_millis > intervallo) non incorri nel problema di millis. A Leo devo tirare un pò le balle ogni tanto, se no si rilassa!  
|
|
|
|
|
Logged
|
|
|
|
|
|