Projet

Général

Profil

« Précédent | Suivant » 

Révision 228

Ajouté par jotoribio il y a plus de 6 ans

Voiture saute la rampe mais n'arrive plus à gérer les trous après le saut

Voir les différences:

branch/toribio/Emb_App/SessionM32C_E8a_system.ini
[Target]
M32C E8a SYSTEM=Renesas Communications
[USER_DATA]
RESET=ff0016
RESET=ff001e
branch/toribio/Emb_App/programme_principal_etud.c
short alpha;
short distance;
short angleR;
short vitesse;
/*short vitesse;*/
short virage=0;
short numcapt=0;
short sauter=0;
short trouV=0;
void asserv0(){
while(1){
short k=1; //Gain du correcteur P
......
}
void dist(){while(1){
void dist(){
while(1){
//lecture de la distance du mur
CanFrame req;
UINT flag;
......
}
void roue(){while(1){
void roue(){
while(1){
short k=2; //Gain du correcteur P
//lecture de la position de la roue
CanFrame req,comm;
UINT flag;
/*
req.data.id='D';
req.data.rtr=1;
periph[ADDR('D')].ev=0x01;
snd_dtq(CanTx, req.msg);
//Attente de la r?ponse
wai_flg (ev_periph, 0x01, TWF_ANDW, &flag);
angleR=periph[ADDR('D')].val;
*/
if (sauter==0){
//Commande de l'angle de roue
comm.data.id='D';
comm.data.rtr=0; //indique une ?criture
if (distance<1000){
comm.data.val=k*(distance-700);}
if (distance>1000);
else comm.data.val=k*(distance-700);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if (sauter==2){
//Commande de l'angle de roue
comm.data.id='D';
comm.data.rtr=0; //indique une ?criture
if (distance>1000);
else comm.data.val=k*(distance-610);//on tourne un peu plus pour le saut
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
void demare(){
else if (sauter==3 ){
//Commande de l'angle de roue
comm.data.id='D';
comm.data.rtr=0; //indique une ?criture
if (distance>1000);
else comm.data.val=k*(distance-700);
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}
else if (sauter==1 ){
//Commande de l'angle de roue
comm.data.id='D';
comm.data.rtr=0; //indique une ?criture
if (distance>1000);
else comm.data.val=0;
snd_dtq(CanTx, comm.msg);
dly_tsk(5);
}}
}
void regvitesse(){
CanFrame requete;
dly_tsk(6000);
requete.data.id='V';
requete.data.rtr=0;
requete.data.val=35;
snd_dtq(CanTx, requete.msg);
dly_tsk(5);
dly_tsk(5000);
/* while(1)
while(1)
{requete.data.id='V';
requete.data.rtr=0;
requete.data.val=35;
requete.data.rtr=0;
if (sauter==1){ //augmentation de la vitesse pour sauter
requete.data.val=45;}
else if (sauter==2){ //diminution vitesse pour preparer saut
requete.data.val=25;}
else if (sauter==3){ //diminution vitesse pour apr?s saut
requete.data.val=15;}
else if (sauter==0){requete.data.val=35;} //pas de saut
snd_dtq(CanTx, requete.msg);
dly_tsk(5);}
*/
}
void zone(){
while(1){
//lecture de la zone
CanFrame req;
UINT flag;
req.data.id='C';
req.data.rtr=1;
periph[ADDR('C')].ev=0x03;
snd_dtq(CanTx, req.msg);
//Attente de la r?ponse
wai_flg (ev_periph, 0x03, TWF_ANDW, &flag);
virage=periph[ADDR('C')].val;
numcapt=virage & 0x00ff;
virage=virage & 0xff00;
dly_tsk(5);}
}
void saut(){
while(1){
if (numcapt==2 && virage==20992){
sauter=2; //pr?paration au saut
}
else if (numcapt==3 && virage!=16896)
{ sauter=1; //Renvoie 1 si c'est la zone du saut
}
else if (numcapt==3 && virage==16896){
sauter=3;} // virage apres saut
else if (numcapt==4 && virage==22016){
sauter=0;} // retour ? la regulation normal
dly_tsk(5);}
}
void main()
{
......
sta_cyc(ID_acqui);
sta_tsk(ID_periph_rx);
sta_tsk(ID_demare);
sta_tsk(ID_regvitesse);
sta_tsk(ID_asserv0);
sta_tsk(ID_dist);
sta_tsk(ID_roue);
sta_tsk(ID_zone);
sta_tsk(ID_saut);
while(1)
{
branch/toribio/Emb_App/conf_noyau.cfg
name = ID_asserv0;
stack_size = 512;
stack_section = stack;
priority = 5;
priority = 6;
initial_start = OFF;
exinf = 0x0;
......
};
task[]{
entry_address = zone();
name = ID_zone;
stack_size = 512;
stack_section = stack;
priority = 6;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = roue();
name = ID_roue;
stack_size = 512;
stack_section = stack;
priority = 7;
priority = 6;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = demare();
name = ID_demare;
entry_address = regvitesse();
name = ID_regvitesse;
stack_size = 512;
stack_section = stack;
priority = 7;
priority = 6;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = saut();
name = ID_saut;
stack_size = 512;
stack_section = stack;
priority = 6;
initial_start = OFF;
exinf = 0x0;
};
task[]{
entry_address = periph_tx();
name = ID_periph_tx;

Formats disponibles : Unified diff