Forum: Compiler & IDEs Library mit globalen .noinit Variablen möglich?


von Norbert S. (norton)


Lesenswert?

Hallo,
ich würde der Übersichtlichkeit halber meine Funktionen auf mehrere 
Files aufteilen.
Ist es möglich ".noinit" Variablen in einer Funktionen lib anzulegen, 
die ich auch in der main.c benutzen kann?
So etwa:

main.c
#include <funktionen1.h>
void main(void)
{
  ..
  ..
  global_var1 = 1;
  ..
}

funktionen1.h
extern uint8_t global_var1 __attribute__((section(".noinit")));

funktionen1.c
uint8_t global_var1 = 0;

Was müsste ich dann noch anstellen, damit ich diese Variable auch noch 
in einer anderen lib verwenden möchte?

funktionen2.h
funktionen2.c
  global_var1 = 23;

Gruß Norton

von Karl H. (kbuchegg)


Lesenswert?

Norbert S. wrote:
> Hallo,
> ich würde der Übersichtlichkeit halber meine Funktionen auf mehrere
> Files aufteilen.
> Ist es möglich ".noinit" Variablen in einer Funktionen lib anzulegen,
> die ich auch in der main.c benutzen kann?

Ohne es jetzt ausprobiert zu haben
Warum sollte das nicht gehen?

> So etwa:
>
> main.c
> #include <funktionen1.h>
> void main(void)
> {
>   ..
>   ..
>   global_var1 = 1;
>   ..
> }
>
> funktionen1.h
> extern uint8_t global_var1 __attribute__((section(".noinit")));
>
> funktionen1.c
> uint8_t global_var1 = 0;

Das wiederspricht sich jetzt aber.
Auf der einen Seite sagst du, die Variable wird nicht initialisert,
auf der anderen Seite machst du aber genau das: die Variable
initialisieren.

Wenn schon, dann würde ich es so probieren

funktionen1.h
exetern uint8_t global_var1

funktionen1.c
uint8_t global_var1 __attribute__((section(".noinit")));

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Ich fürchte sowieso, der OP hat den Begriff "Library" nicht in
der eigentlichen Bedeutung gewählt: der Modul soll vermutlich
gar nicht in einer .a-Datei stehen.  Von dort würde er nur geholt,
wenn er auch referenziert wird.

Wenn's nur um die Aufteilung auf mehrere Quelldateien geht: kein
Thema, erst der Linker baut das ja zusammen.  Dennoch bedarf es
natürlich irgendeiner Form von "extern"-Deklaration (z. B. über
ein Headerfile) für all die Quellcode-Module, die die Variable
nicht selbst definieren.

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.