asm und winavr #include Fehler

OP #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?
OP #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.
#1684994
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.
OP #1685184
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.