mikrocontroller.net

Forum: Compiler & IDEs asm und winavr #include Fehler


Autor: Clemens M. (panko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Angemeldet und rastlos, doch zunächst ein offizielles 'hallo'.

Die Verwendung einer asm Funktion in einem c-Projekt hat mir (doch) 
keine Ruhe gelassen und ich habe zumindestens das grundsätzliche 
ausprobiert. Dabei gibt es schon Probleme.

Ich habe hier ein avr studio Projekt, verwalte also kein eigenes 
makefile. Ein main.c liegt vor, recht leer:
#include "avr/io.h"

extern void foo(void);
int main(void){
  while(1){
    foo();
  }
  return 0;
}

Dann habe ich eine asm.S Datei angelegt per rechtsklick im Projekt.
#include "avr/io.h"
.global foo    
foo:
  ret

Eigenltich wollte ich das #include im Hinblick auf spätere Verwendung 
der SFRs einfach schon mal hinschreiben, aber gerade das macht Ärger und 
provoziert einen Fehler: C:/WinAVR/avr/include/stdint.h:117: Error: 
unknown opcode `typedef'

Was habe ich denn nur so weit schon falsch gemacht?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define _ASSEMBLER_ 1

#include "avr/io.h"
.global foo
foo:
  ret

Autor: Clemens M. (panko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade, wäre eine fixe und plausible Lösung, aber es ändert sich nichts. 
Bekomme immer noch

C:/WinAVR/avr/include/stdint.h: Assembler messages:
C:/WinAVR/avr/include/stdint.h:116: Error: unknown opcode `typedef'


Irgendeine blöde Einstellung am Projekt könnte es nicht sein? Ich wollte 
auch schon nur die iomx8.h alleine einbinden weil es ja nur um die SFRs 
geht. Wird aber ja vehement von abgeraten und ja sogar mit Fehler 
abgebrochen.
Was mich wundert: ich habe von dem Problem des typedefs in stdint.h 
durch io.h einbinden  so gar nichts finden können, wohl aber den 
besagten include... (ok #define ASSEMBLER 1 hatte ich aber auch noch 
nicht in diesem google gesichtet)

Noch eine zündende Idee?

P.S. Ach ja:
AVR Studio    4.15.623
GUI Version    4, 15, 0, 623
AVR Simulator    1, 0, 2, 1
ATMEGA88    232

Operating System
Major      5
Minor      1
PlatformID    2
Build      2600
Service Pack 3

Plugins:

AvrPluginAvrAsmObject  1, 0, 0, 47
AvrPluginavrgccplugin  1, 0, 0, 10

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das
#define __ASSEMBLER__ 1
sollte überflüssig sein, denn das definiert der gcc schon selbst und 
#defines mit Doppel-Underline sollten auch dafür vorbehalten sein.

Mich wundert doch sehr, dass stdint.h eingebunden wird.  Ich denke, es 
muss
#include <avr/io.h>
heißen und dass das
#include "avr/io.h"
eine lokale Variante einbindet, die gemeinerweise gleich benannt wurde.

Autor: Clemens M. (panko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich vielleicht jemanden anstiften, das Ganze mal nachzustellen? 
Also ein main.c und exasm.S über Avrstudio zu erzeugen und das Ergebnis 
zu posten?
Vielleicht hilft das dann weiter - in spitzen Klammern brachte der 
include nämlich auch nichts.

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kann Dir verbindlich zusichern, dass alle meine *.S mit
#include <avr/io.h>
beginnen (und ohne #define __ASSEMBLER_- oder so was).  Und das sind 
nicht wenige.  Wenn Dein Include-Verzeichnis nicht über'n Jordan ist: 
zeige mal die Kommandozeile, mit der die *.S übersetzt wird.  Vielleicht 
findet sich ja was.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Clemens M. schrieb:
> Kann ich vielleicht jemanden anstiften, das Ganze mal nachzustellen?
> Also ein main.c und exasm.S über Avrstudio zu erzeugen und das Ergebnis
> zu posten?

Am besten dann den ganzen Projekt-Ordner zippen und posten.

Autor: Clemens M. (panko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

ich habe das selbe gerade eben noch mal auf einem anderen Rechner 
probiert und das Problem dort nicht gehabt...
Möglicherweise ist meine Installation zu Hause im Eimer, ich werd das 
noch mal überprüfen, vielleicht noch mal mit einer Neuinstallation der 
Tools probieren.
Besten Dank für die Tips und Ratschläge.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.