PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Error 221 Backward jump out of Range



Gantenbein
04.09.2007, 14:19
Hallo,
ich bekomme gerade ständig eine Fehlermeldung Namens

Error 221 Backward jump out of Range [_FROUND 2059]], in File ....

bedauerlicherweise habe ich bisher keine genauere Beschreibung dieses Fehlers gefunden und weiß nun leider nicht wo dieser liegt, geschweige denn wie ich ihn ausbessern könnte.
Ich habe einmal den Hauptteil meines Programms beigefügt, ich schätze,dass es an diesen beiden If Abfragen am Anfang -die erst am Ende beendet werden hängt aber nach meinem verständnis müßten sie so OK sein.



'---------------------------------------------------------------------------------------------------------------------------------------------------
'Hauptprogramm
'---------------------------------------------------------------------------------------------------------------------------------------------------

'---------------------------SD Anfang---------------------------------------------

$Include "Config_MMC.bas"

If Gbdriveerror = 0 Then

$Include "Config_AVR-DOS.BAS"

Btemp1 = Initfilesystem(1)

If Btemp1 <> 0 Then
Lcd_string = "Error on Filesystem " : Lx1 = 1 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Schwarz : Lcd_bcolor = Weiss
Gosub Lcd_print

Else

Open "Daten.txt" For Append As #10





Do

Voutxw = Getadc(0)
Waitms 10


Voutx = Voutxw / 1024

Voutx = Voutx * Referenzspannung



Voutxstr = Fusing(voutx , "#.####")


Lcd_string = "Voutx " : Lx1 = 2 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss
Gosub Lcd_print
Lcd_string = Voutxstr : Lx1 = 8 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss
Gosub Lcd_print


Loop

Close #10
'Datei auf SD Karte schließen
End If

Else

Lcd_string = "Driveerror " : Lx1 = 1 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Schwarz : Lcd_bcolor = Weiss
Gosub Lcd_print


End If

End[fade:014a02acbd][/fade:014a02acbd]

PicNick
04.09.2007, 19:35
Ich glaub', da ist ein "else" zuviel, bzw. ein "if" zuwenig



---
Close #10
'Datei auf SD Karte schließen
End If

Else // zu dem seh ich kein "IF"
---


Noch was: Ich seh keine Chance, aus dem DO..LOOP rauszukommen.

Wie ist das gedacht ?

Gantenbein
04.09.2007, 21:41
Das Else gehört zu dem allerersten If ganz ganz oben.
Gut, das mit der Loop stimmt, daraus werde ich später noch eine while loop machen die eben bei einem Tastendruck endet und auch startet.
Inzwischen weiß ich immerhin, dass es wohl am "Btemp1 = Initfilesystem(1) " liegen muß. Allerdings sah ich so etwas bereits in einigen anderen Programmen in denen SD Karten beschrieben wurden und denke auch, dass da doch auch nicht so viel schief gehen kann.. bzw was geht denn da schief.. wie gesagt dieser Fehler sagt mir einfach nichts.

PicNick
05.09.2007, 07:18
Ah ja, jetzt seh' ich's.


If Gbdriveerror = 0 Then
$Include "Config_AVR-DOS.BAS"

1 Hau' dieses "IF" weg, es ist überflüssig, was soll an dieser Stelle sein ?
2 Könnte auch der Grund sein, da wahrscheinlich erst in der "include" das Feld "Gbdriveerror" definiert wird

Gantenbein
06.09.2007, 11:32
Nein das war es leider auch nicht, dieses Gbdriveerror wird bereits in der Config_MMC.bas definiert.
Bei der Auskommentierung folgender Zeile:
"Btemp1 = Initfilesystem(1) "
erscheint der Fehler allerdings nicht mehr aber ohne das kann das Programm ja auch nicht funktionieren.

Ich sehe es schon kommen, dass es irgendein sehr sehr einfacher dummer Fehler ist und ich am Ende einen Monat für brauchen werde um ihn zu finden.

PicNick
06.09.2007, 11:43
mmhh.
das "Btemp1" definierst du auch dort ? (nehm ich an)
Ist der Controller groß genug für AVR-DOS ?

Sonst müßt man wohl in die DOS-Library reinkraxeln.

Sorry, fällt mir nix gescheites ein

Gantenbein
06.09.2007, 12:04
Ich habe es jetzt mal folgendermaßen geändert, aber es brachte auch nichts. Hm bleibt nun die fRage was mit diesem Initfilesystem nicht richtig ist.
Naja trotzdem danke, immerhin beruhigt es mich schon fast,dass ein weitaus erfahrener es auch nicht gleich sieht. Wobei..nein eigentlich ist das letztlich doch eher beunruhigend.




