Projet

Général

Profil

« Précédent | Suivant » 

Révision 221

Ajouté par axfont il y a plus de 6 ans

implémentation des tâches lecture capteur et lecture piste plus test validés

Voir les différences:

branch/font/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0020
RESET=ff0022
branch/font/Emb_App/programme_principal_etud.c
//'I'/73/Ox49 : D?finition du nom du v?hicule. Doit d?buter par le caract?re '#' et entraine le chargement de la configuration de piste
// correspondant au nom du v?hicule si le nom se termine par '*'
int alpha;
int distance;
const int distance_bord = 700; //distance du bord souhait?e
const int angle_tourelle = 450; //angle tourelle souhait?
int alpha; //angle tourelle
int distance; //distance du bord mesur?e
int distance1;
int vitesse = 72;
int virage = 25;
int angle = 500;
int vitesse = 65; //vitesse souhait?e
int vitesse_virage = 25; //vitesse pendant un virage souhait?e
int angle_roue;
int kroue = 1;
int k = 1;
int couleur_capt;
int num_piste;
int num_piste1;
int capteur;
int couleur_capteur;
void lecture_telemetre(){
CanFrame reponsed, requeted;
......
}
}
//Asservissement des roues permettant de placer la voiture ou on souhaite sur la piste
void asservissement_roue(){
CanFrame comm, requete;
UINT flag;
......
comm.data.rtr = 1;
periph[ADDR('D')].ev = 0x03;
snd_dtq(CanTx, requete.msg);
wai_flg(ev_periph, 0x03, TWF_ANDW, &flag); //Attente de lecture
wai_flg(ev_periph, 0x03, TWF_ANDW, &flag); //Attente de lecture de l'angle des roues
comm.data.rtr = 0;
angle = kroue * (distance - 700);
comm.data.val = angle;
angle_roue = kroue * (distance - distance_bord); //Asservissement de l'angle
comm.data.val = angle_roue;
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
}
// test avec fonction periph
//asservissmen tourelle
void tsk_asserv1(){
UINT flag;
CanFrame comm, reponse, requete, m;
......
while(1){
//Lecture de la position
requete.data.id = 'R';
requete.data.rtr = 1; //requete de lecture
requete.data.rtr = 1;
periph[ADDR('R')].ev = 0x01;
snd_dtq(CanTx, requete.msg);
wai_flg(ev_periph, 0x01, TWF_ANDW, &flag); //Attente de la r?ponse
......
//asservissement en vitesse de rotation de la tourelle
comm.data.id = 'T';
comm.data.rtr = 0;
comm.data.val = k * (450 - alpha);
comm.data.val = k * (angle_tourelle - alpha);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
}
void lecture_piste(){
CanFrame requete;
UINT flag;
requete.data.id = 'M';
requete.data.rtr = 1;
periph[ADDR('M')].ev = 0x04;
snd_dtq(CanTx, requete.msg);
wai_flg(ev_periph, 0x04, TWF_ANDW, &flag); //Attente de la r?ponse
num_piste = periph[ADDR('M')].val; //acquisition num?ro piste
}
void lecture_capteur(){
CanFrame requete;
UINT flag;
while(1){
//Lecture de la zone
requete.data.id = 'C';
requete.data.rtr = 1;
periph[ADDR('C')].ev = 0x05;
snd_dtq(CanTx, requete.msg);
wai_flg(ev_periph, 0x05, TWF_ANDW, &flag); //Attente de la r?ponse
capteur = periph[ADDR('C')].val; //acquisition du dernier capteur franchi
couleur_capteur = capteur >> 8;
dly_tsk(5);
}
}
void gestion_saut (){
}
//Fonction de demarrage de la voiture
void demarrage(){
CanFrame comm, requete;
UINT flag;
dly_tsk(4000);
dly_tsk(4000); //Attente avant d?part
comm.data.id = 'V';
comm.data.rtr = 0;
comm.data.val = vitesse;
comm.data.val = vitesse; //D?marrage
snd_dtq(CanTx, comm.msg);
while(1){
while(1){
comm.data.id = 'V';
comm.data.rtr = 0;
if(angle > 40 || angle < -40){
comm.data.val = virage;
if(angle_roue > 40 || angle_roue < -40){ //ralentissement de la voiture si angle demand? trop grand
comm.data.val = vitesse_virage;
snd_dtq(CanTx, comm.msg);
}
else {
comm.data.val = vitesse;
snd_dtq(CanTx, comm.msg);
}
}
dly_tsk(3);
}
}
......
capture_init();
sta_tsk(ID_periph_rx);
sta_tsk(ID_lecture_piste);
sta_tsk(ID_lecture_capteur);
sta_tsk(ID_demarrage);
sta_cyc(ID_acqui);
sta_tsk(ID_tsk_asserv1);
branch/font/Emb_App/conf_noyau.cfg
};
task[]{
entry_address = gestion_saut();
name = ID_gestion_saut;
stack_size = 512;
stack_section = stack;
priority = 4;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = lecture_piste();
name = ID_lecture_piste;
stack_size = 512;
stack_section = stack;
priority = 4;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = lecture_capteur();
name = ID_lecture_capteur;
stack_size = 512;
stack_section = stack;
priority = 4;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = demarrage();
name = ID_demarrage;
stack_size = 512;

Formats disponibles : Unified diff