Révision 228
Ajouté par jotoribio il y a plus de 6 ans
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
Voiture saute la rampe mais n'arrive plus à gérer les trous après le saut