Révision 288
Ajouté par nacao il y a plus de 6 ans
branch/nan_cao/Emb_App.tws | ||
---|---|---|
[OPEN_WORKSPACE_FILES]
|
||
"E:\nan_cao\Emb_App\conf_noyau.cfg"
|
||
"E:\nan_cao\Emb_App\programme_principal_etud.c"
|
||
"E:\nan_cao\programme_principal_etud (1).c"
|
||
[WORKSPACE_FILE_STATES]
|
||
"E:\nan_cao\Emb_App\conf_noyau.cfg" 26 26 1345 381 0 1
|
||
"E:\nan_cao\Emb_App\programme_principal_etud.c" -8 -31 1543 602 1 0
|
||
"E:\nan_cao\programme_principal_etud (1).c" 78 78 1345 381 0 2
|
||
[LOADED_PROJECTS]
|
||
"EmbM32C87App"
|
||
[END]
|
branch/nan_cao/Emb_App/programme_principal_etud.c | ||
---|---|---|
|
||
|
||
// Peripheriques disponibles:
|
||
//'V'/86/0x56?: Commande en vitesse des roues motrices du vehicule (en radian /secondes).
|
||
//'D'/68/0x44?: Commande de l'angle des roues directrices (en 1/10 de degre).
|
||
//'T'/84/0x54?: Commande en vitesse de la tourelle portant le telemetre (en 1/10 de degre/secondes).
|
||
//'R'/82/0x52?: Lecture de l'angle effectif de la tourelle portant le telemetre (en 1/10 de degre).
|
||
//'U'/85/0x55?: Distance mesuree par le telemetre (1/100 de metre)
|
||
//'N'/78/0x4E?: Numero de la voiture (en fonction de l'ordre de connexion)
|
||
//'E'/69/0x45?: Lecture des evenements,
|
||
//'H'/72/0x48?: Donne le temps de course actuel
|
||
//'S'/83/0x53?: Temps du tour precedent
|
||
//'M'/77/0x7D?: Mode de course :
|
||
// Bit 15?: Etat feu tricolore ( 1 -> Vert, 0 -> Orange ou Rouge),
|
||
// Bits 14-8?: 1 Attente, 2 course, 3 essais libres)
|
||
// Bits 7-0?: numero de la piste
|
||
//'C'/67/0x43?: Informations sur le dernier capteur touche :
|
||
// 8 bits de poids faible?: numero du capteur
|
||
// 8 bits de poids fort?: couleur ('C','R','J','B' ou 'V')
|
||
//'V'/86/0x56? Commande en vitesse des roues motrices du vehicule (en radian /secondes).
|
||
//'D'/68/0x44? Commande de l'angle des roues directrices (en 1/10 de degre).
|
||
//'T'/84/0x54? Commande en vitesse de la tourelle portant le telemetre (en 1/10 de degre/secondes).
|
||
//'R'/82/0x52? Lecture de l'angle effectif de la tourelle portant le telemetre (en 1/10 de degre).
|
||
//'U'/85/0x55? Distance mesuree par le telemetre (1/100 de metre)
|
||
//'N'/78/0x4E? Numero de la voiture (en fonction de l'ordre de connexion)
|
||
//'E'/69/0x45? Lecture des evenements,
|
||
//'H'/72/0x48? Donne le temps de course actuel
|
||
//'S'/83/0x53? Temps du tour precedent
|
||
//'M'/77/0x7D? Mode de course :
|
||
// Bit 15? Etat feu tricolore ( 1 -> Vert, 0 -> Orange ou Rouge),
|
||
// Bits 14-8? 1 Attente, 2 course, 3 essais libres)
|
||
// Bits 7-0? numero de la piste
|
||
//'C'/67/0x43? Informations sur le dernier capteur touche :
|
||
// 8 bits de poids faible? numero du capteur
|
||
// 8 bits de poids fort? couleur ('C','R','J','B' ou 'V')
|
||
//'J'/74/0x4A : Proposition d'un code de d?v?rouillage.
|
||
//'j'/106/06A : R?cup?ration du r?sultat de dernier code envoy?. 0x77 si aucun code n'a ?t? soumis. <0 si la r?ponse n'est pas
|
||
//'j'/106/06A : R?cup?ration du r?sultat de dernier code envoy? 0x77 si aucun code n'a ?t?soumis. <0 si la r?ponse n'est pas
|
||
// disponible. 0xab avec a-> nombre de couleurs bien plac?es et b -> couleurs pr?sentes mais mal plac?es.
|
||
//'I'/73/Ox49 : D?finition du nom du v?hicule. Doit d?buter par le caract?re '#' et entraine le chargement de la configuration de piste
|
||
// correspondant au nom du v?hicule si le nom se termine par '*'
|
||
... | ... | |
short alpha;
|
||
short distance;
|
||
short vitesse, longueur;
|
||
int g=1; //gain angle de roue
|
||
int g2=1; //gain vitesse de tourelle
|
||
int g=1; //gain angle de roue
|
||
int g2=1; //gain vitesse de tourelle
|
||
|
||
|
||
|
||
void vit(){
|
||
CanFrame comm;
|
||
while(1)
|
||
{
|
||
comm.data.id='V';
|
||
comm.data.rtr=0;
|
||
comm.data.val=15;
|
||
snd_dtq(CanTx,comm.msg);
|
||
dly_tsk(100);
|
||
// if(distance < 100)
|
||
comm.data.val=15;
|
||
// else comm.data.val = 5;
|
||
snd_dtq(CanTx,comm.msg);
|
||
dly_tsk(500);
|
||
}
|
||
|
||
|
||
}
|
||
void angel_roue(){
|
||
|
||
void ang_tourelle(){
|
||
|
||
CanFrame req,reponse,comm;
|
||
UINT flag;
|
||
while(1)
|
||
{
|
||
req.data.id='U'; //lecture distance de la tourelle
|
||
req.data.id='R'; //lecture angle de la tourelle
|
||
req.data.rtr=1;
|
||
snd_dtq(CanRx, req.msg);
|
||
//Attente de la reponse
|
||
//rcv_dtq(CanRx, &reponse.msg);
|
||
periph[ADDR('U')].ev=0x01;
|
||
// snd_dtq(CanRx, req.msg);
|
||
//Attente de la reponse
|
||
//rcv_dtq(CanRx, &reponse.msg);
|
||
periph[ADDR('R')].ev=0x01;
|
||
snd_dtq(CanTx,req.msg);
|
||
wai_flg(ev_periph, 0x01, TWF_ANDW,&flag);
|
||
distance=periph[ADDR('U')].val;
|
||
|
||
//angle de roue
|
||
comm.data.id='D';
|
||
|
||
alpha=periph[ADDR('R')].val; // contient la valeur de retour du simulateur.
|
||
|
||
comm.data.id='T'; //Vitesse de la tourelle
|
||
comm.data.rtr=0;
|
||
comm.data.val=-g(450-distance);
|
||
comm.data.val=g2*(450-alpha);
|
||
snd_dtq(CanTx,comm.msg);
|
||
dly_tsk(100);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
void ang_tourelle(){
|
||
void ang_roue(){
|
||
|
||
CanFrame req,reponse,comm;
|
||
UINT flag;
|
||
while(1)
|
||
{
|
||
req.data.id='R'; //lecture angle de la tourelle
|
||
req.data.id='U'; //distance mesueree par la tourelle
|
||
req.data.rtr=1;
|
||
snd_dtq(CanRx, req.msg);
|
||
//Attente de la reponse
|
||
//rcv_dtq(CanRx, &reponse.msg);
|
||
periph[ADDR('R')].ev=0x02;
|
||
// snd_dtq(CanRx, req.msg);
|
||
//Attente de la reponse
|
||
//rcv_dtq(CanRx, &reponse.msg);
|
||
periph[ADDR('U')].ev=0x02;
|
||
snd_dtq(CanTx,req.msg);
|
||
wai_flg(ev_periph, 0x02, TWF_ANDW,&flag);
|
||
alpha=periph[ADDR('R')].val;
|
||
|
||
//Vitesse de la tourelle
|
||
comm.data.id='T';
|
||
|
||
distance=periph[ADDR('U')].val; // contient la valeur de retour du simulateur.
|
||
|
||
comm.data.id='D'; //angle de roue
|
||
comm.data.rtr=0;
|
||
comm.data.val=g2(450-alpha);
|
||
comm.data.val=-g*(450-distance);
|
||
snd_dtq(CanTx,comm.msg);
|
||
dly_tsk(100);
|
||
dly_tsk(200);
|
||
}
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
void main()
|
||
{
|
||
CanFrame comm;
|
||
... | ... | |
clavier_init(1);
|
||
capture_init();
|
||
|
||
sta_tsk(ID_angle_roue);
|
||
sta_tsk(ID_ang_roue);
|
||
sta_tsk(ID_ang_tourelle);
|
||
sta_tsk(ID_vitesse);
|
||
sta_cyc(ID_acqui);
|
branch/nan_cao/Emb_App/conf_noyau.cfg | ||
---|---|---|
exinf = 0x0;
|
||
};
|
||
task[]{
|
||
entry_address = angle_roue();
|
||
name = ID_angle_roue;
|
||
entry_address = ang_roue();
|
||
name = ID_ang_roue;
|
||
stack_size = 512;
|
||
stack_section = stack;
|
||
priority = 1;
|
Formats disponibles : Unified diff