// Les données télémesure sont formées de blocks de type block_tm // la table de transfert de ces blocks est la structure table_tm // la longueur de table telemesure est longueur_table_tm //#define nb_per_block*2 24 // nombre de demi periodes dans un block télémesure //#define longueur_table_tm 20 // nb de blocks dans la table pour transmettre les télémesures //#define longueur_table_tc 100 // nb de datas dans la table de télécommandes //longueur definies dans choix_param // ----- pour detection synchrone typedef struct { int ii[nb_max_bolo]; // compteur position dans la periode short dstable[nb_max_mes_per]; // table les différents ds short dsnorme; // norme des detections synchrones long sommeA[nb_max_bolo]; long sommeB[nb_max_bolo]; } detec_sync; typedef struct // block telemesure pour dialogue avec les interruptions { unsigned long temps_cntl[nb_per_block*2]; // temps du controlleur en µsec unsigned long temps_mac[nb_per_block*2]; // temps du mac en sec reglage_bolo reglage; // parametr de reglage des bolos int chauf_regul; short flag_bolo[nb_max_bolo]; // flag de lecture detail de la forme de modulation short bol_per[nb_max_bolo][nb_max_mes_per]; // table une periode detail de la forme de modulation F_donne don[nb_per_block*2]; // donnees bolo et synchro pour "nb_per_block*2" periodes //***************************************************************************************** #ifdef _archeops //--------- pour Archeops ------------------------------ *** //***************************************************************************************** block_type_modele tmtrx; //***************************************************************************************** #endif //-------------------------------------------------------------------- *** //***************************************************************************************** } block_tm; typedef struct // block telecommande pour dialogue avec les interruptions { char mot[10]; // 10 mots de commande } block_tc; typedef struct // table courante telemesure pour dialogue avec les interruptions { int pos_ecrit; // position dans la table int pos_lit; block_tm btm[longueur_table_tm]; // longueur_table_tm blocks de telemesure } table_tm; typedef struct // table courante telemesure pour dialogue avec les interruptions { int pos_ecrit; // position dans la table int pos_lit; block_tc btc[longueur_table_tc]; // longueur_table_tc blocks de telecommande } table_tc; typedef struct // parametres de regul dans les interruptions { regul_p_i_d pid; long valeur; long anc_ecart; int compteur; double tint; int cc; // int per_raz; // nombre de periode entre 2 raz (zero tension sur la modulation) // int nb_raz; // nombre de periode courant } param_regul; //***************************************************************************************** // *** #ifdef _archeops //--------- pour Archeops ------------------------------ *** // *** //***************************************************************************************** typedef struct // variables internes du programme d'interruption pour Archeops { unsigned long temps_cntl; // temps courant du controlleur en unite de 4.8 µsec ??? en demi periodes int a; // compteur pour check debut et fin de block int b; // compteur de mot 32 bit dans un block int c; // compteur de bytes dans un mot 32 bit block_type_modele btt; // le plus gros des blocs telemesure transputer dans arc_com.h //***************************************************************************************** #ifdef _sans_transputer //--------- pour Archeops avec ctb ------------- *** char bkb[nb_per_block*nb_max_mes_per*5]; // le block brut venant des bebo #endif //-------------------------------------------------------------------- *** //***************************************************************************************** } var_internes; //***************************************************************************************** // *** #else //--------- pour Diabolo ------------------------------ *** // *** //***************************************************************************************** typedef struct // variables internes du programme d'interruption pour diabolo { int aa; // pour deux lectures fifo par point int a; // compteur bit dans un mot int i; // compteur position générale dans la periode long debut_per; // flag debut de periode int numbol; // le numero de bolo en cours de lecture par la bebo long mot[nb_max_bolo]; // mot pour lecture de chaque voie ADC (phase en bit 12) long motsauve[nb_max_bolo][nb_max_mes_per]; // mot pour sauve mot precedent char synchro[nb_sync]; // pour calcul interne des synchro avant de les envoyer int flag_ecriture_data; // flag pour ecrire les data sur le bus PCI int pos_block_tm; // position pour ecriture des données dans un block tm unsigned long temps_cntl; // temps courant du controlleur en µsec ou demi-periodes param_regul reg; // ------ parametres de la regulation } var_internes; //***************************************************************************************** // *** #endif //-------------------------------------------------------------------- *** // *** //***************************************************************************************** //---------------------- structure complete tm + tc + interne tache typedef struct // global connu de la tache et du prog principal { int PCI_actif; // le PCI est actif table_tm tm; // table de telemesure table_tc tc; // table de télécommande table_erreur te; // table courante pour gestion des erreurs de bus PCI int nb_lec_fofo_int; // nombre maxi de lectures dans la fifo en un coups d'interrupt int val_con_fifo; int val_con_donnee; int val_con_pile; int val_con_erreur; int signal_scan_immediat; // signal scan immediat pour savoir avant param_bolo param; // liste bolo dans le programme d'interruption reglage_bolo reglage; // etat bolo dans le programme interruption detec_sync ds; // registres pour detection synchrone numerique // ----- communication directe avec le prog de lecture_fifo en interruption var_internes vi; // variables internes du programme d'interruption } tmtc; extern tmtc *tt;