Newsgroup: it.comp.programmare.win32
Titolo: interrupt per campionamento

Il mio problema è un po' delicato: vorrei sapere come è possibile realizzare
un campionamento da una scheda qualsiasi (che so audio o porta seriale) con
intervalli di tempo il più accurati possibile al fine di gestire in tempo
reale una applicazione di controllo.
Vedo di spiegarmi più chiaramente: dovrei realizzare un programma che legge
da una scheda (non importa quale) ad intervalli regolari e tra un intervallo
e l'altro deve svolgere dei conti su quello che ha trovato...troppo
complicato?!?
P.S.: vorrei utilizzare C++...ma non penso che conti un granchè nel problema
Ogni aiuto o incoraggiamento è gradito a piene mani!!
grazie

 
Puoi realizzare due programmi: uno tratta i dati, e l'altro è 
semplicemente una procedura chiamata da un interrupt (credo che si possa 
  impostare il timer di sistema per generarne uno ogni tanto, ma ancora 
meglio sarebbe usare quello chiamato dalla porta dati).
Mi aggancio a questo per fare un'altra domanda al ng: come si fa in 
windows a creare una nuova ISR e associarla a un particolare interrupt?

 reale una applicazione di controllo.
Esistono degli appositi sistemi operativi real-time, particolarmente 
indicati per sistemi embedded.
Usando Windows, puoi usare un Waitable Timer, e impostare la priorità 
con SetPriorityClass e SetThreadPriority.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 windows a creare una nuova ISR e associarla a un particolare interrupt?
devi scrivere un driver e usare un Interrupt Object:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Kernel_d/hh/Kernel_d/Intrupts_7d9a5fc7-f9d2-4cf5-a0aa-786d2be3b5b2.xml.asp?frame=true
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Kernel_d/hh/Kernel_d/Intrupts_a9c2009c-fa84-4540-9878-6524e52e3137.xml.asp?frame=true
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/Kernel_d/hh/Kernel_d/Intrupts_5f899ace-18ea-45a5-8c90-4ed3f8c534cd.xml.asp?frame=true
ciao
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 che ha trovato...troppo complicato?!?
Dipende da quanto devono essere regolari gli intervalli e da quanto 
può pesare sul funzionamento del sistema un ritardo molto superiore 
alla media.
Windows (sia per le varianti derivate da 95 che per quelle derivate 
da NT) non è un sistema operativo realtime.
Per gestire intervalli di tempo puoi usare l'API sleep (ma con una 
precisione nell'ordine del mezzo secondo), i timer multimediali (più 
precisi) o scrivere un driver che si collega a un interrupt di 
sistema.
In nessun caso, però, il S.O. ti potrà garantire che, per un 
qualsiasi motivo, il tuo timer non venga ritardato anche di parecchi 
millisecondi.
Se ti servono intervalli più precisi hai due alternative:
- usare delle estensioni real-time per Win32 (ce ne sono diverse, 
ognuna con pregi e difetti e tutte a costi abbastanza elevati)
- usare un sistema operativo real-time.
Se lavori su architetture PC x86 e hai già esperienza di 
programmazione sotto Windows, puoi provare con Windows CE.
I tempi di risposta possono variare in funzione dell'hardware, ma un 
S.O. realtime (e le estensioni di Win32 sono più o meno un S.O. che 
"ospita" Windows) ti garantisce jitter e tempi di risposta entro un 
certo livello e, lavorando sulle priorità, puoi decidere quali sono i 
thread prioritari e garantire loro i tempi di servizio migliori.
Ho visto soluzioni real-time realizzate con XP, XP embedded o Windows 
98. Usando un PC dedicato e una configurazione ad-hoc il sistema può 
funzionare. Però basta una modifica al più infimo e inutile dei 
driver per rischiare di compromettere completamente l'affidabilità 
della tua soluzione. Quindi, a meno di utilizzi "amatoriali" dove un 
crash del sistema non provoca danni, ti consiglio di considerare le 
alternative che ti ho proposto. Per CE, tra l'altro, puoi scaricare o 
farti spedire un evaluation a 120 giorni gratuita.
-- 
Valter Minute
(the reply address of this message is invalid)
(l'indirizzo di reply di questo messaggio non è valido)

Grazie a tutti per le risposte!
La mia idea, dato che devo progettare un sistema di controllo per una tesina
di laurea di 1° livello, è utilizzare un pc che ho a casa il quale avrà
sopra unicamente windows 98 e il mio programma (più leggero di così!!) per
effettuare delle prove.
Se le simulazioni hanno esito positivo, si pensava di portare tutto su
microcontrollore...il tutto per una mera questione di spesa...
Inoltre volevo chiedervi se secondo voi era troppo alta una frequenza di
campionamento di 44Khz per windows e se riesco a metterci dentro una analisi
mediante una Fast Fourier Transform quasi in real-time. Alla fine non mi
serve una risposta del sistema in real-time, ma è necessario che il
campionamento sia preciso, altrimenti le frequenze vanno a quel paese!!
Grazie ancora!!