img
@_ö
(22:53)  Bienvenue ! - Inscrivez vous pour poster ! -
@Boo + 15 inconnu(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 - 6394
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é.



./2
18.06.2001 - 25151
14:35  Folco - Posté : 08-11-2011  M

Tu peux installer PreOS et regarder sir le big persiste ?


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

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 ! :)

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 ! :D )

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 - 26396
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 :D

Je vous remercie tous et vous souhaite une bonne journée :)



./6
10.06.2001 - 6394
15:43  Uther - Posté : 08-11-2011  M

edit: crosspost



./7
16.06.2001 - 59031
15:50  squalyl - Posté : 08-11-2011  M

rah le bug qui tue, on aurait pu y passer des jours :D

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 - 10310
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. ;)

squalyl> Le buffer fait 240 de large ;)


Avatar 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."
./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 :)

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 - 25151
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. %)
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. :)


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

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 - 26396
17:29  Pen^2 - Posté : 08-11-2011  M

Quel coquin ce PreOS modui



./13
28.10.2001 - 7383
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 :)
Les librairies graphiques rapides utilisent des buffers pleine taille et de la copie rapide.


Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
./14
10.06.2001 - 26396
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 - 10310
19:03  Brunni - Posté : 08-11-2011  M

C'était pas extrgraph? :)


Avatar 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."
./16
28.10.2001 - 7383
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 :)

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 :)


Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
./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 :p

Mais à présent que je m'attaque à des outils graphiques plus complexes, je commence à utiliser extgraph (et là l'extase atteint son paroxysme :) ).



./18
18.06.2001 - 25151
09:59  Folco - Posté : 09-11-2011  M

Et bien, qu'est-ce que ça sera devant Genlib. =)


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

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 - 25151
13:59  Folco - Posté : 12-11-2011  M

:D


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

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 - 26396
14:12  Pen^2 - Posté : 12-11-2011  M

(c'est une bibliothèque :p )



./22
18.06.2001 - 25151
14:20  Folco - Posté : 12-11-2011  M

Eh Bovido, on t'as pas sonné !


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

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 - 26396
14:44  Pen^2 - Posté : 12-11-2011  M

(bibliothèque c'est plus joli :o )



./24
27.04.2006 - 36131
18:29  @Zerosquare - Posté : 12-11-2011  @_ö

pointsally


Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
./25
13.06.2001 - 70122
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 :D



./26
18.06.2001 - 25151
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#


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

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 - 26396
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 - 25151
22:58  Folco - Posté : 12-11-2011  M

C'est con, t'avais presque retrouvé ta crédibilité avec la première phrase :D


<<< Kernel Extremist©®™ >>> WIP : r6 - 2014-03-08

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 - 26396
23:00  Pen^2 - Posté : 12-11-2011  M

Tu peux faire l'innocent :o
Folco (./11) :
Et pour info, PreOS sauvegarde/restaure 3 lignes sous l'écran pour éviter une partie des désagréments. img



./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
37ms | Statistiques