Problème bizarre en C

Problème bizarre en C - C++ - Programmation

Marsh Posté le 28-06-2002 à 22:12:34    

J'ai un problème vraiment bizarre en C. J'aimerais savoir si vous avez déjà rencontré une chose semblable.
Je suis en train de programmer ma carte réseau en hard et j'ai ce problème :
Pour récupérer l'adresse MAC de la carte, je fais :
outportb(0x21,ADRESSE+0x00);
outportb(0x49,ADRESSE+0x0E);
outportb(0x02,ADRESSE+0x0D);
outportb(0x0C,ADRESSE+0x0A);
outportb(0x00,ADRESSE+0x0B);
outportb(0x00,ADRESSE+0x08);
outportb(0x00,ADRESSE+0x09);
outportb(0x0A,ADRESSE+0x00);
mac0=inportb(ADRESSE+0x10);
mac1=inportb(ADRESSE+0x10);
mac2=inportb(ADRESSE+0x10);
mac3=inportb(ADRESSE+0x10);
mac4=inportb(ADRESSE+0x10);
mac5=inportb(ADRESSE+0x10);
 
Cela ne fonctionne pas. Je cherche depuis 2 jours et je décide d'écrire la même chose mais en assembleur (in al,dx / out dx,al) et MIRACLE! Cela fonctionne.
Pourquoi est-ce que le programme en C déconne (valeurs aléatoires dans macX) ?
Je precise que j'ai essayé deux compilos (Turbo C++ 3.0 pour DOS et DJGPP 3.1)

Reply

Marsh Posté le 28-06-2002 à 22:12:34   

Reply

Marsh Posté le 29-06-2002 à 11:57:47    

poste le code asm qui marche pour voir.

Reply

Marsh Posté le 29-06-2002 à 12:20:49    

Je viens de m'apercevoir que c'est la portion d'initialisation qui chie en C.
Mais je ne sais toujours pas pourquoi....
 
;-- outportb(0x21,ADRESSE+0x00);  
mov dx,ADRESSE
mov al,21h
out dx,al
;-- outportb(0x49,ADRESSE+0x0E);  
mov dx,ADRESSE
add dx,0Eh
mov al,49h
out dx,al
;-- outportb(0x02,ADRESSE+0x0D);  
dec dx
mov al,02
out dx,al
;-- outportb(0x0C,ADRESSE+0x0A);  
mov dx,ADRESSE
add dx,0Ah
mov al,0Ch
out dx,al
;-- outportb(0x00,ADRESSE+0x0B);  
inc dx
xor al,al
out dx,al
;-- outportb(0x00,ADRESSE+0x08);  
mov dx,ADRESSE
add dx,08h
out dx,al
;-- outportb(0x00,ADRESSE+0x09);  
inc dx
out dx,al
;-- outportb(0x0A,ADRESSE+0x00);  
mov dx,ADRESSE
mov al,0Ah
out dx,al
add dx,10h
;-- mac0=inportb(ADRESSE+0x10);  
in al,dx
mov mac0,al
;-- mac1=inportb(ADRESSE+0x10);  
in al,dx
mov mac1,al
;-- mac2=inportb(ADRESSE+0x10);  
in al,dx
mov mac2,al
;-- mac3=inportb(ADRESSE+0x10);  
in al,dx
mov mac3,al
;-- mac4=inportb(ADRESSE+0x10);  
in al,dx
mov mac4,al
;-- mac5=inportb(ADRESSE+0x10);  
in al,dx
mov mac5,al


Message édité par BMenez le 29-06-2002 à 20:43:23
Reply

Marsh Posté le 30-06-2002 à 00:24:27    

C'est quoi au juste ton ADRESSE ?
L'adresse d'un structure ?
Car si tu definis ta structure, le compilo peut pour optimiser l'acces memoire effectuer des alignements et tout te décaler. J'ai déjà eu ce problème et il faut entourer la déclaration de la structure d'une directive de compilation propre a chaque compilo (#pragma pack(1)), a condition que l'erreur vienne de là biensûr ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 30-06-2002 à 09:36:40    

En fait, il s'agit juste de l'adresse de la carte réseau.
#define ADRESSE 0xB800

Reply

Marsh Posté le 30-06-2002 à 10:50:49    

hep, c'est:
 
outportb(adresse,valeur);

Reply

Marsh Posté le 30-06-2002 à 10:59:59    

OUAH ! Le con !!! Le con !!! Le con !!!  :eek2:  
Merci bjone !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed