PDA

View Full Version : [Teoria] Vettore di interrupt


Stobby
30-08-2007, 10:08
Ciao a tutti!
Avrei bisogno di un'informazione: conoscete qualche sito web in cui è possibile ottenere la descrizione dei vettori di interrupt di Windows e la loro collocazione nella memoria?
Sono abituato a lavorare con i microcontrollori, pertanto magari la domanda potrà apparire assurda girata su un PC: è possibile modificare il vettore di interrupt temporaneamente (es: durante l'esecuzione di un programma utente) in modo da sostituire la routine standard di un particolare interrupt con una routine ad-hoc?

Grazie mille a tutti coloro risponderanno.

Ciao

cionci
30-08-2007, 10:20
Non puoi modificare direttamente ai vettori di interrupt di Windows e nemmeno aggiungerne uno tuo. Si trovano in una zona di memoria inaccessibile ai programmi utente.
Con il DOS si poteva fare, ma da un bel po' non è più possibile.

Stobby
30-08-2007, 10:46
Ok, scusa la domanda, ma allora come faccio a creare le mie routine di interrupt per associare causa scatenante (es: stampante) a mia risposta? Ci sono per caso di mezzo le API?

cionci
30-08-2007, 10:53
Ok, scusa la domanda, ma allora come faccio a creare le mie routine di interrupt per associare causa scatenante (es: stampante) a mia risposta?
Non puoi. Devi scrivere un driver.
Ci sono per caso di mezzo le API?
Per scrivere un driver sì.
In Windows si fa tutto e solo con le API. L'assembly scordatelo ;)

Stobby
30-08-2007, 14:42
Però... non credevo fosse così macchinoso il processo..
Grazie mille per le risposte! Ho risparmiato molto tempo... ora so cosa e dove cercare ;)!!

Ciao

cionci
30-08-2007, 15:50
Senza farti stare a cercare troppo...per sviluppare driver ti serve il Microsoft Device Driver Kit, ovviamente il Platform SDK ed ambiente di sviluppo compatibile, ti consiglio Visual Studio Express 2005 (che è anche gratuito).

71104
30-08-2007, 18:19
Stobby, la documentazione del WDK (Windows Driver Kit) verso l'inizio riporta una frase estremamente saggia: prima di scrivere un driver pensaci e ripensaci, perché il più delle volte scoprirai semplicemente che non è necessario*.

come mai vuoi creare una routine di handling di una interrupt? è assai probabile che ciò che vuoi fare si possa fare in "plain user mode", per così dire, cioè usando delle semplicissime API Win32 (non hai idea di che cosa sia scrivere un driver per Windows :D).

* sto cercando dov'è che lo diceva, se la ritrovo ve la quoto :D
edit - non la trovo ma la sua veridicità rimane intatta :p
forse l'ho letta su una versione vecchia del DDK (documentazione offline, adesso invece la stavo cercando online).

Stobby
31-08-2007, 08:49
come mai vuoi creare una routine di handling di una interrupt? è assai probabile che ciò che vuoi fare si possa fare in "plain user mode", per così dire, cioè usando delle semplicissime API Win32 (non hai idea di che cosa sia scrivere un driver per Windows :D).


L'idea è nata semplicemente perché ho progettato una scheda a DSP che comunica con il PC tramite seriale.Ho pensato (ragionando in analogia al DSP) che il programma lato computer, invece di fare polling sulla seriale per vedere se la scheda aveva qualche cosa da comunicare potesse attendere un interrupt dalla seriale e conseguentemente scaricare il buffer. La questione nasce dal fatto che in genere io programmo microcontrollori e DSP e che quindi sono molto abituato ad utilizzare gli interrupt. Sono abbastanza acerbo di programmazione su PC pertanto sono aperto a tutte le soluzioni. Se posso fare una cosa in maniera più semplice, ben venga... devo solo capire quale è l'idea migliore ;)

In ogni caso, da quello che ho capito, queste benedette API devo conoscerle se voglio fare fare qualunque cosa a Win32... la documentazione consigliata da Cionci contiene anche delle informazioni sulle api?

Grazie e ciao

cionci
31-08-2007, 10:26
Fallo in polling...guarda, ti risparmi tanti di quei problemi.
Quella non è la documentazione bensì le librerie e gli include per sviluppare su Win32.

ilsensine
31-08-2007, 10:37
L'idea è nata semplicemente perché ho progettato una scheda a DSP che comunica con il PC tramite seriale.
Qualsiasi cosa attaccata alla seriale rientra in quella categoria che, come diceva 71104, non ha bisogno di un driver in kernel space.

Devi semplicemente utilizzare il driver per la porta seriale di Windows, provvederà lui a gestire irq, trasferimento dati, impostazioni della porta ecc.