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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Norbert S. (norton)


Bewertung
0 lesenswert
nicht 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) (Moderator)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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.

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.