'---------------------------------------------------------------------------------------------------------------------------------------------------
'Hauptprogramm
'---------------------------------------------------------------------------------------------------------------------------------------------------




'---------------------------SD Anfang---------------------------------------------
$include "Config_MMC.BAS"
$include "CONFIG_AVR-DOS.BAS"

IF Gbdriveerror <> 0 THEN
Lcd_string = "Drive error" : Lx1 = 1 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss
Gosub Lcd_print
END IF

Btemp1 = Initfilesystem(1)

IF Btemp1 <> 0 THEN
Lcd_string = "File system Error" : Lx1 = 1 : Ly1 = 51 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss
Gosub Lcd_print
ELSE
Lcd_string = "Card setup OK " : Lx1 = 1 : Ly1 = 52 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss
Gosub Lcd_print
END IF

Wait 3
Gosub Lcd_cls


Do


Voutxw = Getadc(0)
Waitms 10


Voutx = Voutxw / 1024

Voutx = Voutx * Referenzspannung


Voutxstr = Fusing(voutx , "#.####")


Lcd_string = "Voutx " : Lx1 = 2 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss
Gosub Lcd_print
Lcd_string = Voutxstr : Lx1 = 8 : Ly1 = 50 : Fontsize = 1 : Lcd_fcolor = Rot : Lcd_bcolor = Weiss
Gosub Lcd_print

Open "Daten.txt" For Append As #10

'Hier werden einmal die daten auf die Karte geschrieben


Close #10
'Datei auf SD Karte schließen
Loop


End


würde es vielleicht helfen wenn ich hier mal den kompletten code poste?

PicNick
06.09.2007, 13:18
Super wär ja, wenn ich das mit meinem Bascom übersetzen könnte. Aber das AVR-DOS kostet ja extra Kohle ?

[_FROUND 2059] klingt eigentlich aber nach runden ? Lass mal das "fusing" weg, nur damit wir das gleich wieder vergessen können.

PicNick
06.09.2007, 13:32
aha, man muß eine gewisse Reife erreicht haben, um Schwachsinn verzapfen zu können. Ich scheine eh' alles da zu haben, was man braucht.

Dann wäre wirklich die komplette Source interessant. Ich sollte ja die gleichen Fehler kriegen

(Controller typ bitte angeben)

Gantenbein
06.09.2007, 16:01
Nein also AVR Dos kostet nur etwas wenn man es gewerblich nutzen möchte.
Also ich verwende den ATMega128 auf dem D062x Board von Display 3000, programmieren tue ich das ganze mit einem einfachen USB-ISP Programmer von EMBUD.

So inzwischen habe ich noch ausprobiert alle Befehle die das LCD Display ansprechen auszukommentieren -ohne Erfolg. Wenn man jedoch die Routinen dazu (alles nach dem Hauptprogramm) auch auskommentiert geht es.. nur mag ich mich nun einmal nicht zwischen MMC Karte und Display entscheiden.

Die config_MMC.bas habe ich übrigens dahingehnd geändert, dass ich Port b zu d machte da diese Platiene von Display 3000 ja auch auf Port b zugreift und bevor sich da etwas ins Gehege kommt. Wenn gewünscht kann ich das aber auch nochmal posten.
Hier aber erstmal das Programm (mit auskommentierten LCD Aufrufbefehlen)

PicNick
06.09.2007, 17:22
mmmhh. Hab' das mal übernommen.
Bei jammert er jetzt erstmal Wasser und Rotz wegen einiger Functions (MUL32 etc)
Da kann ich mich aber erst morgen weiterspielen, sorry

