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
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. ;-)
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
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
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.
Die Initialisierung des Stacks wird durch das 'rjmp reset' einfach übersprungen, Du mußt das Label 'Reset:' zwei Befehle höher setzen.
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.