mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mehr Code funktioniert nicht. ARM7


Autor: Peter Pippinger (axis)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: mthomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist die Stack-Initialisierung implementiert?

Autor: Obelix X. (obelix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sagt denn dein Debugger?

Autor: peter pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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?

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)...

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Seven-of-Nine (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tun die Borgs nicht assemblieren ? ;-)

Ach ne - sie assimilieren

Lang lebe das Kollektiv

Autor: Peter Pippinger (axis)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Err, kann sein, dass du teile von samba überschreibst, die im ram 
liegen. Nimm openocd, wo du es doch eh schon am laufen hast.

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Frank:
ist es definitiv so, dass Teile von SAM-BA im SRAM liegen? Wenn ja, wo 
liegen die denn?

MfG
Peter

Autor: Greg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Peter Pippinger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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?

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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).

Autor: Peter Pippinger (axis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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. :)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.