Zur Erläuterung: Er will von einer Routine in der einen Library zu einer in einer anderen Library springen, und hat da einen relative Jump als Befehl
Je nach Kombination der Libraries im Programm ist das auch mal zu weit für diesen Befehlstyp.
Jetzt müßte man den Aufruf der div. Libraries solange umschlichten, bis es paßt, oder den oder die relativen Jumps finden und ausbessern.
Das ist Arbeit uiuiuiui.
Wenn es das ist, dann ist es aber ein Bug in einer der Libraries :-(

Gantenbein
07.09.2007, 10:52
Aber ich binde doch nur folgende beiden zusätzlichen Routinen ein:
$include "Config_MMC.BAS"
$include "CONFIG_AVR-DOS.BAS"
in diversen Beispielprogrammen werden diese auch in gleicher Reihenfolge initialisiert. An Libaries ist diese Avr Dos Libary natürlich auch im Bascom Ordner beigefügt, bei den neueren Versionen ist das ja sogar schon standardmäßig so.
Ich verstehe das so, dass sich die Initialisierung des Displays und des MMC controllers eben gegenseitig irgendwo ins Gehege kommen. Was nach meiner Meinugn durch die getrennten Ports ja eigentlich nicht wirklichs ein kann. Also dieser Fehler ist für mich als Anfänger gerade wirklich etwas zu schwer zu finden..
Inzwischen habe ich auch mal die MMC Karte (Sandisk MMC 32MB)an die betreffenden Kanäle gehangen um zu sehen ob es vielleicht daran liegt (wobei ich ja eigentlich damit rechnete, dass wenn sie nicht daran hängen würde einfach eine Fehlermeldung kommt) -nun daran liegt es also auch nicht. Ich weiß diese Aktion war eher eine Verzweiflungstat.

PicNick
08.09.2007, 13:00
Keep cool. Von so einem Software-Wurstel lassen wir uns nicht piesacken.
Ich muß mal schaffen, zur gleichen Fehlermeldung zu kommen wie du, dzt. bringt er mir nur eine Menge anderes Zeugs.

Gantenbein
10.09.2007, 10:52
Meine neuste Idee ist nun, dass vielleicht die Verwendung unterschiedlicher SPI Inits nicht wirklich bei mir funktioniert. Das wollte ich erreichen indem ich in der Config_MMC.bas Const Cmmc_soft = 1 setzte.
Wie bereits erwähnt wurde da gerade Port b dann noch durch d ersetzt.
Aber vielleicht habe ich da ja auch einen Fehler gemacht daher poste ich das hier nun auch einmal.

for_ro
10.09.2007, 11:27
Hallo,
werden auf dem D062x Board nicht die Ports D2 und D3 für RS232 verwendet? D0 ist standardmäßig an RESET angeschlossen. D1 liegt auf der rechten Taste.
Wenn dies noch so ist, solltest du andere Ports verwenden.
Ich habe übrigens das gleiche Board, nur glaube ich eine etwas ältere Version.
Es ist ja auch schon ein Umsetzer (4050) für 3,3V für das Display installiert. Von den verfügbaren 6 Gattern werden aber nur 3 benötigt. Die anderen drei habe ich für die MMC Karte verwendet. Die habe ich an die freien PortE Anschlüsse gelegt, die bei meinem Board nicht rausgeführt waren.

Gruß Rolf

PicNick
10.09.2007, 11:52
Tscha, ich krieg immer nur massenweise
"Invalid data Type"
ohne verwertbare Angaben.

Und zwar nur, wenn ich OPEN und/oder CLOSE verwende
d.h. Bei diesen Funktionen werden Konstanten "Const" aus den CONFIG's verwendet, die nicht korrekt bzw. leer sind.
d.h bei den Const-Definitionen hat's was.

Vielleicht krieg ich das raus, aber dann hab ich immer noch nicht deine Fehlermeldung, um die's ja geht

Gantenbein
10.09.2007, 14:04
Ich habs..endlich nach einer Woche.
$include "Config_MMC.BAS"
$include "CONFIG_AVR-DOS.BAS"
habe ich einfach mal gleich zu anfang des Programms eingebunden.
Der fehler war wohl, dass vorher es wohl irgendeinen Aufruf gegeben haben muß der ähnlich auch in einer der beiden Libaries dazu existiert. Das heißt, dass das Programm dann wohl durcheinander kommen mußte welchen er nun verwenden soll bzw. "rückwirkend" einen anderen verwenden wollte. Was das genau für ein Befehl ist der nun er Übeltäter war kann ich nicht sagen. auch nicht warum das ausgerechnet bei mir passiert aber bei den allgemein geläufigen Beispielen die man so findet nicht.. aber es scheint zu gehen.
Nun ja zu gehen ist wohl zu viel gesagt, nun erscheint die fehlermeldung "File System Error" ABER das immerhin auf dem TFT Display und immerhin sorgte ICH dafür,dass so etwas erscheinen kann..jetzt muß ich nur sehen, dass auch mal ein "File System OK" erscheint.
Das scheint jedoch auch nicht so einfach zu gehen wie ich hoffte, nach auswertung der Error Code Table von AVR DOS sehe ich,dass dieser Fehler "Sector 0 on Card is not a Master Boot Record" bedeutet. Allerdings formatierte ich es aus Windows heraus als FAT und mit dem PC funktioniert diese Karte wunderbar. Meine SPI Kabel sind auch nur ein paar cm lang, so dass wohl kaum Störungen darauf kommen können.
Na wie es aussieht habe ich nun einen neuen Fehler der nicht ganz so einfach zu beheben ist.
Habe aber vielen Dank für die ganze Mühe die du dir machtest, ich muß schon sagen, dass das wirklich sehr nett war.