Bug oder Feature?

OP #725981
Hallo an alle,

es geht um einen möglichen Compilerfehler des avr-gcc bzw. der avr-libc. 
Die Schaltung hat den ATMEGA32 auf dem Evaluationsboard 2.0 von Pollin. 
Angesprochen werden soll die Leuchtdiode auf PortD.5.

Folgendes Progrämmchen (avr.S)
1
#include <avr/iom.h>
2

3
.text
4
.global main
5

6
main:
7
  ldi r16, (1 << PORTD5)
8
  out DDRB, r16
9
  out PORTD, r16
10
  ret

wird  durch
> avr-gcc -Os -mmcu=atmega32 -I/usr/avr/include -o avr.elf avr.S
so übersetzt:
1
...
2
main:
3
  ldi r16, 0x20
4
  out 0x31, r16
5
  out 0x32, r16
6
  ret

Problem sind die Registeradressen von DDRD und PORTD: sie entsprechen 
nicht 0x11 und 0x12 der Headerdefinition, was aber die richtigen 
Addessen wären!

Ich nutze avr-gcc 3.4.3 und die dazugehörige avr-libc des Ubuntu Dapper 
Drake Pakets und wollte dabei bleiben...

Hat jemand eine Idee?
Dragan Isakovic wrote:
> Hallo an alle,
>
> es geht um einen möglichen Compilerfehler des avr-gcc bzw. der avr-libc.

No. Schau in das File sfr_defs.h
Da findet sich die Erklärung.

-> Falsche Verwendung deinerseits
1
#include <avr/io.h>
2

3
.text
4
.global main
5

6
main:
7
  ldi r16, (1 << PORTD5)
8
  out _SFR_IO_ADDR(DDRB), r16
9
  out _SFR_IO_ADDR(PORTD), r16
10
  ret

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.