Bug oder Feature?

OP #725981
Lesenswert?

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?
#726009
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren