Forum: Compiler & IDEs asm und winavr #include Fehler


von Clemens M. (panko)


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:
1
#include "avr/io.h"
2
3
extern void foo(void);
4
int main(void){
5
  while(1){
6
    foo();
7
  }
8
  return 0;
9
}

Dann habe ich eine asm.S Datei angelegt per rechtsklick im Projekt.
1
#include "avr/io.h"
2
.global foo    
3
foo:
4
  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?

von holger (Gast)


Lesenswert?

#define _ASSEMBLER_ 1

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

von Clemens M. (panko)


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

von Hc Z. (mizch)


Lesenswert?

Das
1
#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
1
#include <avr/io.h>
heißen und dass das
1
#include "avr/io.h"
eine lokale Variante einbindet, die gemeinerweise gleich benannt wurde.

von Clemens M. (panko)


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.

von Hc Z. (mizch)


Lesenswert?

Ich kann Dir verbindlich zusichern, dass alle meine *.S mit
1
#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.

von Stefan E. (sternst)


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.

von Clemens M. (panko)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.