forumti.gif
@_ö
(04:18)  Bienvenue ! - Inscrivez vous pour poster ! -
@Boo, Zerosquare, 45 inconnu(s), 33 bot(s)

Login :  Mot de passe :      Se souvenir de moi.  Mot de passe perdu ?
/!\:: Cliquez ici pour vous inscrire et poster, créer des sujets ou des forums ! ::/!\
 « - 1/1 - » :: Pages
 Index » Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Prog C TI (29r) » Un étrange bug de contraste
./Post de départ - Un étrange bug de contraste
29.06.2010 - 26
12:47  Lepzulnag - Posté : 08-11-2011  M
Bonjour !

Voilà je suis actuellement en train de programmer un logiciel de dessin qui marche plutôt bien, et en voulant améliorer la vitesse de mon affichage, je suis tombé sur un bug que je ne comprends pas.

Les symptômes

Lorsque mon programme tourne, un appui sur la touche ON met automatiquement le contraste à 0.
Lorsque je quitte mon programme sans appuyer sur la touche ON, et ensuite appuie sur la touche ON (alors que je navigue sur l'interface basique de ma TI), le contraste est mis à 0. Le bug de contraste est plus fort que la commande OFF : si j'essaie d'éteindre ma calculette, il ne l'éteindra pas, mais mettra le contraste à 0.

Le bug ne frappe qu'une fois; un deuxième appui sur la touche ON ne modifiera pas le contraste et je peux l'éteindre normalement.

EDIT : De plus, la mémoire Flash ROM Free affichée dans le menu mem de la calculette affiche la quantité 2 une fois le programme quitté.


Le code foireux

J'ai évidemment recherché dans mon programme la/les lignes de code à la source du mystérieux problème, et suis finalement tombé avec surprise sur cet innocent bout de code :

for (x=0;x<160;x++) memcpy(LCD_MEM+30*x, virtual+20*x, 20);

où virtual est un buffer de 2000 octets (soit un plein écran de ti89). Cette ligne (qui marche parfaitement à l'exécution) affiche à l'écran l'image enregistrée dans virtual.

Or lorsque je la mets en commentaire, je ne retrouve plus le bug de contraste ! Et je ne vois pas le rapport entre la touche ON, un contraste mis à zéro, et ce bout de code... #confus#


Je précise également que je désactive (plus exactement redirige vers rien) les auto-int 1 et 5 au début de mon programme, et les réactive à la fin.



Comment et surtout pourquoi ma calculette réagit-elle de la sorte ? Si quelqu'un a une idée, cela m'aiderait beaucoup.
Edité par Lepzulnag le 08-11-2011 à 15:28:15.
./Publicité AdSense
./1
10.06.2001 - 6502
13:34  Uther - Posté : 08-11-2011  M
Si je me souviens bien la touche ON déclenche l'auto-int 6, donc, je dirais que tu dois avoir modifié cet auto-int par erreur, ce qui expliquerait également pourquoi le problème persiste une fois le programme terminé.

Par contre, j'ai du mal a voir un éventuel rapport avec la ligne que tu as posté.
avatar
./2
18.06.2001 - 26914
14:35  Folco - Posté : 08-11-2011  M
Tu peux installer PreOS et regarder sir le big persiste ?
avatar<<< Kernel Extremist©®™ >>> WIP : r9 - 2014-11-22

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./3
29.06.2010 - 26
15:22  Lepzulnag - Posté : 08-11-2011  M
Bon, il y a du nouveau ! smile

J'ai vérifié, je n'ai pas touché à l'auto-int 6 à cause d'une quelconque faute de frappe. Cependant je le modifie peut-être d'une manière plus sournoise et involontaire. C'est une piste...

J'ai installé PreOS v1.0.7 et le bug persiste.

J'ai découvert un nouveau symptôme ! Une fois le programme quitté, la quantité de mémoire flash ROM free affichée dans le menu mem de la calc devient égale à 2 ! (premier message édité)
(ce bug est de plus en plus mystérieux... ah, le C ! grin )

Peut-être un buffer overflow ? Ce serait en rapport avec la ligne de code qui fait bugger, mais elle me semble parfaite.

En fait, ce qui m'embête vraiment, c'est que c'est FORCEMENT le memcpy qui fait bugger, puisque tout marche quand je le mets en commentaire, et pourtant c'est impossible puisque c'est une boucle on ne peut plus simple et qui a de surcroît le culot de marcher... #pleure#

Il faudrait trouver les causes possibles des symptômes observés, et voir lesquels sont susceptibles d'être présent dans mon programme.

J'utilise PortSet pour des images 159x99 (et non 239x127), les auto-int 1 et 5, et j'écris parfois directement sur la mémoire vidéo. Y a-t-il dans ces manipulations quelque piste?
Edité par Lepzulnag le 08-11-2011 à 15:27:42.
./4
10.06.2001 - 27735
15:27  Pen^2 - Posté : 08-11-2011  M
Es-tu sûr de ne pas dépasser ? Il me semble qu'il y a des variables systèmes derrière la mémoire vidéo.
Edité par Pen^2 le 08-11-2011 à 15:53:53.
./5
29.06.2010 - 26
15:36  Lepzulnag - Posté : 08-11-2011  M
OUIIIIIII !!! #oui# #oui# #oui# #oui# #oui#

Merci Pen^2 !!!

J'étais fatigué, et finalement tout est bien qui finit bien : c'est bien le memcpy qui faisait bugger !

J'avais juste inversé les lignes et les colonnes. Le bon code est :
for (x=0;x<100;x++) memcpy(LCD_MEM+30*x, virtual+20*x, 20);



Et dire que personne n'avait remarqué la petite erreur dans cette petite ligne de code grin

Je vous remercie tous et vous souhaite une bonne journée smile
./6
10.06.2001 - 6502
15:43  Uther - Posté : 08-11-2011  M
edit: crosspost
avatar
./7
16.06.2001 - 61140
15:50  squalyl - Posté : 08-11-2011  M
rah le bug qui tue, on aurait pu y passer des jours grin

le buffer d'écran n'est pas contigu? t'avais pas moyen de faire l'opération en un seul memcpy de la bonne taille?
./8
03.11.2002 - 10824
15:58  Brunni - Posté : 08-11-2011  M
J'avais pas vu non plus ^^
En fait quand tu suspectes un buffer overflow, le mieux à faire est de réduire la zone de mémoire affectée et observer le changement. Par exemple, tu aurais remplacé 160 par 80 et tu te serais aperçu que ce n'est pas la moitié de l'écran qui s'efface alors mais plus du trois quart. wink

squalyl> Le buffer fait 240 de large wink
avatarAvatar fait avec GIMP. Parce que les outils libres ça peut servir à autre chose que casser les pieds aux autres.

"La vie est un grand terrain de jeu. On le sait quand on est enfant mais on l’oublie en grandissant."

http://www.mobile-dev.ch/
./9
29.06.2010 - 26
16:10  Lepzulnag - Posté : 08-11-2011  M
Comme quoi parfois on a beau avoir la solution devant le nez, on se refuse à voir l'erreur smile

J'ai choisi un buffer virtuel de 160x100, celui de la mémoire vidéo étant de 240x128, tous les 20 octets suivent 10 octets totalement inutiles pour la ti-89.
./10
29.06.2010 - 26
16:13  Lepzulnag - Posté : 08-11-2011  M
Brunni > C'est ce que j'avais fait, mais avec un nombre encore trop grand...
./11
18.06.2001 - 26914
17:26  Folco - Posté : 08-11-2011  M
Lepzulnag (./3) :
J'ai vérifié, je n'ai pas touché à l'auto-int 6 à cause d'une quelconque faute de frappe. Cependant je le modifie peut-être d'une manière plus sournoise et involontaire. C'est une piste...

Pour info, il y a une protection matérielle pour empêcher d'écrire dans la zone des vecteurs (les 100 ou $100 premiers octets, je sais plus). Et le handler de l'AI6 est en flash, donc il y a un risque ultra minime que ça puisse arriver.
Lepzulnag (./3) :
J'ai installé PreOS v1.0.7 et le bug persiste.

Ca voulait dire que le handler de l'AI6 n'était pas en cause, ce qui est bien le cas.
Lepzulnag (./3) :
et pourtant c'est impossible

Pour ta gouverne : fous-toi à grand coup de massue dans le crâne qu'un bug, c'est TOUJOURS !!! de ta faute. Si tu pars avec une autre mentalité, tu seras frustré. J'en ai fait l'expérience avant de l'admettre, ou d'avoir un niveau assez bon pour trouver les bugs des autres. cheeky
Pen^2 (./4) :
Il me semble qu'il y a des variables systèmes derrière la mémoire vidéo.

Yep, et la pile superviseur avant. Mieux vaut bien viser ^^
Et pour info, PreOS sauvegarde/restaure 3 lignes sous l'écran pour éviter une partie des désagréments. smile
avatar<<< Kernel Extremist©®™ >>> WIP : r9 - 2014-11-22

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./12
10.06.2001 - 27735
17:29  Pen^2 - Posté : 08-11-2011  M
Quel coquin ce PreOS ##modui##
./13
28.10.2001 - 7498
18:49  Lionel Debroux - Posté : 08-11-2011  M
Si tu as recours à un buffer virtuel de 20 octets de large, c'est que tu utilises les fonctions d'AMS et que tu n'as pas besoin de vitesse smile
Les librairies graphiques rapides utilisent des buffers pleine taille et de la copie rapide.
avatarMembre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.
./14
10.06.2001 - 27735
18:55  Pen^2 - Posté : 08-11-2011  M
(Tu devrais lui dire quelle est la bibliothèque graphique la plus efficace ; perso je ne suis plus très au courant)
./15
03.11.2002 - 10824
19:03  Brunni - Posté : 08-11-2011  M
C'était pas extrgraph? smile
avatarAvatar fait avec GIMP. Parce que les outils libres ça peut servir à autre chose que casser les pieds aux autres.

"La vie est un grand terrain de jeu. On le sait quand on est enfant mais on l’oublie en grandissant."

http://www.mobile-dev.ch/
./16
28.10.2001 - 7498
20:42  Lionel Debroux - Posté : 08-11-2011  M
Il n'est pas obligé d'utiliser une librairie graphique s'il n'en a pas besoin smile

En 2011, il n'y a que deux librairies graphiques (quelque peu) maintenues: ExtGraph et Genlib. Elles ne sont pas vraiment en concurrence (librairie statique vs. librairie dynamique), et Genlib a été une source d'inspiration pour ExtGraph à plusieurs reprises smile
avatarMembre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.
./17
29.06.2010 - 26
08:58  Lepzulnag - Posté : 09-11-2011  M
En effet je n'utilise pas de librairie graphique. Ayant commencé à programmer en TI-basic, et ne programmant rien nécessitant une grande vitesse d'exécution, je m'extasiais régulièrement sur la rapidité des fonctions de l'AMS tongue

Mais à présent que je m'attaque à des outils graphiques plus complexes, je commence à utiliser extgraph (et là l'extase atteint son paroxysme smile ).
./18
18.06.2001 - 26914
09:59  Folco - Posté : 09-11-2011  M
Et bien, qu'est-ce que ça sera devant Genlib. happy
avatar<<< Kernel Extremist©®™ >>> WIP : r9 - 2014-11-22

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./19
29.06.2010 - 26
13:08  Lepzulnag - Posté : 12-11-2011  M
Je meurs?

Genlib, la librairie qui tue.
./20
18.06.2001 - 26914
13:59  Folco - Posté : 12-11-2011  M
grin
avatar<<< Kernel Extremist©®™ >>> WIP : r9 - 2014-11-22

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./21
10.06.2001 - 27735
14:12  Pen^2 - Posté : 12-11-2011  M
(c'est une bibliothèque tongue)
./22
18.06.2001 - 26914
14:20  Folco - Posté : 12-11-2011  M
Eh Bovido, on t'as pas sonné !
avatar<<< Kernel Extremist©®™ >>> WIP : r9 - 2014-11-22

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./23
10.06.2001 - 27735
14:44  Pen^2 - Posté : 12-11-2011  M
(bibliothèque c'est plus joli embarrassed)
./24
27.04.2006 - 39635
18:29  @Zerosquare - Posté : 12-11-2011  @_ö
##pointsally##
avatarZeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Sur Atari tout le hardware tu trouvera, le driver toi même tu le codera » — GT Turbo
./25
13.06.2001 - 70127
18:34  Nil - Posté : 12-11-2011  M
Pen^2 (./14) :
(Tu devrais lui dire quelle est la bibliothèque graphique la plus efficace ; perso je ne suis plus très au courant)
Penpen, t'es quand même un chacal de merde grin
avatar
./26
18.06.2001 - 26914
18:59  Folco - Posté : 12-11-2011  M
La vache Nil, tu tombes bas, même moi j'avais réussi à ne pas relever. Au prix d'une crise de nerf, ok, mais j'avais tenu bon. #tsss#
avatar<<< Kernel Extremist©®™ >>> WIP : r9 - 2014-11-22

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./27
10.06.2001 - 27735
22:41  Pen^2 - Posté : 12-11-2011  M
Bah quoi, c'est vrai que je ne suis plus très au courant : j'essaie d'informer les nouveaux au mieux, voilà tout #tripo#
Et sinon Lepzulnag, as-tu déjà entendu parler des Kernels ? ##concupiscence##
./28
18.06.2001 - 26914
22:58  Folco - Posté : 12-11-2011  M
C'est con, t'avais presque retrouvé ta crédibilité avec la première phrase grin
avatar<<< Kernel Extremist©®™ >>> WIP : r9 - 2014-11-22

Les ministres ne sont que des commis chargés d'exécuter les ordres des grands banquiers, des pantins dont la Haute Banque tire les ficelles. Alexandre Millerand, président du conseil des ministres...

Un des bienfaits de la Révolution est d'avoir livré la France aux hommes d'argent qui, depuis cent ans, la dévorent. Anatole France
./29
10.06.2001 - 27735
23:00  Pen^2 - Posté : 12-11-2011  M
Tu peux faire l'innocent embarrassed
Folco (./11) :
Et pour info, PreOS sauvegarde/restaure 3 lignes sous l'écran pour éviter une partie des désagréments. /v31/gfx/s/smile.gif
./Publicité AdSense
 « - 1/1 - » :: Pages
 Index » Forum Ti 89, Titanium / 92+ / Voyage 200 et TI-Nspire » Prog C TI (29r) » Un étrange bug de contraste

./Poster un nouveau message. - Ouvrir dans une nouvelle fenêtre
Login : Mot de passe :

url - image - media  
spoiler - pre - fixed
quote - box - hr
poll - code





Smileys
Smileys perso
Pièce jointe
     Flood control (?) :    
Les messages postés sont la propriété de leurs auteurs. Nous ne sommes pas responsables de leurs contenus.

» yN ©1624 - Aide / Charte / Crédits
52ms | Statistiques