Forum: Mikrocontroller und Digitale Elektronik #define Bekanntgaben in .s Dateien


von Jan H. (janiiix3)


Angehängte Dateien:

Lesenswert?

Hallo,

ist es irgendwie möglich eine Headerdatei z.B "x.h" in "y.s" zu 
inkludieren?
Wenn ich das so versuche wie im Anfang zu sehen, kommen div. Fehler..
Was mache ich falsch?

Kleine Ausschnitt ( alles andere steht in der Datei.. )
1
#include <avr\io.h>
2
3
#include "Bootloader.h" // Hier läuft was schief?
4
5
/*
6
*  Das ganze soll hier bekanntgegeben werden, ohne das ich es in diese Datei schreiben muss..
7
*
8
*/
9
#define   BOOT_SECTION_START_IN_BYTES    0x40000UL
10
#define   BOOT_PAGE_SIZE          512
11
#define   APP_PAGE_SIZE            512

von Johannes S. (Gast)


Lesenswert?

.s sind Quellen für den Assembler, .h sind Definitionen für C/C++, das 
sind verschiedene Sprachen.
Assembler Definitionen sind in .inc Dateien zu finden.

von Jim M. (turboj)


Lesenswert?

Zumindest der (AVR-)GCC kennt "-x assembler-with-cpp", damit wird der 
C-Präprozessor vorm Assembler aufgerufen.

von W.S. (Gast)


Lesenswert?

Jan H. schrieb:
> ist es irgendwie möglich

Ist es dir irgendwie möglich, den prinzipiellen Unterschied zwischen der 
Notation von C und der Notation eines Assemblers zu verstehen?

Beides sind unterschiedliche Sprachsystem, die nur MANCHMAL gewisse 
Ähnlichkeiten in der Notation haben.

Du kannst also nicht davon ausgehen, daß du dich bei Assemblern genauso 
benehmen kannst wie in C.

Mal ein Beispiel zur Verdeutlichung:
in C:
#define ottokar 125

in Assembler (je nach Typ, CPU und Hesteller):
ottokar: EQU 125
        .equ  ottokar, 125
ottokar = 125

W.S.

von Jan H. (janiiix3)


Lesenswert?

Danke für die Antworten.
Kenne mich in asm leider nicht aus. Hätte aber auch selbst drauf kommen 
können ( andere Sprache.. klar.. ).
Okay. Es gibt jedoch eine Headerdatei von der "sp_driver.s"
Da kann ich die #defines auch nicht bekanntmachen?

von Carl D. (jcw2)


Lesenswert?

Wie Jim M. schon geschrieben hat, kann man mit dem GCC .s Files mit CPP 
Unterstützung übersetzen. Dann funktioniert dein Include auch. Falls das 
Include Dinge beinhaltet, die für ASM und C unterschiedlich sind (aus 
Syntax-Sicht z.B.), dann kann man auswerten, das bei Assembler-Source 
das Define _ASSEMBLER_ gesetzt ist. Beispiele sind zu finden in der 
Source der (auch hier verwendeten) AVRlibc.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Jim M. schrieb:
> Zumindest der (AVR-)GCC kennt "-x assembler-with-cpp", damit wird der
> C-Präprozessor vorm Assembler aufgerufen.

Und wenn der Name der Assembler-Quelldatei auf .S statt .s endet, wird
der C-Präprozessor auch ohne die -x-Option aufgerufen. Handgeschriebener
AVR-Assemblercode hat deswegen üblicherweise die Extension .S, damit man
ohne weitere Vorkehrungen die Header-Dateien der AVR-Libc verwenden
kann.

von Jim M. (turboj)


Lesenswert?

Yalu X. schrieb:
> Und wenn der Name der Assembler-Quelldatei auf .S statt .s endet,

Dumm nur das Windows so seine Probleme mit der Groß- und Kleinschreibung 
von Dateinamen hat (insbesondere wenn sie noch ins DOS 8.3 Format 
passen).

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.