Projet

Général

Profil

« Précédent | Suivant » 

Révision 390

Ajouté par khmbaye il y a plus de 6 ans

Ajout de la fonction pour déterminer le mode de piste (Numéro piste & Feu)
Ajout de la fonction pour démarrer quand le feu est vert et arreter qd le BP_G est appuyé

Voir les différences:

branch/mbaye/Emb_App/programme_principal_etud.c
int capt;
UINT flag;
int dist;
//UINT flag_C;
int info_piste;
int numero_p;
int feu;
void asserv_T()
{
while(1)
......
// dly_tsk(100);
comm.data.id='T'; comm.data.rtr=0;
comm.data.val=1.0*(585-pos);
comm.data.val=1.0*(450-pos);
snd_dtq (CanTx,comm.msg);
dly_tsk(100);
}
......
dis = periph[ADDR('U')].val;
comm.data.id='D'; comm.data.rtr=0;
if(capt==(0x5603))
if(numero_p==0x0002)
{
if(capt==(0x5603))
{
comm.data.val=0;
snd_dtq (CanTx,comm.msg);
if (dis>585)
if (dis>710)
{
dis = 585;
}
dis = 710;
}
else
{
dis = periph[ADDR('U')].val;
comm.data.val=-1.5*(585-dis);
comm.data.val=-1.0*(710-dis);
snd_dtq (CanTx,comm.msg);
}
}
else
{
comm.data.val=-1.0*(710-dis);
snd_dtq (CanTx,comm.msg);
}
}
else
else if(numero_p==0x0003)
{
comm.data.val=-1.5*(585-dis);
if(capt==(0x5601))
{
comm.data.val=0;
snd_dtq (CanTx,comm.msg);
if (dis>1000)
{
dis = 710;
}
else
{
dis = periph[ADDR('U')].val;
comm.data.val=-1.0*(710-dis);
snd_dtq (CanTx,comm.msg);
}
}
else if(capt==(0x5602))
{
comm.data.val=0;
snd_dtq (CanTx,comm.msg);
if (dis>1000)
{
dis = 710;
}
else
{
dis = periph[ADDR('U')].val;
comm.data.val=-1.0*(710-dis);
snd_dtq (CanTx,comm.msg);
}
}
else
{
comm.data.val=-1.0*(710-dis);
snd_dtq (CanTx,comm.msg);
}
}
else if(numero_p==0x0001)
{
comm.data.val=-1.0*(710-dis);
snd_dtq (CanTx,comm.msg);
}
//dly_tsk(100);
dly_tsk(100);
}
}
void vitesse_roue()
{
CanFrame comm;
comm.data.id='V'; comm.data.rtr=0;
if(capt==(0x5603))
while(1)
{
comm.data.val=45;
snd_dtq (CanTx,comm.msg);
CanFrame comm;
comm.data.id='V'; comm.data.rtr=0;
dly_tsk(3000);
if(Bp_G==1)
{
comm.data.val=0;
snd_dtq (CanTx,comm.msg);
}
else if(numero_p==0x0001)
{
if(capt==5603)
{
comm.data.val=30;
snd_dtq (CanTx,comm.msg);
}
else
{
comm.data.val=10;
snd_dtq (CanTx,comm.msg);
}
}
else if(numero_p==0x0002)
{
if(capt==5603)
{
comm.data.val=30;
snd_dtq (CanTx,comm.msg);
}
else
{
comm.data.val=10;
snd_dtq (CanTx,comm.msg);
}
}
else if(numero_p==0x0003)
{
if(capt==5603)
{
comm.data.val=60;
snd_dtq (CanTx,comm.msg);
}
else
{
comm.data.val=10;
snd_dtq (CanTx,comm.msg);
}
}
dly_tsk(100);
}
else
{
dly_tsk(3000);
comm.data.val=10;
snd_dtq (CanTx,comm.msg);
}
//dly_tsk(100);
}
void info_capt()
{
......
dly_tsk(100);
}
}
void mode_course()
{
while(1)
{
CanFrame req;
req.data.id='M'; req.data.rtr=1;
periph[ADDR('M')].ev= 0x01;
snd_dtq (CanTx,req.msg);
wai_flg(ev_periph, 0x01, TWF_ANDW, &flag);
info_piste = periph[ADDR('M')].val;
numero_p= info_piste & 0x00FF;
feu= info_piste & 0x8000;
dly_tsk(100);
}
}
void demarrage_feu()
{
while(1)
{
if(feu==0x8000)
{
sta_tsk(ID_vitesse_roue);
}
}
}
void main()
{
ports_mcu();
......
sta_tsk(ID_periph_rx);
sta_tsk(ID_asserv_T);
//sta_tsk(ID_hcy_tourelle);
sta_tsk(ID_dist_T);
sta_tsk(ID_demarrage_feu);
sta_tsk(ID_vitesse_roue);
sta_tsk(ID_info_capt);
sta_tsk(ID_mode_course);
while(1)
branch/mbaye/Emb_App/conf_noyau.cfg
// max definition
maxdefine{
max_task = 7;
max_task = 9;
max_flag = 3;
max_dtq = 2;
max_cyh = 1;
......
name = ID_asserv_T;
stack_size = 512;
stack_section = stack;
priority = 9;
priority = 10;
initial_start = ON;
exinf = 0x0;
};
......
name = ID_dist_T;
stack_size = 512;
stack_section = stack;
priority = 9;
priority = 10;
initial_start = ON;
exinf = 0x0;
};
......
name = ID_vitesse_roue;
stack_size = 512;
stack_section = stack;
priority = 9;
priority = 10;
initial_start = ON;
exinf = 0x0;
};
......
name = ID_info_capt;
stack_size = 512;
stack_section = stack;
priority = 9;
priority = 10;
initial_start = ON;
exinf = 0x0;
};
task[]{
entry_address = mode_course();
name = ID_mode_course;
stack_size = 512;
stack_section = stack;
priority = 10;
initial_start = ON;
exinf = 0x0;
};
task[]{
entry_address = demarrage_feu();
name = ID_demarrage_feu;
stack_size = 512;
stack_section = stack;
priority = 8;
initial_start = ON;
exinf = 0x0;
};
task[]{
entry_address = periph_tx();
name = ID_periph_tx;
stack_size = 256;

Formats disponibles : Unified diff