4433 bleibt bei rcall stehen

Gast #88016
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
Angehängte Dateien:
Gast #88017
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. ;-)
Gast #88020
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren