Newsgroup: it.comp.lang.c++
Titolo: eccezione in visualc richiamando una instruione asm

Salve a tutti, 
devo accedere direttamente all'io di un pc windows Xp. Tramite le
solite routine _inp e _outp. Per far questo ho scaricato la
DirectIO.sys che serve appunto ad accedere direttamente alle porte.
Fin qui tutto bene riesco a chiamare le _inp ecc, quando però ho
cercato di pilotare il controller seriale (uart) per comunicare
direttamente con la porta seriale( non è quello che mi serve ma volevo
vedere se funziona il tutto) mi si verifica una eccezzione in visualc
proprio dove eseguo delle istruzioni assembler tramite _asm di visual.
ecco di seguito parte del codice
//*******************
oid Serial_Write (unsigned char ch) {
     while (!((unsigned char)Read_UART(port_in_use, REG_LSR) & 0x20))
{}
     //clear interrupts
     _asm cli
 
     Write_UART(port_in_use, REG_THR, (int)ch);
     //set interrupts
     _asm sti
}
//***********************
l'eccezione sollevata proprio in _asm cli e _asm sti è:
unhandled exception : Privileged instruction
è chiaro che il mio programma non ha il diritto di eseguire questa
istruzione, io penava di averlo acquisito tramite il driver Giveio.sys
come trovato in rete ma null..
Qualcuno sa darmi qualche dritta,
grazie 1000
ilcario

 
Sei sicuro che il driver ti consenta di usare direttamente _inp e 
_outp e non di fare I/O passando per delle chiamate differenti (che 
rigirano le in e out sul driver)?
-- 
Valter Minute
vmi...@inwind.it
 (the reply address of this message is invalid)

 rigirano le in e out sul driver)?
E' quello che almeno ho trovato in giro per internet
(
http://www.devarticles.com/c/a/Embedded-Tools/Programming-Custom-Hardware-for-Windows/
),
esempi con sorgenti e applicazioni varie.
La prova del nove l'ho fatta disattivando il driver e invocando le
_outp,(senza disabilitare gli interrupt)e come risultato
l'applicazione da un errore di accesso alla memoria.
Se invece attivo il giveio.sys sembre senza interrupt tutto funziona..
o sembra funzionare.
ilcario

 istruzione, io penava di averlo acquisito tramite il driver Giveio.sys
Anche noi avevamo lo stesso problema, e l'abbiamo risolto scrivendo un 
apposito driver. Infatti, le istruzioni cli e sti possono essere 
eseguite solo in modalita' privilegiata, e solo un driver puo' 
funzionare in tale modalita'. Per farlo, abbiamo ordinato dalla 
Microsoft il CD del Driver Development Kit, per cui si pagano solo le 
spese di spedizione, e che comprende un compilatore C, documentazione in 
formato Help e molti esempi.
Il problema principale sta nel fatto che non siamo riusciti a 
condividere variabili globali tra il programma applicativo e il driver. 
Pertanto lo usiamo nel seguente modo: serializziamo tutte le variabili 
globali che servono al driver in un array, passiamo l'array nella 
chiamata al driver, e riceviamo dal driver un altro array con i nuovi 
valori per le variabili globali.
-- 
     Carlo Milanesi
 
http://digilander.libero.it/carlmila

 rigirano le in e out sul driver)?
fermo restando che quel driver è un'aberrazione, qui stiamo parlando di 
CLI e STI. Nemmeno in kernel mode si potrebbero usare, in teoria
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.2.2. C, C++ and ASM developers
                               and beta testers are welcome!

 Giveio.sys come trovato in rete ma null..
mavafacu', va'. CLI e STI? ma hai idea di cosa facciano?


 array con i nuovi valori per le variabili globali.
va benissimo così
