Newsgroup: it.comp.lang.c
Titolo: indirizzi e puntatori

Sapete dirmi come faccio a dire a un puntatore di puntare un determinato
indirizzo di memoria? Vorrei comunicare con la porta parallela ma non so
come fare...
grazie.

 ha scritto nel messaggio
news:zkc78.12580$nI1.3...@twister1.libero.it...


 ha scritto nel messaggio
news:zkc78.12580$nI1.3...@twister1.libero.it...


 parallela
Scusate la mia ignoranza sull'argomento ( che tra l'altro è anche OT ;-) ma
io ho sempre saputo che nei moderni sistemi operativi l'accesso diretto
all'hardware non è consentito, e per fare una cosa del genere si dovesse
ricorrere a chiamate a qualche API.
Ciao,
Cecco

 ricorrere a chiamate a qualche API.
Fino a Win98 si poteva fare ma come dici tu nei moderni sistemi operativi
non dovrebbe essere consentito :) ... forse su Win2000 ed XP quelli della
microsoft hanno alzato il livello di protezione ... ma questo non lo so!
Ciao
Alessio C.

ricorrere a chiamate a qualche API.
Infatti e' cosi'.  inp() e outp() non sono funzioni
standard, ma, a parte questo, sotto i vari NT non e'
possibile accedere al mapping delle porte che viene compiuto
in memoria, in quanto si solleva un'eccezione "Privileged
Instruction".  Bisogna o usare le API (tipicamente per la
seriale) o scriversi un driver.
-- 
Andrea Laforgia (
walkie...@libero.it
)
"Usenet is a strange place" [Dennis Ritchie]

Un attimo, inp() e outp() non sono standard? questo vuol dire che quasi
sicuramente su linux non esistono! Allora mi potete spiegare come se avessi
4 anni come assegnare una variabile a un indirizzo di memoria(0x379)?

 ha scritto nel messaggio
news:XEe78.12596$5M4.4...@twister2.libero.it...


si, col puntatore. qualcosa tipo
int *pippo;
pippo=0x378;
Per favore non ridete per quello che ho scritto, non sono tanto pratico...

sicuramente su linux non esistono!
No, il fatto che delle funzioni non siano standard, non vuol
necessariamente dire che non esistano su piattaforme
specifiche.  inp() e outp() erano funzioni comunemente
utilizzate con i compilatori Borland e servivano a gestire
le porte su piattaforme come il DOS, che non prevedeva
meccanismi di astrazione e protezione dell'hardware.
Sotto Windows, tutta la gammma NT per la precisione, il che
vuol dire NT/2000/XP ecc... l'hardware viene "virtualizzato"
con un layer chiamato HAL, per l'appunto, da "Hardware
Abstraction Layer" e non e' possibile gestire direttamente
le periferiche se non scrivendo dei driver o utilizzando API
apposite.  Sotto Linux, non so se sia possibile accedere
alle porte in quel modo, ma forse dovresti leggere lo
standard POSIX.


 standard POSIX.
outb  e inb  esistono anche  su linux,  ma il  loro uso  e` sconsigliato
(almeno fuori dal kernel): funzionerebbero solo con i permessi di root e
solo dopo  aver richiesto l'autorizzazione. Tutto questo  in maniera non
portabile. La soluzione piu`  semplice e pulita e`  attaccarsi al device
(/dev/ttyS0 o giu` di li`) ed usare quello.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Let me make your mind, leave yourself behind
Be not afraid

 pippo=0x378;
 
Il problema, se non ho capito male, non e' come assegnare un indirizzo
ad un puntatore, ma come indirizzare la parallela.
Le due istruzioni di sopra sono corrette. Che abbiano senso e'
da vedere.
Sotto Linux i dispositivi non possono essere pilotati direttamente.
se vuoi spedire dati direttamente alla parallela devi aprire il file
/dev/lpt0.
In ogni caso, per fare fopen() sul file "/dev/lpt0" devi essere
root, altrimenti il gioco non funziona.
Spero di essere stato utile.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG