www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR ATmega Compiler fehlerhaft oder Denkfehler?


Autor: Herbert K. (avr-herbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
gibt es bei mir einen Denkfehler, macht der Compiler Fehler, oder macht 
der Disassembler Fehler? Code soll sein für den ATmega8

Also von R0 bis R15 sind die PUSH, POP, DEC zwar richtig, aber bei LDI 
sind die Register immer um 16 höher laut Disassembler.

Ich habe ziemlich lange in meinem eigentlichen Code gesucht und dann so 
eine merkwürdige Stelle gefunden, weil das Programm nicht läuft.

Beim Ändern auf andere Register unter R16 war das dann genau so. Darum 
habe ich mal diesen Beispielcode erstellt (der so Unsinn ist, nur zum 
Compiler / Disassembler Check).

Viele Grüße Herbert


Source:
procedure CHECK_Inline_ASM;
  begin { CHECK_Inline_ASM }
    asm
      push R0
      LDI  R0,0
      DEC  R0
      pop  R0

      push R1
      LDI  R1,$01
      DEC  R1
      pop  R1

...
...

      push R16
      LDI  R16,16
      DEC  R16
      pop  R16
    end;
  end;  { CHECK_Inline_ASM }

Ergebnis des Disassemblers (ReAVR Version 3.2.0 beta vom 23.04.2005)
  push  r0
  ldi  r16,k00
  dec  r0
  pop  r0

  push  r1
  ldi  r17,k01
  dec  r1
  pop  r1

...

ab die Register von R16 bis R31 sind dann ok:

  push  r16
  ldi  r16,k10
  dec  r16
  pop  r16


Aus dem LST Output des Compilers nur mal für R0 und R1

0x01EE  0x920F      PUSH       R0
0x01F0  0xE000      LDI        R0, 0
0x01F2  0x940A      DEC        R0
0x01F4  0x900F      POP        R0

0x01F6  0x921F      PUSH       R1
0x01F8  0xE011      LDI        R1, 1
0x01FA  0x941A      DEC        R1
0x01FC  0x901F      POP        R1

Aus dem LST Output des Compilers nur mal für R16 und R17

0x0276  0x930F      PUSH       R16
0x0278  0xE100      LDI        R16, 16
0x027A  0x950A      DEC        R16
0x027C  0x910F      POP        R16

0x027E  0x931F      PUSH       R17
0x0280  0xE111      LDI        R17, 17
0x0282  0x951A      DEC        R17
0x0284  0x911F      POP        R17

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aeh ja. Die optimierungen sind natuerlich abgeschaltet ?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

'LDI' gibt es bei den Registern r0..r15 nicht.

MfG Spess

Autor: Herbert K. (avr-herbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo @spess53,
Danke! Ich kannte die Einschränkung nicht.

Schade, das der Compiler nicht meckert und der Disassembler auch nicht.

Ich habe es aber nun auch im Datenblatt gefunden (Seite 91 DOC0856.pdf) 
falls jemand auch auf so ein Problem stößt.

Viele Grüße Herbert


LDI – Load Immediate
Description:
Loads an 8 bit constant directly to register 16 to 31.
Operation:
(i) Rd ← K
Syntax: Operands: Program Counter:
(i) LDI Rd,K 16 ≤ d ≤ 31, 0 ≤ K ≤ 255 PC ← PC + 1

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welcher Compiler ist das denn?

Autor: Herbert K. (avr-herbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Compiler: M_i_k_r_o_P_a_s_c_a_l_P_r_o_V_2_._1_0
Disassembler: ReAVR Version 3.2.0 beta vom 23.04.2005

Autor: Herbert K. (avr-herbi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Fehler LDI R0-R15 steckt auch im:
AVR Warteschleifen Generator V 1.2

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.