Communication RS-232 en C sur Watcom ! - C - Programmation
MarshPosté le 18-07-2006 à 21:28:22
Je pose le problème au cas où ça vous serait déjà arrivé.
Je dois écrire un programme en C sur Watcom afin de lire les données d'un GPS à l'aide du port RS232 sur COM1. Pourquoi Watcom ? Parce mon programme dois fonctionner en dos sans utiliser de composantes win32. Je dois aussi utiliser l'interruption du port série.
Maintenant, j'utilise les fonctions _dos_getvect() et _dos_setvect() pour qu'il effectue mon code lors d'une interruption. En gros, mon code est construit comme ça (comme dans l'exemple de Watcom):
Il faut savoir qu'au début du main, j'initialise ma communication série. Il y a bel et bien une interruption sur le port série, car le bit 0 du IIR est à 0. Mais quand j'utilise _dos_setvect() pour changer le vecteur d'interruption du COM1, il plante sans jamais se rendre dans l'interruption PORT1INT(). Et pas moyen de déboguer le programme, parce que le seul qui existe dans Watcom nous apporte dans l'univers du code assembleur .
Marsh Posté le 18-07-2006 à 21:28:22
Je pose le problème au cas où ça vous serait déjà arrivé.
Je dois écrire un programme en C sur Watcom afin de lire les données d'un GPS à l'aide du port RS232 sur COM1. Pourquoi Watcom ? Parce mon programme dois fonctionner en dos sans utiliser de composantes win32. Je dois aussi utiliser l'interruption du port série.
Maintenant, j'utilise les fonctions _dos_getvect() et _dos_setvect() pour qu'il effectue mon code lors d'une interruption. En gros, mon code est construit comme ça (comme dans l'exemple de Watcom):
#define INTVECT 0x0C
void (__interrupt __far *oldport1isr)(void);
void __interrupt __far PORT1INT(void)
{
...
}
void main(void)
{
...
oldport1isr = _dos_getvect(INTVECT);
_dos_setvect(INTVECT, PORT1INT);
...
}
Il faut savoir qu'au début du main, j'initialise ma communication série. Il y a bel et bien une interruption sur le port série, car le bit 0 du IIR est à 0. Mais quand j'utilise _dos_setvect() pour changer le vecteur d'interruption du COM1, il plante sans jamais se rendre dans l'interruption PORT1INT(). Et pas moyen de déboguer le programme, parce que le seul qui existe dans Watcom nous apporte dans l'univers du code assembleur .
Quelqu'un a une idée pourquoi ?
levrier0003 !!!