1

g dler la derniere version de TI-GCC et j'ai voulu faire un teste avec l'ide, un teste tt con :
main.c
#define USE_TI89              // Compile for TI-89
#define USE_TI92PLUS          // Compile for TI-92 Plus
#define USE_V200              // Compile for V200

#define SAVE_SCREEN           // Save/Restore LCD Contents

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

#include "utils.h"

// Main Function
void _main(void)
{
	clrscr();
	printf("1 + 2 = %d",calc(1,2));
	ngetchx();
}

utils.h
int calc(register int a asm("d0"),register int b asm("d1"));

utils.c
#include "utils.h"

int calc(register int a asm("d0"),register int b asm("d1"))
{
//	a += b;
	asm("add.w %d0,%d1")
	return a;
}

Au debut avec "a +=b" il m'affichait correctement la valeur, cad 3, jusque la tt va bien

Apres donc g mis le code asm a la place et qui logiquement fait exactement la meme chose, pourtant se con maintenant m'affiche "1+2 = 5" !!
Soit je sais plus compter, soit je pige plus rien, j'ai donc l'impression que l'ide (ou ti-gcc) se démerede tres mal avec le "versionning" des fichiers et ne recompile pas forcement se qui devrait etre recompilé, j'ai meme l'impression que l'IDE ne recompile pas si une source a été modifié et qu' l''on fait "Run" ni qu'il sauve automatiquement tt les fichiers ouvert quand on lance une compilation (je suis pas sur g pas fait de test pour sa, c l'impression que sa me donne)

Aussi un autre teste que g fait :

g ecrit utils.c comme sa :

#include "utils.h"

asm("
calc:
     add.w %d0,%d1
    [...]
    rts
")


Et apres TI-GCC me répond :

"1 undefined reference to 'calc'"
Le seul moyen que g trouvé est de mettre le "asm("...")" direcement dans le .h !!

Quelle horreur ! du code dans un .h ! J'avais encore été obligé de faire ça...

(d'ailleur je veux pas dire, mais je viens de voir a l'instant les sources d'un jeu que je nommerait pas, et l'auteur a osé mettre du code dans un .h, j'avais encore jamais vu qq chose d'aussi "sale"...)

les .h comme leur nom l'indique c des "header" soit en francais des en tete, qui ne servent qu'a faire des déclarations, pas à y mettre du code, sinon on va se retrouver avec 15 fois le meme code, si on inclu 15 fois le .h ...)

Enfin bon voila, ct ma geulante du jour
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2

Bah moi mes *.h servent juste à mettre mes macros, mes déclarations de fonction (ex : long sum(int, int); long mul(char, char); ), et les types&structures définis. Et aussi qq def de sprites temporaires mais c'est tout.

C'est sur qu'après le code pur (algos, fonctions complètes) ça va dans les *.c
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

3

godzil a écrit :
Apres donc g mis le code asm a la place et qui logiquement fait exactement la meme chose, pourtant se con maintenant m'affiche "1+2 = 5" !!

Déjà ton code, s'il marchait, ferait b+=a, pas a+=b (le 68k n'est pas un x86 ni un Z80!), et ensuite tu ne peux pas utiliser de l'assembleur inline comme ça. Rien à voir avec l'IDE.
Aussi un autre teste que g fait :

g ecrit utils.c comme sa :

#include "utils.h"

asm("
calc:
     add.w %d0,%d1
    [...]
    rts
")

Ça, c'est la syntaxe correcte.
Et apres TI-GCC me répond :

"1 undefined reference to 'calc'"
Le seul moyen que g trouvé est de mettre le "asm("...")" direcement dans le .h !!
Quelle horreur ! du code dans un .h ! J'avais encore été obligé de faire ça...

As-tu bien gardé le prototype C dans utils.h?
Si oui, essaye de rajouter extern dans le prototype de utils.h:
extern int calc(register int a asm("d0"),register int b asm("d1"));
Mais normalement, ça ne devrait pas être nécessaire pour une déclaration de fonction.

En tout cas, je pense que l'IDE n'y est probablement pour rien, ça doit être un problème dans ton code.

Ah oui, encore un truc: pour l'IDE un header C doit commencer par // ou /*. Il faut au moins un commentaire dans la première ligne. C'est peut-être ça ton problème.
(d'ailleur je veux pas dire, mais je viens de voir a l'instant les sources d'un jeu que je nommerait pas, et l'auteur a osé mettre du code dans un .h, j'avais encore jamais vu qq chose d'aussi "sale"...)

Certains programmeurs font ça parce qu'ils ne comprennent pas comment fonctionne la compilation séparée.
les .h comme leur nom l'indique c des "header" soit en francais des en tete, qui ne servent qu'a faire des déclarations, pas à y mettre du code, sinon on va se retrouver avec 15 fois le meme code, si on inclu 15 fois le .h ...)

