asm und winavr #include Fehler

#1684929
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?
#1684956
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
#1684970
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.

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