Projet

Général

Profil

« Précédent | Suivant » 

Révision 449

Ajouté par nodaoud il y a plus de 6 ans

ajout des fonction

Voir les différences:

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