Library mit globalen .noinit Variablen möglich?

OP #790083
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
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")));
Moderator Persönliche Seite
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.