Hallo NG, jetzt habe ich es hinbekommen, dass mein Display (HD44780) initialisiert wird. Nachdem die Funktionen für Kommandos und Datensenden ans Display die gleichen sind, mit der Ausnahme, dass RS LOW oder HIGH ist, habe ich mir gedacht, das Ganze einfach zu kopieren. Ich arbeite komplett mit Sub-Routinen. Leider funktioniert mein Code nicht mehr, auch wenn ich die neue Funktion ganz ans Ende schreibe. Es wird zwar alles Assembliert (ohne Fehler) aber sobalt ichs auf den AT91SAM7S256 übertrage funktioniert es nicht mehr, obwohl ich den Code (am Ende) ja noch nicht mal "anspringe". Was kann denn das sein? Ich habe mal meinen Quelltext, so wie er funktioniert angehängt. Sobalt ich allerdings ein paar Zeilen hinzufüge geht nichts mehr... Bin für jeden Tip dankbar! Peter PS.: die Wartezeiten sind für meine Versuchszwecke gerade sehr hoch eingestellt!
@mthomas Ich habe keinen Stack definiert. Brauche ich denn unbedingt einen? Habe bisher noch keinen Bedarf gehabt. Sind im Code denn Befehle, die einen Stack voraussetzen? @Obelix Ich habe open-ocd am laufen. Mich verwundert nur, warum der Code so wie er ist funktioniert und das Display initialisiert wird. Nur wenn ich zusätzlichen Code am Ende anfüge geht gar nichts mehr, obwohl der Code ja nicht mal benützt wird :-( Wie würdest Du vorgehen, um den Fehler zu finden?
Hallo NG, also ich weiß nicht, ob ich mich falsch ausgedrückt habe. Aber: Ich habe ein Problem. Es klappt jetzt eigentlich alles, bis auf dass ich meinen Code nicht erweitern kann. Der Code, so wie er ist läuft. Aber sobald ich auch nur ein paar neue "waits" am Ende einbaue läuft der Teil am Anfang, der ja jetzt schon läuft, leider nicht mehr... Kann mir nicht jemand einen Tip geben? Ich finde echt nichts, woran das liegt... Speicher sollte ja noch en mass vorhanden sein (binfile ist so um die 360 Bytes)...
Wenn openOCD läuft, kannst du doch schon single-steppen, oder hab ich das falsch in Erinnerung? Mit halt-after-reset o.ä. kann man direkt am Anfang der Codeausführung stehen bleiben und dann Schritt für Schritt schauen, was passiert. Ich persönlich würde dir auch zu gdb/ddd/insight in Kombination mit openOCD raten. Hat bei mir immer gut funktioniert.
Könnte mir vielleicht jemand ein "Template" für die IAR Workbench geben, mit dem ich meine 64KB Code passend für den AT91SAM7S256 assemblieren kann?
Tun die Borgs nicht assemblieren ? ;-) Ach ne - sie assimilieren Lang lebe das Kollektiv
Hallo NG, ich bekomme es einfach nicht zum Laufen :-( Jetzt habe ich mal einen map-File erzeugen lassen. Vielleicht kann mit ja jemand sagen, ob da was nicht stimmt... Als xcl verwende ich die at91SAM7S256_RAM.xcl, aus den Examples. Das Binary lade ich dann via Samba nach 0x200000. Mit go 200000 starte ich dann das Programm. Jedoch funktioniert das nicht mehr, wenn der Code >ca.400 Byte ist. Ein kleiner Tip würde mich sehr freuen. Peter
Err, kann sein, dass du teile von samba überschreibst, die im ram liegen. Nimm openocd, wo du es doch eh schon am laufen hast.
@Frank: ist es definitiv so, dass Teile von SAM-BA im SRAM liegen? Wenn ja, wo liegen die denn? MfG Peter
Hallo Peter, ich weiß nicht mehr wo ich es las, aber seit ich meine SRAM-Programme auf Adresse 0x202000 lege, habe ich mit SAM-BA keine Probleme. Gruß, Greg.
@Greg danke für Deinen Hinweis. Reicht es, wenn ich einfach die Binary in SAM-BA nach 0x202000 lade und mit go 0x202000 starte, oder muss ich dazu im Linker oder sonstwo noch etwas beachten?
Nachdem man mit SAMBA das komplette flash beschreiben kann, müss es zwangsweise im ram liegen. Die "Lösung", dein Programm einfach weiter hinten ins ram zu laden, mag kurzfristig funktionieren, tut es aber garantiert nicht auf Dauer. Größere Programme -> absolute Adressierung. Oder meinetwegen auch Interrupts und deren feste Position am Anfang des Adressraums. Ohne das böse zu meinen: Deine Probleme sind hausgemacht. SAMBA ist für die Tonne oder erste Tests nach der Inbetriebnahme. Nimm openOCD (gerne mit gdb/ddd oder Insight) und gut. Das funktioniert 1a und kostet mich nur ein make all debug, bzw make all program debug, wenn es im flash landen soll. Integration in beliebige IDEs sollte sich machen lassen, mein Favourit ist aber immer noch der VI(M).
Hey Kinder! Ihr seid spitze! Vielen Dank! @Greg an 202000 funktionierts ohne Probleme... @frank Ich würde es auch gerne mit openOCD machen. Aber mein Rechner ist einfach zu weit weg vom ARM :-( Irgendwann, wenn ich mal ne eigene Bastelecke habe, werde ichs so machen! Danke nochmal an alle!
>Aber mein Rechner ist einfach zu weit weg vom ARM :-(
Muss man das verstehen? Mit SAMBA brauchst doch auch ein USB-Kabel.
Damit könnte man auch ein USB-JTAG interface betreiben.
Auch mit meinem Wiggler klappt das selbst über 1 m Flachbandkabel
langsam aber problemlos. Glaub mir, du wirst es nicht bereuen. :)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.