hjelp til hardware programmering ved hjelp av 'C'

I

iandme25

Guest
Er det mulig å lagre den ønskede innholdet i ønsket direkte minneplasseringen bruker 'c'?Jeg kom over en henvisning om at det er mulig å gjøre dette ved hjelp av pekere, men det gjorde ikke vises tydelig for meg hvordan det er mulig?også jeg ville like å vite noen gode oppslagsverk om samspill comp hardware direkte ved hjelp av 'c'? noen bøker?

 
Bør være noe som dette
int * p, F, G;

p = (int *) 55675;
f = * p;

g = 1232;
* p = g;

Jeg husker i dos du fikk til fjern og nær pekere.Og jeg vet ikke hva dette ville gjøre i XP eller Vista med alle tilgang lag innebygd i operativsystemet og prosessoren.Jeg kan huske å gjøre denne typen adressering å sette skjermminne direkte.Jeg tviler på du kunne gjøre det i dag.

 
Vær på vakt mot ulike kompilatoren-avhengige og operativsystemspesifikke avhengige problemer.

Her er et eksempel på å skrive 16-bits verdi 0x27EB til adresse 0x12345678, forutsatt at kompilatoren adresse plass og heltall størrelse er både 32 bits og korte heltall 16 biter:

* (volatile short *) 0x12345678 = 0x27EB;

Pass på at adresser sett av en søknad kan bli oversatt til ulike fysiske adresser av CPU Memory Management Unit.Den MMU er vanligvis kontrolleres av operativsystemet.Hvis adressen du prøver å nå er utenfor programmets adresseområdet allokert av operativsystemet, så du må ringe et spesielt operativsystem funksjon for å få tilgang til denne adressen, kan imidlertid tilgangen nektes av sikkerhetsgrunner.

 
Userport er en kernel mode driver for Windows NT/2000 som gir usermode programmer tilgang til I / O-porter.Dette gjør det mulig å få tilgang til maskinvaren direkte fra en normal kjørbar på samme måte som under Windows 95/98/ME

link: http://www.embeddedtronics.com/public/Electronics/minidaq/userport/UserPort.zip

I winXP din C-programmet tilgang til maskinvare registre vil bli blokkert av OS.Du kan bruke dette hendige verktøyet å låse opp noen adresser for direkte tilgang.

 
Ja, det er lett.Men, hvordan fikk du vet nøyaktig minneplasseringen?

byte * p = (byte *) TheAddressYouGot;
byte byteData = * p; / / Få byte på adressen.

 
Grensesnitt Parallell / Seriell porten er gjennom dedikerte registre for den enheten.Disse registrene er tilordnet bestemte minneplasseringer:

parallellport (LPT): 0x378, 0x278, 0x3bc
http://en.wikipedia.org/wiki/Parallel_port

så writting verdi til 0x378

Code:

unsigned char * peker = (unsigned char *) 0x378;

* pekeren = 0xFF;

 
Som ikke vil fungere fordi 0x378 er en I / O-port adresse, ikke et minne adresse.Du vil måtte bruke en input eller output opcode.

 
hvis ur med innebygde C, så du har spesifikke instruksjoner for lasting av data inn i spesifikke / ønsket plassering av menory.

 

Welcome to EDABoard.com

Sponsor

Back
Top