www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega8 und call


Autor: Stevko (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: Stevko (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: crazy horse (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, sind natürlich KBytes und nicht kBytes!

Autor: Stevko (Gast)
Datum:

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

Autor: Conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die neueste Version vom Studio lautet 4.12,
eventuell mal updaten.

Es grüsst,
Arno

Autor: Stevko (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Hannes Lux (hannes)
Datum:

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

...

Autor: Stevko (Gast)
Datum:

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

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.