Révision 227
Ajouté par anmaincent il y a plus de 6 ans
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
piste rouge réussi avec succès (1/10)