www.mikrocontroller.net

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


Autor: Norbert S. (norton)
Datum:

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

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

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")));

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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.