Projet

Général

Profil

« Précédent | Suivant » 

Révision 227

Ajouté par anmaincent il y a plus de 6 ans

piste rouge réussi avec succès (1/10)

Voir les différences:

branch/maincent/tp_info6/Emb_App.tws
"E:\info6_maincent\tp_info6\Emb_App\programme_principal_etud.c"
[WORKSPACE_FILE_STATES]
"E:\info6_maincent\tp_info6\Emb_App\conf_noyau.cfg" 75 75 1428 347 0 3
"E:\info6_maincent\tp_info6\Emb_App\crt0mr.a30" -8 -30 956 523 1 1
"E:\info6_maincent\tp_info6\Emb_App\programme_principal_etud.c" 0 0 1594 535 0 0
"E:\info6_maincent\tp_info6\Emb_App\crt0mr.a30" 0 0 956 523 0 1
"E:\info6_maincent\tp_info6\Emb_App\programme_principal_etud.c" -8 -30 956 523 1 0
"E:\info6_maincent\tp_info6\bsp\radiocommande.c" 50 50 1430 351 0 2
"E:\info6_maincent\tp_info6\bsp\uart0.c" 100 100 1356 347 0 4
[LOADED_PROJECTS]
branch/maincent/tp_info6/Emb_App/programme_principal_etud.c
// correspondant au nom du v?hicule si le nom se termine par '*'
short alpha;
short distance;
short angleR;
void tourelle(){
while(1)
{
......
req.data.rtr=1;
periph[ADDR('R')].ev=0x01;
snd_dtq(CanTx, req.msg);
//Attente de la r?ponse
//Attente de la reponse
wai_flg (ev_periph, 0x01, TWF_ANDW, &flag);
alpha=periph[ADDR('R')].val;
//Commande vitesse de la tourelle
//Commande vitesse de la tourelle
comm.data.id='T';
comm.data.rtr=0; //indique une ?criture
comm.data.val=k*(450-alpha);
......
dly_tsk(50);
}
}
short capteur;
void zone(){
while(1)
{
//lecture de la zone
CanFrame requ;
UINT flag;
requ.data.id='C'; //lecture des evenements
requ.data.rtr=1; //indique une lecture
periph[ADDR('C')].ev=0x03;
snd_dtq(CanTx, requ.msg);
//Attente de la reponse
wai_flg (ev_periph, 0x03, TWF_ANDW, &flag);
capteur=periph[ADDR('C')].val;
dly_tsk(15);
}
}
short distance;
short distance1;
void dist(){
while(1)
{
......
UINT flag;
req.data.id='U';
req.data.rtr=1;
req.data.rtr=1; //indique une lecture
periph[ADDR('U')].ev=0x02;
snd_dtq(CanTx, req.msg);
//Attente de la r?ponse
//Attente de la reponse
wai_flg (ev_periph, 0x02, TWF_ANDW, &flag);
distance=periph[ADDR('U')].val;
dly_tsk(2);
dly_tsk(20);
}
}
void roue(){
while(1)
{
short s=2; //Gain du correcteur P
short s=1.5; //Gain du correcteur P
CanFrame req,comm;
UINT flag;
//Commande de l'angle de roue
comm.data.id='D';
comm.data.rtr=0; //indique une ?criture
if (distance > 5000)
comm.data.id='D'; //commande angle roue
comm.data.rtr=0; //indique une ecriture
if (distance > 2000 || capteur == 0x5603)
{
comm.data.val=0;
// si trou dans la barriere ou zonesaut
}
else
{
comm.data.val=s*(distance-706);
distance1=distance; //cas normal: si on est au milieu de la piste angle des roues ? 0
}
snd_dtq(CanTx, comm.msg);
dly_tsk(2);
comm.data.val=s*(distance1-706);
snd_dtq(CanTx, comm.msg);
}
}
void vitesse(){
dly_tsk(5000);
while(1)
{
CanFrame requete;
dly_tsk(5000);
UINT flag;
//commande vitesse vehicule
requete.data.id='V';
requete.data.rtr=0;
requete.data.val=20;
requete.data.rtr=0; //indique une ecriture
if (capteur == 0x5602 || capteur == 0x5603 || capteur == 0x5601 )
{
requete.data.val=45; // si trou dans la barriere ou zonesaut
}
else
{
requete.data.val=15; //cas normal: si on n'est pas dans la zone de saut
}
// requete.data.val=25; //vitesse constante
/* vitesse variable
if (distance > 706)
{
requete.data.val=140-0.05*distance; // a fond si vehicule au milieu sinon ralentit doucement
}
else
{
requete.data.val=0.05*distance; //vitesse max=50=0.07*706
}
*/
snd_dtq(CanTx, requete.msg);
// dly_tsk(2);
}
}
void main()
{
CanFrame requete, reponse,comm;
......
sta_tsk(ID_periph_rx);
sta_tsk(ID_tourelle);
sta_tsk(ID_dist);
sta_tsk(ID_roue);
sta_tsk(ID_zone);
sta_tsk(ID_vitesse);
sta_tsk(ID_tourelle);
sta_tsk(ID_dist);
sta_tsk(ID_roue);
while(1)
{
dly_tsk(800);
}
}
void acqui()
branch/maincent/tp_info6/Emb_App/conf_noyau.cfg
};
task[]{
entry_address = zone();
name = ID_zone;
stack_size = 512;
stack_section = stack;
priority = 6;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = vitesse();
name = ID_vitesse;
stack_size = 512;

Formats disponibles : Unified diff