Go Down

Topic: Liberia SdFat (Read 1 time) previous topic - next topic

leo72



... L'attesa dell'inserimento di una SD è una di quelle cose da NON mettere in un task: blocchi tutto il micro finché non viene inserita la scheda.


Girando i rete cercavo uno scheduler SW basato su millis giusto per fare quella cosa e guarda cosa mi è venuto fuori: looper... Mi potevi dire che avevi fatto anche quello? Sei troppo modesto...  ;)

EDIT:
Ho visto che non sono includibili insieme...  =( Mi dice che ONETIME è già stato definito...

Purtroppo no, il looper è stato scritto per sostituire il leOS.
Però col looper puoi fare cose simili a quelle permesse dal leOS, l'unica differenza principale è che col looper non hai più la certezza assoluta dell'esecuzione del task ad intervalli esatti. Ma se si parla di intervalli di centinaia o migliaia di millisecondi (come nel tuo caso) la cosa è irrilevante.

pablos

#16
Feb 26, 2013, 10:33 pm Last Edit: Feb 26, 2013, 10:58 pm by pablos Reason: 1

Non è che esiste una funzione (che magari mi è sfuggita) per testare se la SD è ancora presente?


Avevo fatto questo un po' di tempo fa, se tu controllassi gli stati di tutti i pin in tempo reale ti accorgeresti che quando estrai la SD alcuni pin che riguardano l'impegno dello shield e della SD cambiano di stato

Ho creato un controllo e un ripristino automatico nel caso venisse rimossa e reinserita la schedina, il tutto funzionava bene, ma ho ritenuto  inuitile tale funzione dato che ......."Perchè mai dovresti rimuovere la sd mentre il sistema è in funzione?" XD

Soprattutto se rimuovi la scheda mentre è in lettura non succede nulla la spi si inchioda e va reinizializzata (poco male), ma se la rimuovi mentre è in scrittura la situazione diventa grave, comprometti i settori di inizializzazione e il file system, tutti i dati saranno perduti e va riformattata
no comment

leo72

L'idea di lesto del led da accendere quando la SD è in uso non è da scartare. Anzi, avverte visivamente l'utente di non rimuovere la scheda pena danni ai propri dati.

pablos

Arduino si accorge che hai tolto la scheda immediatamente, ma non si accorge quando la rimetti .... reinserendola non funziona più a meno che ogni n secondi non gli fai fare il controllo e reinizializzare la stessa, vale la pena fargli perdere questo tempo?
no comment

lesto


Arduino si accorge che hai tolto la scheda immediatamente, ma non si accorge quando la rimetti .... reinserendola non funziona più a meno che ogni n secondi non gli fai fare il controllo e reinizializzare la stessa, vale la pena fargli perdere questo tempo?


perchè, arduino ha altro da fare nel frattempo?  :smiley-mr-green:
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

pablos

Bhe si, presumo che il micro debba leggere i pin agire di conseguenza in base al programma, insomma fare le sue cose oltre che vedere se qualcuno lo smembra staccandogli una gamba mentre lavora   :D :D :D
no comment

Janos

Non male l'idea del led...


Ho creato un controllo e un ripristino automatico nel caso venisse rimossa e reinserita la schedina, il tutto funzionava bene...


Avresti niente da postare?  ;)

Se non riesco a far riconoscere ad Arduino quando la scheda viene inserita prevederò un comando con un tasto o un comando seriale/ethernet per dirgli di montare la SD perché ho visto che la SD2Card::init ci mette un mese ad andare in timeout. A proposito, c'è un modo per abbassare questo tempo?

Piccolo OT:

...Purtroppo no, il looper è stato scritto per sostituire il leOS...

Come potrei fare per usarle insieme? Mi può far comodo nel progetto due schedulatori, uno a interrupt per i task importanti e uno software per le cose un po meno importati e magari più lunghe...

leo72


Piccolo OT:

...Purtroppo no, il looper è stato scritto per sostituire il leOS...

Come potrei fare per usarle insieme? Mi può far comodo nel progetto due schedulatori, uno a interrupt per i task importanti e uno software per le cose un po meno importati e magari più lunghe...

Vedo di fare qualcosa io..

Janos

I love you...  XD

lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

leo72

Prova l'allegato.
la lib si chiama looper2, la includi con
Code: [Select]
#include "looper2.h" e poi la istanzi con qualcosa tipo
Code: [Select]
looper2 myScheduler
I metodi hanno nomi differenti: al posto di addTask, removeTask.... adesso c'è addJob, removeJob... ecc..
ONETIME è stato sostituito da ONE_TIME.

A parte queste modifiche visibile dall'esterno, internamente ci sono tutta una serie di nomi diversi per le variabili, per evitare doppioni con quelle del leOS.

Allegato c'è uno sketch che dimostra come il leOS ed il looper funzionino insieme

lesto

più veloce della luce :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Janos

Di già?  XD XD XD
Grazie mille...

leo72

Avevo 20 minuti da buttar via ;-)

Go Up