Avatar billede jang Nybegynder
31. december 2000 - 16:32 Der er 6 kommentarer og
1 løsning

adresering af memory på absolut adresse

Jeg har et isa communikations kort med egen processor og shared ram som er placeret i memory hole fra 15-16 M på adressen F00000-F1FFFF. Jeg har tidliger i DOS adreseret dette kort ved hjælp af INT15, Men nu er jeg igang med at omskrive DOS programmet til Windows, jeg bruger Visual C++, jeg har forsøgt at oprette en pointer

VOID char *test
test=0xF00000

men det jeg kan læse på den adresse er ikke share rammen fra isa kortet
Avatar billede alquesm Nybegynder
02. januar 2001 - 01:18 #1
Jeg har ingen anelse, sorry, men jeg kunne godt tænke mig at vide hvordan du er så sikker på dens addresse!? :)
Avatar billede soepro Nybegynder
02. januar 2001 - 12:11 #2
Der er nogle begrænsninger i hvilke ting man får lov til i Win32 applikationer, i forhold til hvad vi kunne under DOS. Jeg har ligeledes anvendt et I/O kort på en bestemt port (180h) til styring af noget elektronik. Under DOS kunne jeg anvende inport og outport til at \"snakke\" med kortet, men disse to findes ikke/er ikke \"tilladte\" under Win32.

Jeg løste mit problem ved at skifte til assembler i mit Win32 program, da der findes både en inp og en outp assembler kommando:

int port = 0x180;
int data = 0x00;
asm
{
  mov bx, data
  mov ax, port
  outp ax, bx
}

Tilsvarende burde du kunne gøre sådan her:

asm
{
  mov ax, 0xF00000
  mov data, ax
}
Avatar billede soepro Nybegynder
02. januar 2001 - 12:12 #3
En anden ting slår mig: hvis du laver en simpel DOS (Console) application, virker det så ???
Avatar billede tuxen Nybegynder
03. januar 2001 - 10:35 #4
Det eneste problem med direkte adressering er hvis man ønsker sit program kombatibelt med win 2000.
Der fås access denied ved læs / skriv i adresse områder / segmenter, der ikke tilhører ens eget program.
Avatar billede jang Nybegynder
03. januar 2001 - 21:47 #5
hej soepro\'s svar lyder umildbart rigtigt men, jeg har prøvet at lade visuel c++ gå over i debug og der ser det rigtig ud, og som tuxen skriver vil det ikke virke i win 2000, men hvordan skriver man så en hardware driver til win98/2000 som man så kan kalde ??
Avatar billede tuxen Nybegynder
04. januar 2001 - 09:50 #6
Man kan lægge sig umiddelbart ovenpå de eksisterende drivere og fange deres output før Win XX ser det.
Man skal gå igennem nogle kald med oprindelse i DDK. Driver Development Kit
Mener jeg har noget eksempel kode, der beskriver hvordan.
Thue
Avatar billede skovlunde2 Nybegynder
06. januar 2001 - 05:33 #7
Du burde måske kigge på Win32 programmer der eksekvere i Ring 0 (driver lageret). Det er den umiddelbar eneste måde du kan sikre dig adgang til hardware.
Check eventuel SoftIce driver tools kit fra Numega ud for information omkring dette.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester