Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » Adress Error après compilation de C (10 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
jolivier Ecrit le: Samedi 8 janvier 2005 à 17:50 Déconnecté(e)    Voir le profil de jolivier Envoyer un email à jolivier Visiter le site WEB de jolivier Envoyer un message privé à jolivier  

Bonsoir tout le monde,

Je commence la programmation en C pour ma TI89 Titanium et pour l'instant je teste mes programmes avec Virtual TI, je programme sur TIGCC un petit programme qui devrait être un mini moteur 3D pour afficher les arrêtes d'un cube.
Le problème est que lors de l'éxecution du programme sur l'émulateur une erreur apparait : "Adress Error".
Je ne connais pas exactement les erreurs en ASM mais il semblerait qu'un adressage ait foiré, or je programme en C et le compilateur ne m'a indiqué ni erreurs, ni warnigs, j'ai ouvert comme ça le débugueur de l'émulateur mais je n'ai pas du tout le niveau suffisant pour comprendre le code assembleur de mon programme.
J'aimerais donc savoir d'où vient cette erreur, car c'est le premier programme que je fait avec TIGCC pour ASM68K et je ne connais pas encore les restrictions, les erreurs à éviter, j'ai appliqué des cours de programmation en C++ pour Win32 donc bon....
Pour lancer le programme sur ma TI89 Titanium je le patcherai de toute maniere avec ghostb (merci Kevin Kofler) mais j'ai pas envie de devoir sortir le tournevis quoi...
Donc j'aimerais bien que vous qui avez de l'expérience de programmation pour ASM68K vous me disiez si vous voyez des erreurs dans mon code, ou si vous pensez que ça peut venir de l'émulateur dans ce cas je testerai directement sur ma calculatrice.
Le code en C est :

// C Source File
// Created 07/01/2005; 21:25:07

#define USE_TI89              // Compile for TI-89

#define OPTIMIZE_ROM_CALLS    // Use ROM Call Optimization

#define MIN_AMS 100           // Compile for AMS 1.00 or higher

#define SAVE_SCREEN           // Save/Restore LCD Contents

#include <tigcclib.h>         // Include All Header Files

//VARIABLES GLOBALES :
//parametres
  const int tailleanim=50;
  const int distance=200;
  const float zoom=0.1;
  const int echelle=80;
  const int transfertz=10;
//données :    
int points[8][3];
int lignes[11][1];  

  
// Main Function
void affichage(void){
  //execution
  int i;
  float xA,yA,xB,yB;
  for(i=0;i<=11;i++){
    xA=(points[lignes[i][0]][0]*echelle+tailleanim/2+distance)/zoom*(zoom-points[lignes[i][0]][2]/transfertz)-distance;
    yA=(points[lignes[i][0]][1]*echelle+tailleanim/2+distance)/zoom*(zoom-points[lignes[i][0]][2]/transfertz)-distance;
    xB=(points[lignes[i][1]][0]*echelle+tailleanim/2+distance)/zoom*(zoom-points[lignes[i][1]][2]/transfertz)-distance;
    yB=(points[lignes[i][1]][1]*echelle+tailleanim/2+distance)/zoom*(zoom-points[lignes[i][1]][2]/transfertz)-distance;
    DrawLine(xA,yA,xB,yB,A_NORMAL);
  }
}
void _main(void)
{
  //execution :
  //entrée des données
  //points :
  points[0][0]=points[0][1]=points[0][2]=1;
  points[1][0]=-1;  points[1][1]=points[1][2]=1;
  points[2][0]=points[2][1]=-1;points[2][2]=1;
  points[3][0]=points[3][2]=1;points[3][1]=1;
  
  int i;
  for(i=4;i<=7;i++){
    points[i][0]=points[i-4][0];
    points[i][1]=points[i-4][1];
    points[i][2]=-1;
  }
  //lignes :
  lignes[0][0]=0;lignes[0][1]=1;
  lignes[1][0]=1;lignes[1][1]=2;
  lignes[2][0]=2;lignes[2][1]=3;
  lignes[3][0]=3;lignes[3][1]=0;
  lignes[4][0]=4;lignes[4][1]=5;
  lignes[5][0]=5;lignes[5][1]=6;
  lignes[6][0]=6;lignes[6][1]=7;
  lignes[7][0]=7;lignes[7][1]=4;
  lignes[8][0]=0;lignes[8][1]=4;
  lignes[9][0]=1;lignes[9][1]=5;
  lignes[10][0]=2;lignes[10][1]=6;
  lignes[11][0]=3;lignes[11][1]=7;
  affichage();
}


D'ailleurs je pense que l'erreur pourrait venir du fait que les coordonnées du DrawLine peuvent être en float alors que leur tyoe est int, mais quand j'ai mis un floor() Virtual TI m'a répondu "Illegal Instruction" donc bon...

Merci d'avance :)
    
./Post n°1   Marquer comme non lu.
LionelA Ecrit le: Samedi 8 janvier 2005 à 18:14 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Quelle version de TIGCC tu as ? car les #define USE_TI89 c'est vieux je crois.
Et puis avec la dernière version il me semble que les programmes sont directement compatibles titanium (plus besoin de patcher).

Je vais tester ton programme là, je reposte pour te dire si j'ai trouvé :)
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°2   Marquer comme non lu.
geogeo Ecrit le: Samedi 8 janvier 2005 à 18:19 Déconnecté(e)    Voir le profil de geogeo Envoyer un email à geogeo Visiter le site WEB de geogeo Envoyer un message privé à geogeo  


Pb est ton tableau:
int lignes[11][1];

et donc cette ligne que tu dois enlever.
lignes[11][0]=3;lignes[11][1]=7;
Dépassement de ton tableau et sans doute adresse impaire au final.
Webmaster du site.
Programmeur sur TI68K. Arkanoid, Nebulus, GFA-Basic.

Plus d'informations sur GFA-Basic (un langage Basic pour TI68K).
http://www.tigen.org/gfabasic
    
./Post n°3   Marquer comme non lu.
LionelA Ecrit le: Samedi 8 janvier 2005 à 18:20 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Ton adress_error est due au fait que tu ecrive au delà de la limite du tableau ligne :

lignes[11][0]=3;lignes[11][1]=7;


tu n'a pas le droit au delà de 10 car ton tableau fait 11 cases

edit : bon ben cross comme on dit :)

-Edité le Samedi 8 janvier 2005 à 18:21 par LionelA-
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°4   Marquer comme non lu.
jolivier Ecrit le: Samedi 8 janvier 2005 à 18:31 Déconnecté(e)    Voir le profil de jolivier Envoyer un email à jolivier Visiter le site WEB de jolivier Envoyer un message privé à jolivier  

Ah ok je pensais que ce qu'on mettait quand on déclarait c'était le dernier index ><, merci beaucoup je vais tester :)
Pour ma version de TIGCC c'est la 0.94 SP4, je l'ai téléchargée sur tigen il me semble, je vais cherche des version pour titanium j'étais pas au courant de ces version :).

EDIT : en effet c'est bien ça l'erreur, j'ai du cafouiller parce que j'avais mis les bonnes dimensions pour le 1er tableau, bon maintenant je vais regler les parametres parce que la la ligne en diagonale de l'écran c'est pas top ^^
-Edité le Samedi 8 janvier 2005 à 18:35 par jolivier-
    
./Post n°5   Marquer comme non lu.
LionelA Ecrit le: Samedi 8 janvier 2005 à 18:59 Déconnecté(e)    Voir le profil de LionelA Envoyer un email à LionelA Visiter le site WEB de LionelA Envoyer un message privé à LionelA  


Arrrggh il faut absolument que tu mette ta version de TiGCC à jour !!
http://tigcc.ticalc.org/
Auteur de Mode7 Engine pour ti68k
Auteur de F-ZERO for TI68k
Membre de Orage Studio
Mon site perso : http://www.tigen.org/lionela/
Le gite de mes parents à coté de Narbonne :
http://chaletdenis.free.fr/
    
./Post n°6   Marquer comme non lu.
Folco Ecrit le: Dimanche 9 janvier 2005 à 00:09 Déconnecté(e)    Voir le profil de Folco Envoyer un email à Folco Envoyer un message privé à Folco  


Tune pourras jamais faire tourner quelquechose correctement sur titanium avec cette version de tigcc.
<<< Kernel Extremist©®™ >>>
Pas la peine d'aller là plus d'une fois tous les six mois...

