Forum: Compiler & IDEs ATxmega Hello World Compiler generiert nonsense?


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Malte _. (malte) Benutzerseite


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
}

von martin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Abend,
alles mögliche an Hilfe und Beispielen zum ATXmega findest du hier:
http://www.jtronics.de/avr-projekte/xmega-tutorial.html
Unter jedem Thema gibt es auch ein fertiges Programm mit Projektdatei 
zum Download.

von Johann L. (gjlayde) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Malte __ schrieb:
> Außerdem wird -mno-interrupts ebenfalls ignoriert.

Der Code sieht nicht so aus, als hätte er irgendwas, worauf dieser 
Schalter einen Effekt haben würde, z.B. Ändern von SP beim Anlegen / 
Abbauen eines Frames.

von Malte _. (malte) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir das Listing noch mal angeschaut. Der Assembler sieht doch 
korrekt aus. Nur die Kommentare sind doppelt, weil der Compiler die 
einzelnen Aufrufe neu verteilt. Das Ignorieren von -mno-interrupts
(siehe http://gcc.gnu.org/onlinedocs/gcc/AVR-Options.html) bleibt aber 
bestehen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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.

von Malte _. (malte) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Hmm dann hab ich die Option wohl falsch verstanden. Ich hätte erwartet, 
dass dann die Interrupt Sprungtabelle am Anfang des Flash weg optimiert 
wird und dort stattdessen direkt der Code von __ctors_end steht.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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

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]
  • [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.