Hallo liebe Gemeinde, ich habe wieder mal ein spezielles Problem. Umgebung: ATMega 8-16MHz AVR-Studio 4.07 AVRASM(Hilfe) 1.56 Programmiersprache: ASM Bei dem Programm für ein Belichtungsgerät bin ich bei ca. 3k Quellcode. Somit fuktionieren manche RCALL-Aufrufe nicht mehr. Bekannte Fehlermeldung: "Außerhalb der Reichweite". Ist ja auch klar, da RCALL nur +/- 2k adressieren kann. Im Datenblatt vom Mega ist nur der Befehl RCALL aufgeführt. Aber in der AVRASM(Hilfe) wird der Befehl CALL angeblich beim Mega8 unterstützt. Also habe ich die RCALL mit CALL ausgetauscht, was mir eine Unmenge übler Beschimpfungen(ca 100) vom AVR-Studio einbrachte: "Call will not supported". Da aber die *.hex-Datei trotzdem funktioniert, habe ich das Programm weiter ausgebaut. Nur sind die "Fehlermeldungen" nervig und eigentlich sollte doch der Aufruf einer Unterroutine den ganzen Flash erreichen. Jetzt meine Frage: Unterstützt der Mega8 den Befehl Call obwohl er im Datenblatt nicht aufgeführt ist? Wird vielleicht bei neueren Mega8 nur Call unterstützt und mein AVR-Studio + Datenblatt sind zu alt? Achso, "Wrap relative Jump" bringt keine Änderung. Gruß Stevko
Bei bis zu 8 k Programmspeicher brauchste keinen call. Da reicht rcall. Das sind keine +-2kB sondern +-2kWords, also +-4kB! ATMega 8 hat 8 kB Flash, also mit nem rcall sollte es eigentlich funktionieren! Wenn nicht, dann ist irgendwo was falsch konfiguriert.
Noch was zur Förderung des Verständnisses: Der rcall-Befehl kann +-4kB ansprechen. D.h. bei Controllern mit bis zu 8 kB Flash size gibt es keinen call (4kB nach vorne und 4 nach hinten macht 8 kB!). Wenn das mit rcall nicht klappt, dann ist irgendwo in AVRStudio wahrscheinlich der falsche Controllertyp eingestellt (also einer mit 16 oder mehr kB Flash). Mal bei Configuration Options nachsehen. Kleiner Tip: Im Datenblatt des Controllers steht hinten immer ein Instruction Set Summary drin. Da steht auch, welche Befehle für den Controller überhaupt zur Verfügung stehen.
Hallo jonny.m, Du verwirrst mich etwas. 1) In meinem Datenblatt ist im "Instruction Set Summary" kein! CALL aufgeführt, wurde aber von mir schon beschrieben. 2) Das RCALL welches angemeckert wurde,!und nur dieses!, habe ich durch CALL ersetzt und das Programm lief. Erst später wegen der wachsenden Programmgröße wurden alle RCALLs ausgetauscht. 3) Bereich 4kByte: Ok bei 675Byte rufe ich eine Routine mit RCALL auf dessen Adresse bei 6700Byte liegt. Wie wird dies geregelt? 4) Es ist definitiv der Mega8 mit 2MHz eingestellt und nicht der Mega32, welcher mein Liebling ist. Bitte jonny.m kläre mich auf.
zu 1) Genau, es ist kein call aufgeführt. Es geht also im Prinzip nur rcall! zu 2) Warum AVRStudio dann meckert, kann ich so direkt nicht nachvollziehen. zu 3) 8192 Bytes-6700Bytes = 1492Bytes 1492Bytes + 675Bytes = 2167Bytes Der Programmzähler zählt ja zyklisch. Bei einem Overflow oder Underrun zählt er ja trotzdem weiter, in dem Fall von 675 rückwärts bis auf null und dann von 8192 bis 6700. Macht 2167 Bytes. Und das ist weniger als 4kBytes! zu 4) Ich kanns mir so nicht erklären. Und wenn alles korrekt konfiguriert ist, weiß ich auch nicht weiter
es gibt keine Adresse 6700 (=0x1A2C). Die höchste Programmspeicheradresse ist 0xfff=4095dez. Die Programmspeichergrösse ist in kB (8bit)angegeben, der Speicher aber 16bit breit. Mit der Folge, dass es eben nicht 8192 Adressen gibt, sondern nur 4096. Und dafür braucht es nur eine 12bit-Adresse, und die passt in den rcall-Befehl. Fest steht, Typen die nur rcall/rjmp haben, erreichen damit ihren gesamten Programmspeicher. Und die Grenze liegt eben genau bei 8kB. Grössere bieten zwar auch den rcall/rjmp, da damit aber nicht der gesamte Speicher direkt erreibar ist, gibt es zusätzlich die call/jmp-Befehle.
@jonny.m & @crazy horse Danke für die Aufklärung. Das mit dem zyklischem Programmspeicher habe ich völlig außer Acht gelassen, sorry. Nach Eurer Erklärung verstehe ich zwar warum RCALL ausreicht, aber nicht weshalb bei mir Fehlermeldungen produziert wurden. Wie gesagt, ich habe nur das RCALL gegen CALL ausgetauscht und und nicht den Namen des Sprungzieles verändert. Habe hier auf Arbeit das neuste AVR-Studio installiert und ein kleines DummyProgramm geschrieben, natürlich mit CALL. Mit dieser Version erscheint die gelbe Fehlermeldung: "Call will not supported" überhaupt nicht! Bin mir gar nicht mehr so sicher, ob ich zu Hause wirklich Version 4.07 habe, sondern eine eher eine etwas ältere. Werde heute Abend(falls genügend Zeit) zu Hause wieder alle CALL gegen RCALL austauschen und wo er meckert die Spungadressen notieren. Mehr fällt mir auch nicht ein. Gruß Stevko
Hallo, die neueste Version vom Studio lautet 4.12, eventuell mal updaten. Es grüsst, Arno
ok, ich bin wahrscheinlich verflucht! Habe gestern Abend alle CALL gegen RCALL ausgetauscht und es kam keine Fehlermeldung mehr! Na das hat mich schon gewundert, zumal ich das Programm ja noch erweitert habe. Aber, als der oben genannte Effekt auftrat habe ich natürlich eine Sicherungskopie vom Projekt erstellt. Also das Backupprojekt ins AVR-Studio und das einzigste CALL wieder durch RCALL ersetzt. Das Projekt war somit im selben Zustand wie Montagabend, als mich die Fehlermeldung: "RCALL außerhalb der Reichweite" mich fast in den Wahnsinn getrieben hatte. Und siehe da, es kam keine Fehlermeldung mehr! Der einzigste Unterschied zu Montagabend war der Neustart des Rechners. Danke an Alle die geholfen haben. Gruß Stevko
:-) Willkommen im Club. Der nächste Zeitpunkt an dem ein solcher oder ähnlicher Effekt zu erwarten ist, ist wenn Du das Projekt das erste mal dem Kunden zeigst. Stichwort: "Hmm, ich versteh das nicht. Gestern gings noch".
> war der Neustart des > Rechners. Das kann ich bestätigen. AVR-Studio (besonders mit aufgerufenem Simulator) reagiert manchmal merkwürdig. Zum Speichern reicht es aber meist noch. Nach einem Neustart ist alles wieder ok. Es laufen aber neben AVR-Studio meist noch Speedcommander, PDF-Reader mit Datenblatt, Mailprogramm, Browser, DOS-Box mit ISP-Programmer... ...
@Karl Heinz: naja im Club bin ich eigentlich schon, aber in einer anderen Sparte -> Datenbanken für PC. Meine "Absicherung" gegen den Oha-Effekt sind 6 schaltbare Platten, wie Platte_1 nur für Programmierung, Platte_2 für persönliche Dinge, Platte_3 für Linux,..., Datenplatte, Testplatte! Auf der Testplatte installiere ich (fast)die gleiche Software wie der Kunde, installiere dann meine Datenbank und teste. @HanneS: Das AVR-Studio läuft bei mir z.Z. auf einer separaten Platte, wo nur Win_98 und Mini-Office installiert ist. Aber auch da kommt es manchmal zu unerklärlichen Phänomenen. Was mir aufgefallen ist: AVR-Sudio + AVRASM(Hilfe) und AVR-Sudio-Simulator in der Startphase. Simulator 3-5x benutzt dann hängt sich das AVR-Studio auf, aber es wird wenigstens noch gespeichert. Das gleiche ohne AVRASM(Hilfe) im Hintergrund kann ich den Simulator beliebig oft starten, es gibt keine Probleme. Aber solange es nur diese Kleinigkeiten sind will ich nicht klagen, bis auf das verfluchte RCALL-Problem. :-) Gruß Stevko
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.