Hallo Leute,
ich habe keine Ahnung ob es für dieses Problem überhaupt möglich ist
eine Lösung zu finden, falls diese denn existiert.
Ich rufe eine Funktion auf und berechne die Parameter bei der Übergabe.
Das funktioniert fast immer... nur warum nicht immer? Im Beispiel, bei
dem das auftritt berechne ich eigentlich (TASTATUR_START_Y+48), auch mit
dem eigesetzen Wert für TASTATUR_START_Y geht es nicht. Es wird kein
Rechteck gezeichnet, sondern viele ungleich verteilte Senkrechte Linien.
Im Falle, dass es funktioniert, wird ein schönes Rechteck gezeichnet.
Stephan Meter schrieb:> Hallo Leute,>> ich habe keine Ahnung ob es für dieses Problem überhaupt möglich ist> eine Lösung zu finden, falls diese denn existiert.>> Ich rufe eine Funktion auf und berechne die Parameter bei der Übergabe.> Das funktioniert fast immer... nur warum nicht immer? Im Beispiel, bei> dem das auftritt berechne ich eigentlich (TASTATUR_START_Y+48), auch mit> dem eigesetzen Wert für TASTATUR_START_Y geht es nicht. Es wird kein> Rechteck gezeichnet, sondern viele ungleich verteilte Senkrechte Linien.> Im Falle, dass es funktioniert, wird ein schönes Rechteck gezeichnet.
Och, die Berechnung wird schon funktionieren.
Die Frage ist eher: Was macht die Funktion mit dem Wert?
Kann die überhaupt mit dem berechneten Ergebnis etwas anfangen?
Und dann kann es natürlich immer noch sein, dass das eigentliche Problem
ganz woanders sitzt und du hier nur die Symptome siehst.
> Es wird kein Rechteck gezeichnet, sondern viele ungleich> verteilte Senkrechte Linien.
Die Funktion soll aber nicht zufällig ein gefülltes Rechteck zeichnen,
macht dies indem sie lauter senkrechte (oder waagrechte) Linien malt und
aus irgendeinem arithmetischen Grund werden ein paar Linien
ausgelassen?
> ich habe keine Ahnung ob es für dieses Problem überhaupt möglich> ist eine Lösung zu finden, falls diese denn existiert.
Wieso so zaghaft? Natürlich gibt es auch dafür eine Lösung. Rechtecke
malen ist ja jetzt nicht unbedingt Raktentechnik.
Danke für die schnellen Antworten.
Ich habe das Problem gefunden. Liegt sicherlich an meinem Compiler. Er
sieht beim Aufruf die 92 und macht daraus einen signed char, dann
rechnet er +48 und wandelt dann in unsigned int um.
Bei der anderen Berechnung mit den 130+TASTATUR_START_X nimmt er gleich
einen unsigned char. Ich habe vor meine 92 ein (unsigned int)
geschrieben, jetzt gehts.
Stephan Meter schrieb:> Danke für die schnellen Antworten.>> Ich habe das Problem gefunden. Liegt sicherlich an meinem Compiler. Er> sieht beim Aufruf die 92 und macht daraus einen signed char, dann> rechnet er +48 und wandelt dann in unsigned int um.
Das ist aber eigentlich den C-Regeln nach nicht erlaubt.
92 ist ein signed int.
Bitte mehr Details. Woher kommt der Prototyp? Aus welcher Bibliothek.
Sind die beiden Aufrufe in derselben Datei?
Falls nicht: Vielleicht ist beim 2ten Aufruf der Prototyp nicht
definiert worden und somit wird die Zahl 140 als int interpretiert und
in die beiden Variablen geschrieben.
Was passiert wenn Du beide Stellen vertauschts? Geht dann auch der eine
Aufruf und der andere nicht?
Also : mehr Details (und vielleicht das kleinste moegliche Programm,
dass diesen Fehler zeigt posten). Auch Angabe zur Zielhardware ist nicht
falsch.
dumdidum schrieb:> Bitte mehr Details. Woher kommt der Prototyp? Aus welcher Bibliothek.> Sind die beiden Aufrufe in derselben Datei?
Die Lib ist von mir. Siehe Anhang. Eingebunden per
1
#include"gLCD.h"
> Falls nicht: Vielleicht ist beim 2ten Aufruf der Prototyp nicht> definiert worden und somit wird die Zahl 140 als int interpretiert und> in die beiden Variablen geschrieben.
Ich rufe die Funktion nur einmal auf, compiliere, teste. Umschreiben,
compilieren, testen.
> Was passiert wenn Du beide Stellen vertauschts? Geht dann auch der eine> Aufruf und der andere nicht?>> Also : mehr Details (und vielleicht das kleinste moegliche Programm,> dass diesen Fehler zeigt posten). Auch Angabe zur Zielhardware ist nicht> falsch.
Zielhardware ist ein PIC18F4685 von microchip. LCD ist ein 160x160 Pixel
grafisches LCD mit LC7981 Treiber.
Ich kann zu Deinem eigentlichen Problem wenig beitragen.
Aber: beim Durchsehen der gLCD.c ist mir am Anfang der Funktion
LCD_DrawLine diese Sequenz aufgefallen:
1
if(x1==x2){/* vertical line */
2
if(x2<x1){
3
i=x1;x1=x2;x2=i;
4
}
Nun, wenn x1==x2 ist, kann nicht gleichzeitig x2<x1 gelten! Müsste die
zweite Abfrage nicht
Da hast du natürlich Recht. Das ist für den Fall, dass ich eine Linie
von rechts nach links/ unten nach oben zeichnen will dahin gekommen.
Werde das gleich ändern.