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

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.

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.