Si le header n'est inclus que dans un seul fichier .c, ça passe encore, mais il est vrai que c'est à éviter.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

oui pour l'inversion de d0 et d1 j'suis d'accord c ma faute, mais

calc([...])
{
asm("add.w %d1,%d0")
return a;
}
sa marche nickel !

Si il me retournait 5, c a cause de l'IDE (TIGCC?) qui ne sait pas gerer le "versionning" des fichiers, pour que sa compile se qu'il faut, g du fermer l'ide et recompiler et la sa ma mit la bonne valeur.

Sinon que le teste avec
asm("
calc:
...
")

Oui il y avait bien le proto dans le .h, et normalement on défini pas une fonction externe, le compilo s'en charge tt seul... Mais bon j'vais quand meme tester
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

5

godzil a écrit :
oui pour l'inversion de d0 et d1 j'suis d'accord c ma faute, mais

calc([...])
{
asm("add.w %d1,%d0")
return a;
} sa marche nickel !

C'est quand-même très sale, et pas du tout la syntaxe prévue. À l'intérieur d'une fonction, tu peux utiliser quelque chose de style:
asm("add.w %2,%0":"=d"(a):"0"(a),"d"(b));
mais pas un asm simple.
Si il me retournait 5, c a cause de l'IDE (TIGCC?) qui ne sait pas gerer le "versionning" des fichiers, pour que sa compile se qu'il faut, g du fermer l'ide et recompiler et la sa ma mit la bonne valeur.

Là, c'est bizarre. As-tu édité le fichier en dehors de l'IDE? Parce que sinon, il ne devrait pas y avoir ce genre de problèmes!
Sinon que le teste avec
asm("
calc:
...
")
Oui il y avait bien le proto dans le .h, et normalement on défini pas une fonction externe, le compilo s'en charge tt seul... Mais bon j'vais quand meme tester

En effet, extern est automatique pour les fonctions. Mais je viens de voir ce qui ne va pas. Quand GCC compile une fonction globale, il met toujours un .globl. Il faut que tu fasses de même pour ta fonction en assembleur inline:
asm("
[b].globl calc[/b]
calc:
...
")
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Kevin Kofler
a écrit : Là, c'est bizarre. As-tu édité le fichier en dehors de l'IDE? Parce que sinon, il ne devrait pas y avoir ce genre de problèmes!


Certain ! Et sa ne me le fait pas que sur se projet, mais sur tous ! (ou presque) sa marche 3-4 compilation puis apres, pouf il fait semblant de compiler (il met des truc dans %temp% pi il "envoi" le fichier a VTI (je bosse avec vti c plus rapide) et le prog executé est le meme ! La taille aussi est strictement identique, quand il m'affiche "Compilation terminé"....
Kevin Kofler a écrit :
En effet, extern est automatique pour les fonctions. Mais je viens de voir ce qui ne va pas. Quand GCC compile une fonction globale, il met toujours un .globl. Il faut que tu fasses de même pour ta fonction en assembleur inline:
asm("
[b].globl calc[/b]
calc:
...
")

Un peu chiant sa... D'ou ma préférence pour déclarer la fonction comme sa : (et pi c plus lisible malgres tt)

int mafonction(register a asm("d0")
{
     asm("
     ...
     ")
}

que

asm("
.glob mafonction:
     ...
     rts
")

De tte j'utilise po bcp d'asm pour mon projet
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

7

godzil a écrit :
Un peu chiant sa... D'ou ma préférence pour déclarer la fonction comme sa : (et pi c plus lisible malgres tt)

int mafonction(register a asm("d0")
{
     asm("
     ...
     ")
}

que

asm("
.glob mafonction:
     ...
     rts
")
De tte j'utilise po bcp d'asm pour mon projet

Sauf que la 2ème solution est la bonne (sauf que c'est .globl mafonction;mafonction:, pas .glob mafonction:), alors que la première est sale et risque de ne pas marcher dans beaucoup de cas! Et puis, si tu n'utilises pas le switch -fomit-frame-pointer, la première solution te mettra un beau link #0,%a6 avant ton asm et un bel unlk %a6 après. La 2ème solution évite ce genre de code inutile. Elle est de loin plus propre et plus pratique.


Et pour tes problèmes avec l'IDE, c'est à Sebastian@tigcc.ticalc.org qu'il faut en parler. Je ne peux rien faire pour des bogues dans l'IDE.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité