1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
|
////////////////////Programme principal
void Main(....)
{
//Je lance dans plusieurs thread une fontion qui va scruter avec une periodicité mon port COM1, COM2,....
CmtScheduleThread(fctCOM1)
CmtScheduleThread(fctCOM2)
...
}
void fctCOM1()
{
//Avec une periodicité je lance la commande Commande declaré dans la dll
Commande(portcom1, données)
}
void fctCOM2()
{
//Avec une periodicité je lance la commande Commande declaré dans la dll
Commande(portcom2, données)
}
.....
////////////////////DLL de communication
///DLL.h
typedef struct
{
int comport;
int read_write;
int N_codes;
int data_length[USER_MAX_CODES];
SHORTINT codes[USER_MAX_CODES];
SHORTINT N_bytes[USER_MAX_CODES];
BYTE *data_in[USER_MAX_CODES];
BYTE *data_out[USER_MAX_CODES];
int flag_com_busy;
} COMMUNICATION;
///DLL.c
//Variable globale
COMMUNICATION comm
void Command(int comport,int (*callback_function)(int,int))
//Remarque.. je passe en paramétré l'adresse d'une fonction de retour de la dll. c.a.d. que si on a fini on exécute cette fonction ou si il y a eu erreur on passe en paramétré un registre d'erreurs
{
comm.flag_com_busy = BUSY;
copie des datas dans la structure comm (je suis obligé de declares comm en variable globale car fin acknowledge et fin comm ont besoin des informations des cette structure entre autres le flag_com_busy)
allocation de mémoire
acknowledge()
si erreur on execute callback_function
}
void acknowledge()
{
//programmation d'une interruption (CALLBACK) sur le port com pour fin_acknowledge()
//Envoi des codes d'acknolewdge
//si erreur on execute callback_function
}
void CALLBACK fin_acknowledge()
{
//lecture de réponse
debut_com()
//si erreur on execute callback_function
}
void debut_com()
{
//libération mémoire data_in
//programmation d'une interruption sur le port com pour fin_com()
//envoi des codes et datas
//si erreur on execute callback_function
}
void CALLBACK fin_com()
{
//lecture des donnés
//raz des structures et buffers
//libération mémoire data_out
flag_com_busy = READY;
//on execute callback_function avec l'adresse des données de sortie
} |
Partager