Forum: Mikrocontroller und Digitale Elektronik 4433 bleibt bei rcall stehen


von Stefan Kneller (Gast)


Angehängte Dateien:

Lesenswert?

Tagchen zusammen,

ich beschäftige mich schon einige Zeit mit Assembler auf den
Controllern 1200, 8535 und Mega16 von Atmel. In der Regel klappt auch
das meiste, was ich so anstelle. Nun möchte ich einen 4433, der noch
hier rumliegt, unter anderem als Betriebsstundenzähler mit
gemultiplextem LED-Display einsetzen. Ich habe zwei Probleme, die im
Umgang mit anderen Controllern bisher nicht aufgetaucht sind:
bei meinem kurzen Testprogramm können keine Unterprogramme aufgerufen
werden, sondern es bleibt beim Befehl rcall stehen.
Im AVR-STUDIO 3.5 bleibt das Programm im Einzelstepmodus auch dort
hängen im Multistep läuft es jedoch korrekt.

und zweitens
wenn ich die Unterprogrammaufrufe weglasse oder durch entsprechenden
Code ersetze, läuft das Programm. Lasse ich am Ende des Programmes den
rjmp start-Befehl weg, dann läuft das Programm trotzdem in einer
Endlosschleife. Rausgefunden habe ich schon, dass es dann am Ende über
die Reset-Adresse wieder einspringt. Aber warum ? Was sind meine
Denkfehler ?

Ich weiss nicht mehr weiter und stehe kurz vor dem Entsorgen/Zerstören
des Controllers.
Mit einem Mega 8 wäre das sicher nicht passiert.

Stefan Kneller

von Jörg Wunsch (Gast)


Lesenswert?

Die nicht funktionierenden Calls klingen nach einem falsch
initialisierten Stack.

Was soll das Programm denn am Ende machen?  Die CPU kann ja nicht
einfach ,,anhalten'', sondern sie führt stur einen Befehl nach dem
anderen aus.  Den Zustand ,,es gibt keinen Befehl mehr'' gibt's ja
nicht: irgendwas steht immer im ROM.  Der gelöschte ROM enthält das
Bitmuster 0xffff, das (undokumentierterweise) wie NOP behandelt wird.
Damit wird der ungelöschte ROM praktisch stillschweigend vom
Befehlszähler durchlaufen, bis Du wieder von vorn beginnst.

> Ich weiss nicht mehr weiter und stehe kurz vor dem
> Entsorgen/Zerstören des Controllers.

Vielleicht solltest Du lieber über einen Compiler nachdenken, der Dir
die Trivialfehler dieser Art vermeidet. ;-)

von Nik Bamert (Gast)


Lesenswert?

Ja, vielleicht funktioniert's mit dem neuen Avrstudio 4 ja..(?)
siehe:http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725

MFG Nik

von Peter D. (peda)


Lesenswert?

Das ist doch kein 8051.
Beim AVR mußt Du immer den Stack setzen, der zeigt nach einem Reset in
den Wald.

Und bei den größeren SPH nicht vergessen.


Peter

von Stefan Kneller (Gast)


Lesenswert?

OK, dass der Controller nicht einfach an dem Punkt anhält, ab dem keine
weiteren befehle stehen und den gesamten FLASH-Speicherbereich
abarbeitet, leuchtet ein.
Aber warum springt er nicht in die Unterprogramme. Ich bin der festen
Meinung, den SP richtig initialisiert zu haben.

;***** Include if used on device with RAM

  ldi  temp,low(RAMEND)
  out  SP,temp

Für den Kleinen 4433 gibt es doch nur eine 8bit-Adresse, oder ?

Stefan K.

von René König (Gast)


Lesenswert?

Die Initialisierung des Stacks wird durch das 'rjmp reset' einfach
übersprungen, Du mußt das Label 'Reset:' zwei Befehle höher setzen.

von Stefan Kneller (Gast)


Lesenswert?

Danke René,

genau das war es. Wie konnte ich nur so blind sein.

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
Noch kein Account? Hier anmelden.