300

Super justement ! Ximoon, pourquoi ça serait sale ? Tout les bons codeurs asm passent leur temps à faire ça ?

Et ya un truc que je comprends pas, je vous ai toujours lu dire que la connaissance de l'asm aide à faire du C, parce qu'on comprend ce que fait la machine et ce qu'on lui demande. Pourquoi serait-ce un tort de vouloir coller à peu près à ce que je fais en asm, sachant que mes techniques sont pas trop mauvaises ? Ok pour le moment j'y passe certainement un temps fou, mais c'est le temps de trouver mes marques, perso ça me dérange pas et c'et pourquoi je perds ces verres. smile

301

Sally (./299) :
Le pire c'est qu'après il va vouloir optimiser son pointeur en utilisant une global register variable, et au bout du compte ça reviendra exactement au même que de passer le pointeur en paramètre à toutes les fonctions qui en ont besoin cheeky

Pitêt ben mon brave homm', mais zau moins j'aurai essayé divers' choses, et l'expér'ence ça s'rimplace pas hein tongue

302

Ben c'est sale parce que mettre l'adresse d'une variable locale dans un pointeur global c'est une violation de toutes les règles d'encapsulation ^^ (si elle est locale c'est pas pour que tu y accèdes de l'extérieur, en principe cheeky)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

303

La connaissance de l'ASM peut faciliter l'approche du C, quand on compare à ceux qui viennent du BASIC et qui n'ont pas la notion d'allocation de mémoire et de pointeur. Beaucoup de personnes ont des gros problèmes pour assimiler les pointeurs du C, je pense que ce ne sera pas ton cas...

En revanche, je ne sais pas comment tu te débrouilles, t'arrives à faire de l'ASM avec du C : tu es en train de te prendre la tête sur des problèmes de code pc-relatif, d'éditeur de liens incapable de résoudre certains sauts (si j'ai bien compris tes derniers posts), etc. grin
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

304

Folco (./300) :
Pourquoi serait-ce un tort de vouloir coller à peu près à ce que je fais en asm, sachant que mes techniques sont pas trop mauvaises ?
Parce que si tu cherches à atteindre les mêmes buts qu'en ASM, autant faire de l'ASM... Sinon ça revient à vouloir conduire une formule 1 comme un 36 tonnes.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

305

pencil grin
Sasume (./303) :
d'éditeur de liens incapable de résoudre certains sauts

clair, j'ai JAMAIS eu ce problème depuis que je programme grin

(mais tout ça vient du fait qu'il veut du code PIC pour la beauté du truc, alors quand on veut être beau il faut souffrir grin)

306

Bon ok j'ai tout faux dans mno approche quoi gni

307

En fait pour ma variable globale pointée globalement, si je fais juste
struct Datas {...} Datat;
Data = (Datat) {......};
Datat* DataPtr = &Data;
le tout en-dehors d'une fonction, et j'inclus "extern Datat* DataPtr;" dans les autres fichiers où j'utilise mon pointeur.

Ca irait comme sauce ?

308

./306 Le C te permet justement de t'affranchir (un peu, pas autant que les langages de haut niveau) des problèmes chiants comme l'allocation des registres, ou tous les autres trucs liés à l'architecture matérielle sous-jacente (cela dit, comme je l'ai dit précédemment, le fait d'être passé par l'ASM te permet de mieux comprendre certains problèmes que tu peux rencontrer). Donc forcément, ça devient compliqué de vouloir contrôler ce genre de choses en faisant du C.

./307 Il manque le typedef de la première ligne. Initialiser une variable globale en dehors d'une fonction revient à créer une section .data (sauf si ça part dans une section bss), qui ne sera pas réinitialisée si tu laisses ton prog en RAM (en clair il faudra que tu l'archives avant de le lancer une première fois, sinon les valeurs d'initialisation seront perdues si elles sont écrasées durant l'exécution).
Ce n'était pas une mauvaise idée de faire une fonction Initialiser() qui initialisait les données. Sinon, moi ce que je faisais pour éviter toutes les variables globales, c'était simplement de les passer en paramètre partout où c'était nécessaire. Ça voudrait dire, dans le cas présent, utiliser une fonction Initialiser(Datat *dataptr).
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

309

Ok. Et est-ce également hérétique, d'un point de vue de l'encapsulation (tripo), de passer en paramètre un pointeur en argument, lequel pointe sur une variable locale à main par exemple ? Ca revient à la rendre visible artificiellement, non ? Et on peut à ce moment se passer de l'initialisation, non ?

