Projet

Général

Profil

« Précédent | Suivant » 

Révision 366

Ajouté par maporte3 il y a plus de 6 ans

Ajout d'un handler cyclic qui permet l'arrêt d'urgence du véhicule lorsque la touche gauche est appuyé

Voir les différences:

branch/porte/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff003e
RESET=ff0042
branch/porte/Emb_App/programme_principal_etud.c
//Variable de la fonction IHM
short Touche_clavier;
//Variable de la fonction Circuit
unsigned int Info_circuit, Etat_feu, Num_circuit;
unsigned int Info_circuit, Etat_feu, Num_circuit, Depart_ok=0, Arret_urgence=0;
//Variable de la fonction Evenement
unsigned int Lecture_eve;
FLGPTN test;
......
comm.data.id='V'; //Commande de la vitesse des roues motrices
comm.data.rtr=0;
if(Info_capteur == 0x560){ // Commande de vitesse pour les lignes droites (dernier capteur detecte = vert).
comm.data.val=Vitesse;
snd_dtq (CanTx,comm.msg); // Envoi de la commande de vitesse
if(Depart_ok == 1 && Arret_urgence == 0){
if(Info_capteur == 0x560){ // Commande de vitesse pour les lignes droites (dernier capteur detecte = vert).
comm.data.val=Vitesse;
snd_dtq (CanTx,comm.msg); // Envoi de la commande de vitesse
}
else if(Info_capteur == 0x630 && Saut == 0){ //Accel?ration pour passer le saut
comm.data.val=Vitesse*1.66;
snd_dtq (CanTx,comm.msg);
Saut=1;
}
else if(Info_capteur == 0x630 && Saut == 1){ //Ralentissement pour la reception du saut
comm.data.val=Vitesse/2.3;
snd_dtq (CanTx,comm.msg);
// Saut=0;
}
else{ // Ralentissement en cas de virage et de d?tection de trou ou d'obstacle.
comm.data.val=Vitesse/1.55;
snd_dtq (CanTx,comm.msg);
}
}
else if(Info_capteur == 0x630 ){ //Accel?ration pour passer le saut
comm.data.val=Vitesse*1.66;
else{
comm.data.val=0;
snd_dtq (CanTx,comm.msg);
Saut=1;
}
else if(Info_capteur == 0x630 && Saut == 1){ //Ralentissement pour la reception du saut
comm.data.val=Vitesse/2.3;
snd_dtq (CanTx,comm.msg);
Saut=0;
}
else{ // Ralentissement en cas de virage et de d?tection de trou ou d'obstacle.
comm.data.val=Vitesse/1.55;
snd_dtq (CanTx,comm.msg);
}
//lcd_str(char &Vitesse)
dly_tsk(10);
}
dly_tsk(10);
}
}
void Capteur(){
......
void Commande_IHM(){
// Interface Homme Machine muni du clavier matricielle, de l'?cran LCD,
// des LEDs, des potentiometre et des interrupteurs.
while(1){
vrcv_dtq(QdmTouche, &Touche_clavier);
if(Touche_clavier != 0){
......
Touche_clavier=0;
dly_tsk(100);
}
dly_tsk(100);
}
dly_tsk(100);
}
}
void Bp_hc(){
if(Bp_G == 1){ Arret_urgence = 1;}
if(Bp_G == 0){ Arret_urgence = 0;}
}
void Circuit(){
//'M'/77/0x7D?: Mode de course :
......
snd_dtq (CanTx,demande.msg); // Interrogation du peripherique sur les information du circuit.
Info_circuit=periph[ADDR('M')].val;
Num_circuit=Info_circuit & 0x000F;
Etat_feu=Info_circuit >> 15; // contient la valeur de retour du simulateur sur l'?tat du feu.
Etat_feu=Info_circuit >> 15; // contient la valeur de retour du simulateur sur l'?tat du feu tricolore.
if( Etat_feu == 1){ Depart_ok = 1;} // Passe la variable permettant le d?part ? 1.
dly_tsk(200);
}
......
wai_flg(event,(FLGPTN) 0x0800, TWF_ANDW,&test);
dly_tsk(200);
dly_tsk(800);
}
}
......
sta_tsk(ID_Distance_bord);
sta_tsk(ID_Commande_IHM);
sta_cyc(ID_Bp_hc);
sta_tsk(ID_Circuit);
branch/porte/Emb_App/conf_noyau.cfg
phs_counter = 0x0;
};
cyclic_hand[]{
entry_address = Bp_hc();
name = ID_Bp_hc;
exinf = 0x0;
start = OFF;
phsatr = OFF;
interval_counter = 0x64;
phs_counter = 0x0;
};
vdataqueue[]{
name = QdmTouche;
wait_queue = TA_TFIFO;

Formats disponibles : Unified diff