Forum: Compiler & IDEs Wie kann verschiedene Programme in eine Datei Packen um diese in Hauptprogrammen nutzen zu können


von Balou B. (baloubaer)


Lesenswert?

Hallo zusammen,

ich möchte gern eine Datei erstellen in der verschiedene Programme 
gespeichert sind. Diese Programme sollen dann in einem Hauptprogramm für 
einen Mikrocontroller variabel eingebunden werden, wie z.H. eine 
vorhandene Datei die warten.h. Hier sind ja verschiedene Möglichkeiten 
hinterlegt um Wartezeiten zu nutzen.

Jedoch möchte ich, das Variablen die in diesen hinterlegten 
Unterprogrammen in meiner Datei nur für das Unterprogramm gelten und 
nicht durch mein Hauptprogramm verändert werden. Sagen wir mal ich 
benutzt in meinem HP Variable a und im Unterprogramm benutze ich diese 
auch.

In Assembler kann ich mit PUSH und POP die Variablen in den Stack 
schieben, wie funktioniert das hier mit dem GCC?

Ich hoffe Ihr versteht was ich meine ;)

Ich bedanke mich für euere Mühen und verbleibe

mit freundlichen Grüßen

Balou Baer

von Peter II (Gast)


Lesenswert?

Balou Baer schrieb:
> Ich hoffe Ihr versteht was ich meine ;)

NEIN

von Dr. Sommer (Gast)


Lesenswert?

Bitte erst C lernen. Funktionslokale Variablen sind automatisch nur 
innerhalb dieser Funktion sichtbar; wenn du aus 2 Funktionen auf ein "a" 
zugreifst das in diesen Funktionen definiert wurde, sind das zwei 
verschiedene a's. PUSH/POP macht der Compiler vollautomatisch.

von P. M. (o-o)


Lesenswert?

Wie Dr. Sommer schon sagte: C lernen. Mach dich vertraut mit dem 
Geltungsbereich von Variablen.

Des weiteren: Verstehen, was der Linker tut und wie man ein typisches 
C-Programm aus verschiedenen Modulen aufbaut. Einsteigen kann man z.B. 
in der Wikipedia, evtl. Englisch, da oft ausführlicher.

von Balou B. (baloubaer)


Lesenswert?

@Peter:

ich habe ein komplettes Programm geschrieben um aus einem Tachosignal 
eine Geschwindigkeit zu ermitteln. Dort sind include Anweisungen, CPU 
Frequenz, Datenrichtungsregister usw. alles mit drin.
Auch verwendet wird dort einen Timer, der nach einer Zeit X einen 
Interrupt auslöst. Das Tachosignal wird an einem PIN am Mikrocontroller 
erkannt und wird in eine Geschwindigkeit umgerechnet. Wird nun die 
Geschwindigkeit überschritten soll ein Ausgang am Mikrocontroller ein 
und bei normalen Geschwindigkeiten wieder aus geschaltet werden.

Dieses Programm möchte ich in eine .h Datei einsetzten und weiter kleine 
Programme auch, um diese durch ein Hauptprogramm abrufen zu können. 
Jedoch definiere ich ja in dem Haupt Programm auch die 
Datenrichtungsregister, die Interrupts, die CPU Frequenz usw..

Daher entsteht für mich nun die Frage, wie muss ich dieses 
Geschwindigkeitsprogramm ändern, damit ich es als Unterprogamm einbinden 
kann. Zudem sollen die Variablen wie. z.B. a, welche eventuell auch in 
anderen UP´s oder auch im HP verwendet werden weder die Variable a im HP 
noch in anderen UP´s verändern.

Wenn ihr mir Sagt, lass es als Anfänger, dann lasse ich es, nur mir 
wären kleine Programmhappen lieber als ein riesiges HP.

Mit freundlichen Grüßen

Balou Bar

von Peter II (Gast)


Lesenswert?

Balou Baer schrieb:
> Dieses Programm möchte ich in eine .h Datei einsetzten

in Header Dateien schreibt man (fast) keine Programmcode, diese gehört 
in Quellcode Dateien (c)


Aber richtig versteht ich das Problem immer noch nicht.

Es gibt globale Variable diese sind im kompletten Programm verfügbar und 
müssen eindeutig benannt sein.

Jeder C Datei kann aber auch ihre eigenen Variablen haben, diese sind 
dann nur in der C Datei gültig.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Balou Baer schrieb:
> Dieses Programm möchte ich in eine .h Datei einsetzten und weiter kleine
> Programme auch, um diese durch ein Hauptprogramm abrufen zu können.
> Jedoch definiere ich ja in dem Haupt Programm auch die
> Datenrichtungsregister, die Interrupts, die CPU Frequenz usw..

Du meinst keine Programme, Du meinst Funktionen, d.h. Du willst Dein 
großes Monsterprogramm in kleine Häppchen aufteilen.

Strukturiere daher Deinen Source nach Teilaufgaben, stecke diese 
Teilaufgaben dann in einzelne Funktionen, die genau das tun. Wenn Du 
dann so weit gekommen bist, dann bist Du auch im nächsten Schritt in der 
Lage, diese einzelnen Funktionen auf verschiedene .c-Dateien (nicht .h, 
diese beschreiben nur Interfaces, d.h. die Schnittstellen zu den 
Funktionen) aufzuteilen.

Dann musst Du als nächstes lernen, diese verschiedenen .c-Dateien zu 
einem großen Programm zusammenzulinken.

Mach das Schritt für Schritt. Das gleichzeitige Studium eines guten 
C-Buches kann Dich dabei begleiten.

: Bearbeitet durch Moderator
von Karl H. (kbuchegg)


Lesenswert?

Balou Baer schrieb:

> er nach einer Zeit X einen
> Interrupt auslöst. Das Tachosignal wird an einem PIN am Mikrocontroller
> erkannt und wird in eine Geschwindigkeit umgerechnet. Wird nun die
> Geschwindigkeit überschritten soll ein Ausgang am Mikrocontroller ein
> und bei normalen Geschwindigkeiten wieder aus geschaltet werden.
>
> Dieses Programm möchte ich in eine .h Datei einsetzten und weiter kleine
> Programme auch, um diese durch ein Hauptprogramm abrufen zu können.

Nein, das willst du nicht.
Du willst ein neues Programm schreiben, in dem du einzelne 
Funktionalitäten der anderen Programme zu einem einzigen zusammenführst.

> Jedoch definiere ich ja in dem Haupt Programm auch die
> Datenrichtungsregister, die Interrupts, die CPU Frequenz usw..

Ja.

Nichts desto trotz schreibst du jetzt ein neues, ein einziges Programm. 
Da musst du dir jetzt überlegen, wie du das, was die Einzelfunktionen, 
die du zusammenführen willst, unter einen gemeinsamen Hut bringst.

Auf deinem µC läuft ein einziges Programm. Punkt.

von Bronco (Gast)


Lesenswert?

Ich denke, Du hast ein grundlegendes Verständnisproblem:

Der Sinn von Headerdateien ist nicht, Funktionalität (Programmcode) zu 
implementieren, sondern lediglich Schnittstellen bekannt zu machen.

Was Du machen willst, ist wahrscheinlich das hier:
http://de.wikipedia.org/wiki/Modulare_Programmierung

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.