310

C'est ce qu'on (enfin, moi au moins grin) t'incite à faire depuis plusieurs pages, si j'ai bien compris ce que tu veux faire grin
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

311

Ok, donc je repars (deuxième solution implémentée sur les xxx) sur ça. grin Mais je voulais pas spécifier à la main un registre, je veux rester en C pur (sinon je me connais, ça va finir en "void main (void) {asm "<le programme">} grin)

312

En fait il faut principalement te demander pourquoi tu codes en C, si c'est pour te torturer sur des considérations du genre "nombre de relogements"... En général, on code d'abord, et on optimise une fois que ça marche tongue
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

313

Non, sérieusement, je cherche la manière propre (au niveau code produit) que je vais pouvoir appliquer systématiquement sans plus réfléchir. cheeky

314

[edit] cross, complément de ./312

L'autre détail c'est surtout qu'aujourd'hui en général on optimise les algos, pas le code (enfin sans tomber dans l'extrême inverse). C'est ce que tout le monde te répète depuis quelques pages, mais si tu codes en C en gardant un œil sur le code ASM produit, reste en ASM, sous peine de produire à la fois un mauvais code ASM (mal optimisé) et un mauvais code C (mal écrit).

Si on a inventé des langages différents c'est parcequ'il y a des besoins différents. Si ton objectif est rigoureusement le même que celui que tu avais quand tu programmais en ASM, alors tu n'as aucune raison de vouloir changer quoi que ce soit ^^
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

315

Ximoon (./312) :
En général, on code d'abord, et on optimise une fois que ça marche tongue.gif

En général, on code d'abord, et on optimise le nécessaire une fois que ça marche ^^
(ou on attend 6 mois d'avoir du matériel plus puissant, en disant "ça rame mais c'est pas grave, ça ira bientôt plus vite" gol )
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

316

Ouep, mais sachant que ma cible unique est l'embarqué comme vous le savez, je modère un peu vos propos, les usines à gaz sur TI ça a jamais fait long feu.

Bon, j'ai adapté mon source, j'ai une structure dans main, je la passe en paramètre un peu partout. Résultat, je perds 300 octets (10% quand même ^^), et j'ai pas de relogements avec -mpcrel. Chui content, je continue comme ça, c'est facile à faire.

Nan mais rassurez-vous, une fois que j'aurai trouvé ma technique favorite, j'y resterai et ça reviendra pas sur le tapis. Je pense que c'est aussi ce genre de perfectionnisme (déplacé en prod, ok) qui fait que j'ai toujours très peu releasé grin

317

./315 : J'irais plus loin :

Actuellement, on code d'abord comme un porc vu que le projet est en retard, on est content si ça marche pas trop mal, et on se dit qu'on nettoiera/optimisera plus tard quand on aura le temps (en sachant pertinemment que ça n'arrivera jamais tongue )
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

318

Folco (./293) :
J'ai bien essayé, mais suite à ça je me tape 14 erreurs de relogements to far for size 2 at 0xF*CKGCC cry

Comme déjà dit plus haut dans le topic, si tu utilises -mpcrel, tu dois aussi utiliser -mno-bss. (Peut-être que ça devrait l'impliquer automatiquement?) Avec ça tous tes problèmes de relogements avec la variable globale disparaîtront automatiquement.
Folco (./313) :
Non, sérieusement, je cherche la manière propre (au niveau code produit) que je vais pouvoir appliquer systématiquement sans plus réfléchir. cheeky

Cette manière propre, ça s'appelle les relogements. tongue Le code PC-relatif n'est pas la réponse à tout.
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é

319

Oué oué oué, on voit le gars qui aime pas PedroM et ses features déjà cheeky

320

Ximoon (./312) :
En général, on code d'abord, et on optimise une fois que ça marche tongue.gif
pencil (d'ailleurs si tu (Folco) regardes le bout de header que je t'avais montré avec les register variables et tout, c'est entièrement de l'optimisation après coup à coups de #define, mais le truc compilait et fonctionnait sans — et effectivement, si j'étais parti là-dedans dès le début avant d'avoir un portage (car c'était de ça qu'il s'agissait au départ, certes c'est assez différent de ce que tu fais ^^) qui fonctionne, je ne serais jamais arrivé à rien. Si je me souviens bien, la première version plus ou moins fonctionnelle de foblub utilisait printf() au lieu du ROM call qui va bien, et tout à l'avenant, c'était tout pourri (et assez énorme) mais ça donnait une base pour arriver à quelque chose de mieux ^^)

En fait ton tout premier but (avant même d'avoir du code qui marche, celui-là c'est le second) devrait être d'avoir du code qui compile sans erreur/warning, àmha. J'ai eu l'impression que tu te souciais des relogements alors même que tu avais des erreurs de compilation (j'ai peut-être mal compris mais bon), or optimiser du code incorrect ça n'apporte pas grand chose, donc mieux vaut s'occuper des erreurs en premier lieu hehe
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

321

Ben actuellement, j'ai dépassé les 3 ko de binaire et j'ai ni erreur ni warning (ni relogement trigic).
Mais maintenant, ça devrait avancer à bonne vitesse. boing Mais pondre du code crade kimarche, c'est tellement pas dans mes habitudes, je sais pas si je m'y ferai. grin

322

Kevin Kofler (./318) :
(Peut-être que ça devrait l'impliquer automatiquement ?)
Si -mpcrel ne peut pas du tout marcher en présence de BSS, ça me semble une bonne idée effectivement ^^
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

323

En fait, normalement ça devrait fonctionner avec les BSS mergés au niveau du linker (qui ont l'avantage d'être initialisés à 0 automatiquement à chaque démarrage sauf si on désactive ça, alors qu'avec -mno-bss on a une "variable dans le programme" classique qui garde sa valeur dans le cas d'un programme non archivé/compressé), mais visiblement ça ne fonctionne pas et il faut carrément désactiver les BSS au niveau du compilateur. À examiner…

D'ailleurs, pour Folco: si tu veux pouvoir exécuter ton programme en FlashROM, il ne suffit pas de ne pas avoir de relogements, les variables globales stockées dans le programme sont aussi interdites, ainsi que le code automodifiant (et je signale que certaines fonctionnalités dans le code de démarrage de TIGCCLIB utilisent du code automodifiant, notamment ENABLE_ERROR_RETURN).
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é

324

Je sais ce qu'il ne faut pas, t'inquiète, c'est pas pour rien que je fais un loader + une partie principale dans un pack archive en assembleur. hehe

325

Bon, encore un truc que j'arrive pas à faire, mais là, rien de grave (enfin, je crois).
Il me dit que SCR_RECT n'a pas de membre appelé x0,y0,x1,y1. Voici (encore une fois) sa définition :
typedef union { 
 struct { 
 unsigned char x0, y0, x1, y1; 
 } xy; 
 unsigned long l; 
} SCR_RECT;

Et voici mon code :
	const SCR_RECT Rect = {{(char)(LCD_WIDTH-Width)/2,(char)(LCD_HEIGHT-Height)/2,(char)(LCD_WIDTH+Width)/2,(char)(LCD_HEIGHT+Height)/2}};
	const SCR_RECT TitleFrame = {{Rect.x0+1,Rect.y0+2,Rect.x1-1,Rect.y0+6}};

Apparemment, ça lui plait pas... "Pourquoi çaaaaa ?" ©Fernand Reynaud, Balendar sur le front

Si vous pouviez :
- m'expliquer pourquoi ça déconne
- m'orienter vers une solution propre (vous aurez déjà remarqué que je suis vos conseils en renseignant mes SCR_RECT avant d'en passer les adresses en argument. grin)

Merci d'avance, et merci spécialement à la patience de certains ^^

326

Rect.xy.x0
Il y a une structure xy dans l'union.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

327

Ah ! J'avais oublié, alors que je l'ai utilisé il y a deux jours. Je manque encore sacrément de réflexes... tsss

328

C'est bien fun quand même, faire quelques petits trucs graphiques prennent 10 lignes, 10 minutes, et... 600 octets grin Mais au moins, ça permet d'agrémenter un programme à peu de frais. Les graphismes en assembleur, c'est rébarbatif (notamment à cause de la manipulation de toutes ces structures ^^)

329

Folco (./327) :
Ah ! J'avais oublié, alors que je l'ai utilisé il y a deux jours. Je manque encore sacrément de réflexes... tsss

Non tu manque cruellement d'un bon editeur de fichier C qui te propose de la completion automatique, avec un tel editeur, impossible (ou presque) de faire ce genre d'erreurs
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.

330

Ben t'as qu'à dire ça aux contributeurs de GCC4TI cheeky

D'ailleurs, faut quel niveau en C pour contribuer ? parce que bon, ça m'étonnerait que certains veuillent de mon éditeur asm à faire tourner sur émulateur de machine à base de 68k trinon