ATxmega Hello World Compiler generiert nonsense?

OP Persönliche Seite #3538886
Lesenswert?

Hallo,
ich bin dabei ein Minimalbeispiel für den ATxmega zum laufen zu 
bekommen. Der generierte Code hat eine Größe von 612 Byte.
Wenn ich mir das Assembly listing ansehe, ist da aber der Code jeweils 
doppelt drinn. Außerdem wird -mno-interrupts ebenfalls ignoriert.
Installiert habe ich den gcc und avr-libc vom aktuellen Debian.
Was läuft da falsch? Eventuell liegt das an den Aufrufen im Makefile?
1
/*
2
 * blinky.c
3
 *
4
 */
5

6
#define F_CPU 2000000
7

8
#include <avr/io.h>
9
#include <util/delay_basic.h>
10

11

12
void waitms(uint16_t ms) {
13
  while (ms) {
14
    _delay_loop_2(500); //4 cycle per loop 2MHz -> 1ms: 500 loops
15
    ms--;
16
  }
17
}
18

19
int main(void)
20
{
21
  //toggle PE2 and PE3
22
  PORTE.DIR = 0x0C;
23
  PORTE.OUT = 0x04;
24
  while(1) {
25
    PORTE.OUT = 0x0C;
26
    waitms(500);
27
    PORTE.OUT = 0x04;
28
    waitms(500);
29
    PORTE.OUT = 0x08;
30
    waitms(500);
31
  }
32
}
Angehängte Dateien:
Moderator Persönliche Seite #3538976
Lesenswert?

Malte __ schrieb:
> Ich habe mir das Listing noch mal angeschaut. Der Assembler sieht doch
> korrekt aus.

Dann sieh dir doch in Zukunft lieber den generierten Assemblercode
statt eines Disassembler-Listings mit irgendwie mehr oder minder
unpassend drin verteiltem Quellcode an.

> Das Ignorieren von -mno-interrupts
> (siehe http://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html) bleibt aber
> bestehen.

Dazu hat Johann dir ja bereits geschrieben, dass da gar nichts ist,
was zu ignorieren (oder zu honorieren) wäre.
Moderator Persönliche Seite #3541950
Lesenswert?

Malte __ schrieb:
> Ich hätte erwartet, dass dann die Interrupt Sprungtabelle am Anfang des
> Flash weg optimiert wird

Die kommt gar nicht vom Compiler, sondern aus dem runtime startup
file der Bibliothek.

Wenn du diese partout loswerden möchtest, dann müsstest du dein
eigenes startup file schreiben und linken lassen und mit
-nostartfiles verhindern, dass die entsprechenden Teile der Bibliothek
genutzt werden.  Solange man aber nicht gerade völlig "auf Kante"
arbeitet und auch noch die letzten paar Dutzend Bytes Flash nutzen
muss, die sonst von der Vektortabelle belegt werden, würde ich diese
Variante persönlich meiden.

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