Révision 449
Ajouté par nodaoud il y a plus de 6 ans
branch/daoud/Emb_App/SessionM32C_E8a_system.ini | ||
---|---|---|
[Target]
|
||
M32C E8a SYSTEM=Renesas Communications
|
||
[USER_DATA]
|
||
RESET=ff0018
|
||
RESET=ff0046
|
branch/daoud/Emb_App/programme_principal_etud.c | ||
---|---|---|
// 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 alpha,capteur_num,n_piste,att,message_capt;
|
||
int consigne_angle=450;
|
||
int temps,feu;
|
||
short vitesse,distance,capteur;
|
||
CanFrame vite;
|
||
CanFrame vite,com,demande_capteur;
|
||
UINT flag_de_piste,flag_de_zone;
|
||
|
||
|
||
|
||
void DEPART(){
|
||
while(1){
|
||
if(feu==0x0001){
|
||
sta_tsk(ID_demarrage);
|
||
}
|
||
dly_tsk(50);
|
||
}
|
||
}
|
||
int decode(char* c){
|
||
int valeur = 0;
|
||
int i=1;
|
||
if(c[0]=='#'){
|
||
while(c[i]!='*'){
|
||
valeur=valeur*10 + (c[i]-48);
|
||
i=i+1;
|
||
}
|
||
return valeur;
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
|
||
short calcul_vitesse(short distance){
|
||
|
||
|
||
|
||
void clavier(){
|
||
short code_touche;
|
||
char sequence[6]=" ";
|
||
int i=0;
|
||
int resultat;
|
||
while(1){
|
||
vrcv_dtq(QdmTouche, &code_touche);
|
||
lcd_putc(code_touche);
|
||
|
||
if(code_touche=='#')i=0;
|
||
|
||
sequence[i] = code_touche;
|
||
i=i+1;
|
||
|
||
if((i>=5)&&(code_touche=='*')){
|
||
resultat=decode(sequence);
|
||
if (( resultat!=0) && ( resultat<=1800))
|
||
consigne_angle= resultat;
|
||
}
|
||
}
|
||
}
|
||
void det_piste()
|
||
{
|
||
FLGPTN flag_de_piste,flag_de_zone;
|
||
ipol_flg(ev_periph, 0x03,TWF_ANDW, &flag_de_zone);
|
||
capteur_num=periph[ADDR('C')].val & 0x00ff;
|
||
clr_flg(ev_periph, 0x04);
|
||
com.data.id = 'C';
|
||
com.data.rtr = 1;
|
||
ipsnd_dtq(CanTx, com.msg);
|
||
|
||
|
||
pol_flg(ev_periph,0x04,TWF_ANDW, &flag_de_piste);
|
||
n_piste=periph[ADDR('M')].val & 0x00ff;
|
||
feu= periph[ADDR('M')].val & 0x8000;
|
||
|
||
clr_flg(ev_periph, 0x03);
|
||
com.data.id = 'M';
|
||
com.data.rtr = 1;
|
||
ipsnd_dtq(CanTx, com.msg);
|
||
|
||
}
|
||
|
||
|
||
|
||
void afficher(){
|
||
|
||
while(1){
|
||
|
||
|
||
|
||
lcd_com (0x80);
|
||
lcd_str("Piste : ");
|
||
switch (n_piste)
|
||
{
|
||
case 1 :lcd_str("Vert");
|
||
break;
|
||
case 2 : lcd_str("Bleu");
|
||
break;
|
||
case 3 :lcd_str("Rouge");
|
||
break;
|
||
case 4 :lcd_str("Noir");
|
||
break;
|
||
default : break;
|
||
}
|
||
lcd_com (0xC0);
|
||
lcd_str("Zone : ");
|
||
switch (capteur_num){
|
||
|
||
case 1 : lcd_str("Vert");
|
||
break;
|
||
case 2 : lcd_str("Jaune");
|
||
break;
|
||
case 3 :lcd_str("Rouge");
|
||
break;
|
||
case 4 :lcd_str("Bleu");
|
||
break;
|
||
case 5 :lcd_str("Cyan");
|
||
break;
|
||
default : break;
|
||
}
|
||
dly_tsk(100);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
short calcul_vitesse(short distance){}
|
||
/*while(1){
|
||
if(distance>=700){
|
||
//vitesse=(-30/400)*distance+((30*11)/4);
|
||
vitesse=50*exp(((distance)-700)/800);
|
||
... | ... | |
return vitesse;
|
||
}
|
||
}
|
||
}
|
||
}*/
|
||
|
||
void asserv0_tourelle(){
|
||
short k=1;
|
||
... | ... | |
//Commande vitesse de la tourelle
|
||
comm.data.id='T';
|
||
comm.data.rtr=0; //indique une ?criture
|
||
comm.data.val=k*(450-alpha);
|
||
comm.data.val=k*(consigne_angle-alpha);
|
||
snd_dtq(CanTx, comm.msg);
|
||
dly_tsk(10);
|
||
|
||
... | ... | |
|
||
|
||
}
|
||
void det_capteur(){
|
||
//lecture du capteur
|
||
CanFrame req;
|
||
UINT flag;
|
||
while(1){
|
||
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);
|
||
capteur=periph[ADDR('C')].val;
|
||
dly_tsk(20);
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
void det_saut(){
|
||
while(1){
|
||
if(capteur==0x7688){
|
||
if(capteur_num==0x0088){
|
||
distance=700;
|
||
alpha=450;
|
||
|
||
... | ... | |
|
||
req.data.id='D';
|
||
req.data.rtr=0;
|
||
if(capteur==0x7688){
|
||
if(capteur_num==0x5611){
|
||
req.data.val=0;
|
||
snd_dtq(CanTx, req.msg);}
|
||
else{
|
||
... | ... | |
}
|
||
void demarrage(){
|
||
|
||
|
||
|
||
dly_tsk(6000);
|
||
//test avec vitesse
|
||
|
||
|
||
while(1){
|
||
vite.data.id='V';
|
||
vite.data.rtr=0;
|
||
if(capteur==0x7688){// debut de saut
|
||
|
||
if(capteur_num==0x5611)
|
||
{
|
||
// debut de saut
|
||
|
||
vite.data.val=45;
|
||
snd_dtq(CanTx, vite.msg);}
|
||
else{
|
||
if(capteur==0x4203){
|
||
vite.data.val=7;
|
||
snd_dtq(CanTx, vite.msg);}
|
||
if(capteur==0x7601){
|
||
vite.data.val=3;
|
||
snd_dtq(CanTx, vite.msg);}
|
||
|
||
|
||
else{
|
||
vite.data.val=45;
|
||
snd_dtq(CanTx, vite.msg);
|
||
}
|
||
else{
|
||
if(capteur_num==0x5612)
|
||
{//apr?s le saut
|
||
vite.data.val=7;
|
||
snd_dtq(CanTx, vite.msg);
|
||
}
|
||
if(capteur_num==0x7613)
|
||
{
|
||
vite.data.val=3;
|
||
snd_dtq(CanTx, vite.msg);
|
||
}
|
||
else{
|
||
vite.data.val=36;
|
||
snd_dtq(CanTx, vite.msg);
|
||
}
|
||
}
|
||
|
||
|
||
|
||
dly_tsk(10);}
|
||
}
|
||
|
||
} }
|
||
|
||
void main()
|
||
{
|
||
... | ... | |
ports_mcu();
|
||
lcd_init();
|
||
periph_init();
|
||
periph_nom("#AutoTest*");
|
||
periph_nom("SPEEDY");
|
||
|
||
can_init();
|
||
clavier_init(1);
|
||
capture_init();
|
||
|
||
|
||
sta_cyc(ID_acqui);
|
||
sta_cyc(ID_acqui);
|
||
sta_cyc(ID_det_piste);
|
||
sta_tsk(ID_periph_rx);
|
||
|
||
|
||
sta_tsk(ID_asserv0_tourelle);
|
||
sta_tsk(ID_demarrage);
|
||
sta_tsk(ID_asserv0_tourelle);
|
||
sta_tsk(ID_demarrage);
|
||
|
||
//sta_tsk(ID_DEPART);
|
||
|
||
sta_tsk(ID_dist);
|
||
sta_tsk( ID_roue_reg);
|
||
sta_tsk (ID_det_capteur);
|
||
sta_tsk( ID_afficher);
|
||
// sta_tsk( ID_clavier);
|
||
sta_tsk (ID_det_saut);
|
||
|
||
|
branch/daoud/Emb_App/conf_noyau.cfg | ||
---|---|---|
exinf = 0x0;
|
||
};
|
||
task[]{
|
||
entry_address = clavier();
|
||
name = ID_clavier;
|
||
stack_size = 256;
|
||
stack_section = stack;
|
||
priority = 4;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
task[]{
|
||
entry_address =afficher();
|
||
name = ID_afficher;
|
||
stack_size = 256;
|
||
stack_section = stack;
|
||
priority = 5;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
task[]{
|
||
entry_address = demarrage();
|
||
name = ID_demarrage;
|
||
stack_size = 512;
|
||
... | ... | |
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
|
||
task[]{
|
||
entry_address = det_capteur();
|
||
name = ID_det_capteur;
|
||
stack_size = 512;
|
||
entry_address = DEPART();
|
||
name = ID_DEPART;
|
||
stack_size = 256;
|
||
stack_section = stack;
|
||
priority = 7;
|
||
priority = 8;
|
||
initial_start = OFF;
|
||
exinf = 0x0;
|
||
};
|
||
|
||
|
||
|
||
flag[]{
|
||
name = ev_bus_fin_tr;
|
||
initial_pattern = 0x0000;
|
||
... | ... | |
interval_counter = 0x64;
|
||
phs_counter = 0x0;
|
||
};
|
||
cyclic_hand[]{
|
||
entry_address = det_piste();
|
||
name = ID_det_piste;
|
||
exinf = 0x0;
|
||
start = OFF;
|
||
phsatr = OFF;
|
||
interval_counter = 0x100;
|
||
phs_counter = 0x0;
|
||
};
|
||
|
||
|
||
vdataqueue[]{
|
||
name = QdmTouche;
|
||
wait_queue = TA_TFIFO;
|
Formats disponibles : Unified diff
ajout des fonction