mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik einfaches include #define Problem


Autor: prinz3nroll3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
leider hat die Suche nichts auf Anhieb rausgespuckt.

hier mein problem:

file.h
#ifdef VAR_PLACE_ROM
   #define VAR_PLACE romdata
#else
   #define VAR_PLACE idata
#endif
void test(void);
------

file.c
#pragma VAR_PLACE unsigned char testvar;
void test(void)
{
;
}
-------

main.c
#define VAR_PLACE_ROM
#include "file.h"

void main(void)
{


}
------------

Die variable liegt immer im idata und nicht im rom
-> er kennt die Definition nicht wieso?
muss ich in file.h die main.c bzw. die Datei mit dem define einbinden?
Das wäre schlecht wenn ja die file.h ein Teil einer Library wäre und in 
verschiedenen Projekten eingebunden wird.

Wo ist mein Denkfehler?

Vielen dank für die Antworten!

Gruß

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> -> er kennt die Definition nicht wieso?

Er kennt sie schon - in main.c, dann da steht sie ja. In file.c aber 
nicht.

Autor: prinz3nroll3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,
danke für die antwort.

nur wie löst man denn ein solches problem?

ich habe gedacht durch das include kennt file.h das define.

vielen dank

Autor: mati (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

verschiebe die Definition #define VAR_PLACE_ROM an den Anfang der 
file.h.

bei einer Lib stehst Du aber auf dem Schlauch. Eine Lib ist beim 
Einbinden bereits kompiliert und der Datentyp Deiner Variable schon 
fest.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> ich habe gedacht durch das include kennt file.h das define.

Ja, aber eben nur in main.c. Der Header wird ja durch das #include nicht 
verändert. Er wird beim compilieren von file.c so wie er ist 
eingebunden, und da dort dann das #define nirgends steht, ist es in 
file.c auch nicht vorhanden.

> nur wie löst man denn ein solches problem?

Das #define im Header oder über die Kommandozeile übergeben, und zwar 
auch beim compilieren von file.c.

Autor: prinz3nroll3 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mati schrieb:
> bei einer Lib stehst Du aber auf dem Schlauch. Eine Lib ist beim
> Einbinden bereits kompiliert und der Datentyp Deiner Variable schon
> fest.

Hallo,
danke für die Antworten.
Die file.h wird in verschiedenen Porjekten eingebunden.
Je nach Projekt soll die Variable im rom oder ram liegen,
dies soll in den projekten selbst defeniert werden und nicht im file.h.


vielen dank für die zahlreichen antworten

gruß

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
prinz3nroll3 schrieb:
> mati schrieb:
>> bei einer Lib stehst Du aber auf dem Schlauch. Eine Lib ist beim
>> Einbinden bereits kompiliert und der Datentyp Deiner Variable schon
>> fest.
>
> Hallo,
> danke für die Antworten.
> Die file.h wird in verschiedenen Porjekten eingebunden.

Was hilft dir das?
Es geht ja nicht um die file.h
Es geht auch nicht um die main.c

Es geht um die file.c!
Und die ist bereits compiliert worden, wenn du sie in die Library 
einbindest. Damit ist in der Library schon fest fixiert, wie file.c das 
VAR_PLACE_ROM aufgefasst hat, wenn sie der eigentliche Programmierer in 
die Finger bekommt.

Nichts geht mehr.

> Je nach Projekt soll die Variable im rom oder ram liegen,
> dies soll in den projekten selbst defeniert werden und nicht im file.h.

Dann musst du dir einen Mechanismus einfallen lassen, wie du den 
Funktionen in file.c diese Entscheidung mitteilen kannst. Und zwar 
nachdem file.c compiliert wurde.

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.