"Il faut apprendre pour savoir qu'il faut apprendre pour savoir."
    
./Post n°7   Marquer comme non lu.
Kevin Kofler Ecrit le: Dimanche 9 janvier 2005 à 03:07 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Tu débordes de tes tableaux!
Un tableau de taille n (tableau[n]) va de 0 à n-1!
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°8   Marquer comme non lu.
limmt Ecrit le: Dimanche 9 janvier 2005 à 08:41 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


Tu ne devrais pas utiliser de floats pour xa,ya...utilise plutot des ints ca sera en plus arrondi automatiquement et ca sera beaucoiup beaucoup plus rapide ;)
Et tu devrais remplacer le /2 (division lente) par >>1 (décalage d'un bit à droite, beaucoup plus rapide) ;)
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
./Post n°9   Marquer comme non lu.
jolivier Ecrit le: Lundi 10 janvier 2005 à 21:12 Déconnecté(e)    Voir le profil de jolivier Envoyer un email à jolivier Visiter le site WEB de jolivier Envoyer un message privé à jolivier  

Ok merci beaucoup pour ces conseils d'optimisation, j'ai déclaré les coordonnées des points en 2D en int, par contre pour les coordonnées 3D j'ai multiplié par 30, enlevé la multiplication par échelle et passé le type en int, sa à l'air plus fluide.
(Faut dire qu'avant ce code était fait pour flash MX en actionscript yavait pas trop besoin d'optimiser c'était fluide, mais là 12Mhz au lieu de 1.7Ghz ça devient critique #langue#

Si vous avez d'autres idées pour optimiser en voyant l'horreur qu'est un code de quelqu'un qui n'a aucune expérience ^^ ça serait sympa de me les donner, pour que je travaille ça.
Sinon ça fait plaisir sur ce forum ce sont des personnes qui ont de l'experience dans des sujets vraiments pas évidents (ASM, moteurs 3D...), qui font beaucoup de choses pour les autres qui répondent.[tournure tordue, retrouvez l'antécédant de "qui" au début de la phrase].
D'ailleurs quand je vois le moteur 3D fat je vois qu'il y a encore pas mal de boulot pour en arriver à ça....ça tombe bien j'en aurai encore au moins 6 ans avec cette calculatrice ^^
// C Source File
// Created 07/01/2005; 21:25:07
#define USE_TI89              // Compile for TI-89
#define OPTIMIZE_ROM_CALLS    // Use ROM Call Optimization
#define MIN_AMS 100           // Compile for AMS 1.00 or higher
#define SAVE_SCREEN           // Save/Restore LCD Contents
#include <tigcclib.h>         // Include All Header Files
#include <stdlib.h>

//VARIABLES GLOBALES :
//parametres
  const int taillex=160;
  const int tailley=100;
  const int distance=10;
  const int zm=100;
  //const int echelle=30; inutile car coordonnées multipliées dès le début par 30 et passées en int
  const int transfertz=10;
//données :    
float points[8][3]; //tableau contenant les coordonnées en 3D des 8 points du cube
int pointst[8][2]; //tableau contenant les coordonnées en 2D calculées à partir de points des 8 points du cube
int lignes[12][2]; //les 12 arretes du cube comportent chacun l'id du point de depart et celui d'arrivée
  
// Main Function
//fonctions de rotation :

void mul_matrices(float b[3][3],int i){
  float a[3]={points[i][0],points[i][1],points[i][2]};
  points[i][0]=b[0][0]*a[0]+b[0][1]*a[1]+b[0][2]*a[2];
  points[i][1]=b[1][0]*a[0]+b[1][1]*a[1]+b[1][2]*a[2];
  points[i][2]=b[2][0]*a[0]+b[2][1]*a[1]+b[2][2]*a[2];
}

void rotationx(float angle) {
  float matrice_rotation[3][3]={{1,0,0},{0,cos(angle),-sin(angle)},{0,sin(angle),cos(angle)}};
  int i;                  
  for(i=0;i<=7;i++) {
    mul_matrices(matrice_rotation,i);
  }                  
}
void rotationy(float angle) {
  float matrice_rotation[3][3]={{cos(angle),0,sin(angle)},{0,1,0},{-sin(angle),0,cos(angle)}};
  int i;                  
  for(i=0;i<=7;i++) {
    mul_matrices(matrice_rotation,i);
  }                  
}
void rotationz(float angle) {
  float matrice_rotation[3][3]={{cos(angle),-sin(angle),0},{sin(angle),cos(angle),0},{0,0,1}};
  int i;                  
  for(i=0;i<=7;i++) {
    mul_matrices(matrice_rotation,i);
  }                  
}

//sortie visuelle :
void affichage(void){
  //execution
  clrscr();
  int i;
  for(i=0;i<=7;i++){
    //on passe les coordonnées en 3D en coordonnées en 2D pour êtres tracées
    pointst[i][0]=(points[lignes[i][0]][0]+(taillex>>1)+distance)/zm*(zm-points[lignes[i][0]][2]/transfertz)-distance;//[0] contient la coordonnée x [2] contient la porfondeur z
    pointst[i][1]=(points[lignes[i][0]][1]+(tailley>>1)+distance)/zm*(zm-points[lignes[i][0]][2]/transfertz)-distance;//[1] contient la coordonnée y
  }
  for(i=0;i<=11;i++){
    //pour chaque ligne on récupere le point de départ et d'arrivée, et on récupere les coordonnées de chaque point
    DrawLine(pointst[lignes[i][0]][0],pointst[lignes[i][0]][1],pointst[lignes[i][1]][0],pointst[lignes[i][1]][1],A_NORMAL);
    }
}
void _main(void)
{
  //execution :
    //entrée des données
      //points :
  points[0][0]=points[0][1]=points[0][2]=30;
  points[1][0]=-30;  points[1][1]=points[1][2]=30;
  points[3][0]=points[3][2]=30;points[3][1]=-30;
  points[2][0]=points[2][1]=-30;points[2][2]=30;
  
  int i;
  for(i=4;i<=7;i++){
    points[i][0]=points[i-4][0];
    points[i][1]=points[i-4][1];
    points[i][2]=-30;
  }
      //lignes :
  lignes[0][0]=0;lignes[0][1]=1;
  lignes[1][0]=1;lignes[1][1]=2;
  lignes[2][0]=2;lignes[2][1]=3;
  lignes[3][0]=3;lignes[3][1]=0;
  lignes[4][0]=4;lignes[4][1]=5;
  lignes[5][0]=5;lignes[5][1]=6;
  lignes[6][0]=6;lignes[6][1]=7;
  lignes[7][0]=7;lignes[7][1]=4;
  lignes[8][0]=0;lignes[8][1]=4;
  lignes[9][0]=1;lignes[9][1]=5;
  lignes[10][0]=2;lignes[10][1]=6;
  lignes[11][0]=3;lignes[11][1]=7;
    //calculs :
  affichage();
  //récupération des touches appuyées pour faire tourner le cube
  short x=0;
  while(x!=264){
    x=ngetchx();
    if(x==33{
      //gauche
      rotationy(0.1);
      affichage();
    }
    if(x==344){
      //droite
      rotationy(-0.1);
      affichage();
    }
    if(x==337){
      //haut
      rotationx(0.1);
      affichage();
    }
    if(x==340){
      //bas
      rotationx(-0.1);
      affichage();
    }
  }
}





-Edité le Lundi 10 janvier 2005 à 21:14 par jolivier-
[EDIT par Kevin Kofler: Corrections de formatage.]
-Edité le Mardi 11 janvier 2005 à 01:59 par Kevin Kofler-
    
./Post n°10   Marquer comme non lu.
limmt Ecrit le: Mardi 11 janvier 2005 à 18:13 Déconnecté(e)    Voir le profil de limmt Envoyer un email à limmt Visiter le site WEB de limmt Envoyer un message privé à limmt  


pour ton tableau de points 3d, tu devrais renoncer à utiliser des floats, quitte à les mettre en entier ou à utiliser une vigule flottante, mais les floats c'est ultra lent ;)
http://www.falco-fr.com/ - http://www.jump67.com/ - http://www.msf-league.com/
    
  :: Index » Forum Ti68K » Programmation C » Adress Error après compilation de C (10 réponse(s))
Pages : 1/1     « [1] » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 58.86ms avec 18 requetes