*gelöst* Magische Zahl ($3A)

Fragen zu Programmiersprachen und Software für den Hive und die Propellerchips
Antworten
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

*gelöst* Magische Zahl ($3A)

Beitrag von Rainer »

Wahrscheinlich @drohne235:

Ich habe ein ganz eigenartiges Problem an dem ich jetzt den ganzenTag schon rummache.

Ich lösche das SRAM von Adresse 0 bis 511 mit folgendem Code:

Code: Alles auswählen


     repeat c from 0 to 511
         ios.ram_write(0,c)
Es wird alles richtig auf 0 gesetzt, nur die Adresse $0 nicht. Ich kann machen was ich will, die ist immer auf $3A.
Ich kriege noch die Krise :(
Ich habe alles durchgesehen. Alle Objekte die ich benutze, das komplette Programm ... ich schreibe diesen Wert nicht.
Auch wenn ich mit "rtool" die Speicherstelle 0 auf 0 setze, habe ich sofort die $3A wieder an Speicherstelle 0 sobald ich mein Programm starte.
Ich habe einen Breakpoint in meinem Programm gesetzt gleich nach der Initialisierung. Der Wert wird also nicht irgendwo dahinter geschrieben.

Einlesen tue ich es so:

Code: Alles auswählen

VAR
      byte ram_buffer[31]

PUB blabla
  ..
  ..
  repeat c from 0 to 31
    ram_buffer[c] := ios.ram_read(c)
Debuggen tue ich es damit:

Code: Alles auswählen

  repeat c from 0 to 31
    ios.printhex(ram_buffer[c],2)
Ich weiß echt nicht mehr weiter.
Jemand eine Idee ? Wo übersehe ich etwas ?

@drohne235: Kommt Dir der Wert $3A irgendwie "bekannt" vor ?

Gruß.
Rainer
Zuletzt geändert von Rainer am Mo 10. Aug 2009, 16:17, insgesamt 1-mal geändert.
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

Re: Magische Zahl ($3A)

Beitrag von Rainer »

Komisch.

Ich habe jetzt das Array auf Wortbreite geändert.
word ram_buffer[31]

Jetzt gehts ... aber erklären kann ich mir das nicht wirklich.

Daten mit einer Byte Breite sollten doch eigentlich auch in ein Array mit Bytebreite passen, oder habe ich da einen Denkfehler ?
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: Magische Zahl ($3A)

Beitrag von drohne235 »

Geh mal davon aus das der Fehler noch nicht weg ist, dass es jetzt grad läuft ist Zufall denk ich. Ich würde wahrscheinlich erstmal einen kleinen SPIN-Testcode in einer anderen Datei machen um es einzugrenzen. Ansonsten hilft es nur alle ram_write Zugriffe mal durchzuschauen oder eine kleine Debugroutine welche die Adresse 0 überwacht an neuralgischen Punkten einzufügen um erstmal einzugrenzen an welcher Stelle im Code sich der Wert ändert. Vielleicht gleich zu Anfang in main die Speicherstelle auf 0 setzen.

Mir selbst ist das schon mal bei meinen PASM-Experimenten passiert als ich die Zugriffszeiten der RAMs nicht beachtet hatte. Ich hatte gleich nach anlegen der Adresse einen Wert auf den Datenbus zum lesen/schreiben angelegt und nicht beachtet das der RAM ja seine 55 ns braucht. So wurde in einer Schleife die ab Adresse 0 anfing auch erst ab Adresse 1 geschrieben. Da hab ich auch einen ganzen Sonntag gesucht. Hast du irgendwelchen PASM-Code drin für den Ramzugriff oder allgemein eigenen Code der am Bus "rumwackelt".

Ansonsten ist $3A == ":" - taucht das Zeichen irgendwo im Programm auf?

Hmm, hab jetzt mal mit rtool die ersten acht Speicherzellen auf definierte Werte gesetzt - das bleibt bei mir in allen Lebenslagen stabil. Selbst nach Reset, wplay, hallo, play, sview...

Sach mal, verwendest du schon dein modifiziertes regime?
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

Re: Magische Zahl ($3A)

Beitrag von Rainer »

drohne235 hat geschrieben:
Ansonsten ist $3A == ":" - taucht das Zeichen irgendwo im Programm auf?

Hmm, hab jetzt mal mit rtool die ersten acht Speicherzellen auf definierte Werte gesetzt - das bleibt bei mir in allen Lebenslagen stabil. Selbst nach Reset, wplay, hallo, play, sview...

Sach mal, verwendest du schon dein modifiziertes regime?
Vielen Dank für Deine Tests.
Du hast Recht. Da ist irgendwas faul in meinem Code.....und ja, ich verwende "mein" Regime,aber Regim nehme ich ja nur zum starten meiner Anwendung Da die auch noch einen eigenen Grafiktreiber mitbringt ist da während der Laufzeit nichts mehr von Regime übrig. Ich habe aber auch den kompletten HIVE bei meinen Tests auf "Grundkonfiguration" geflashed und das "alte" Regime genommen.
Hat an dem Problem nichts geändert.

Das Problem liegt übrigens weder im RAM, noch in den eigentlichen Routinen, sondern einzig und allein in der definition des Arrays ... da ist nämlich überhaupt kein $3A im RAM, sondern das Array hat irgendwie eine falsche Startadresse im Hubram und zeigt mir einfach nur $3A als Wert an, der sich an dieser "falschen" Adresse befindet. Da ich in array[0] auch mit Gewalt keinen anderen Wert schreiben konnte gehe ich mal davon aus, ich befinde mich da im ROM oder auf einem Nur-Lesen-Register.
Durch das "word" habe ich es irgendwie wieder auf die "Bytegrenze" (oder long .. k.A.) gebracht.
So blöde das auch klingt.
Kann es sein, das ich Probleme mit dem Stack oder sowas habe ?
Jede Variable oder Array, die ich in der VAR-Sektion NACH "meinem" Array einfüge, ist mit eigenartigen Werten vorbelegt.
Wenn ich eine Variable VOR "meinem" Array einfüge, ist alles ganz normal.
Irgendwie werde ich das Gefühl nicht los, daß ich aus irgendeinem Grund "aus der Schrittweite" der Bytegrenzen gekommen bin. Ich kann nämlich nach "meinem" Array einfach eine Byte-Variable einfügen (die dann "spinnt"), aber danach kann ich wieder Variablen einfügen, die richtig funktionieren.

Ich weiß, klingt total bescheuert, aber ich kanns nicht besser erklären.
Vielleicht kann ich es mal an einem einfachen Source nachstellen und dann hier posten.
Das mit dem Stack werde ich mir morgen mal ansehen.

Gruß.
Rainer
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
BorgKönig
Beiträge: 598
Registriert: So 24. Mai 2009, 11:24

Re: Magische Zahl ($3A)

Beitrag von BorgKönig »

Zeig' den Source, der das Problem verursacht... Vieleicht findet jemand die Stelle, an dem Du den zulässigen Bereich verlässt...
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

Re: Magische Zahl ($3A)

Beitrag von Rainer »

Hab's gefunden.
Ich habe in das Array das ich direkt darüber deklariert habe außerhalb des Bereiches geschrieben.

Code: Alles auswählen

VAR

  byte slider_pos[11]                                   
  byte ram_buffer[31]                                   

PUB main |i,c
......
  repeat c from 1 to 12
        slider_pos[c] := 0
.....
Also statt von 0 bis 11 schreibe ich von 1 bis 12 ... und das ist außerhalb des Arrays
Blöder Fehler *grml*

Danke für eure Mühe.

Gruß.
Rainer
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
Benutzeravatar
drohne235
Administrator
Beiträge: 2284
Registriert: So 24. Mai 2009, 10:35
Wohnort: Lutherstadt Wittenberg
Kontaktdaten:

Re: *gelöst* Magische Zahl ($3A)

Beitrag von drohne235 »

Also statt von 0 bis 11 schreibe ich von 1 bis 12 ... und das ist außerhalb des Arrays
Ist aber interessant. Damit wird auch klar warum die nachfolgenden Variablen nicht funktioniert haben - die wurden einfach überschrieben.
"Ob Sie denken, dass Sie es können, oder ob Sie denken, dass Sie es nicht können - in beiden Fällen haben Sie recht." Henry Ford
DJLinux

Re: *gelöst* Magische Zahl ($3A)

Beitrag von DJLinux »

Wenn Du mit slider[12]=0 über die Arraygrenze hinaus geschossen bist dann müste aber in ram_buffer[0] eine 0 stehen und keine $3A oder hab ich da was nicht mit bekommen?

Grüsse Joshy
Benutzeravatar
Rainer
Beiträge: 510
Registriert: Fr 29. Mai 2009, 16:11

Re: *gelöst* Magische Zahl ($3A)

Beitrag von Rainer »

DJLinux hat geschrieben:Wenn Du mit slider[12]=0 über die Arraygrenze hinaus geschossen bist dann müste aber in ram_buffer[0] eine 0 stehen und keine $3A oder hab ich da was nicht mit bekommen?

Grüsse Joshy
In slider_pos steht nicht wirklich eine 0 ... das war nur der Code zum löschen des Arrays.
Das sind Positionen am Bildschirm der Schieberegler für meine SFX-Anwendung.

Die Zelle wird später dann mit --> slider_pos[12] := 58 beschrieben.... und schon haben wir den magischen Wert $3A :)

Sorry für die Verwirrung.

Gruß.
Rainer
"Wer andauernd begreift, was er tut, bleibt unter seinem Niveau."
DJLinux

Re: *gelöst* Magische Zahl ($3A)

Beitrag von DJLinux »

Rainer hat geschrieben:...Sorry für die Verwirrung...
Kein Problem wollte nur wissen ob ich da etwas nicht gepeilt bekommen hatte.

Ich würde gerne auch mal über Arraygrenzen "schießen" doch leider krieg ich das RAM nicht zum laufen. Habe Pin 2 Addressleitung 16 schon nachgelöted aber ich kann so oft messen wie ich möchte Pin 2 A16 von Bank 1 hat keinen Kontakt zu A16 auf Bank 2.

Keine Ahnung wo da der Wurm drinnen steckt. (Ach ne ist ja kein Apple :lol: )

Grüsse Joshy
Antworten