Forum: Compiler & IDEs c- Problem Daten auslesen


von Markus (Gast)


Lesenswert?

Hi
ich habe im Speicher meines Controllers DAten abgelegt. Das macht mein
erstes C-Programm( weiß aber nicht wo die nun genau liegen)
Nun will ich mit einem 2.Programm auf die DAten zugreifen.
Hierzu muss das ja nur wissen unter welcher Adresse die Daten liegen.

Also im Endeffkt:
Programm 1 generiert Daten und legt irgendwo ab wo sich diese befinden
Programm 2 ließt aus wo sich die Daten befinden und verarbeitet diese
weiter.

Unter welchen Stichworten muss ich suchen um so was zu finden damit ich
es progrmmieren kann?
Es in eine Datei zu schreiben und diese dann wieder auszulesen geht
zwar ist aber zu umständlich da die Daten ja schon im selben Speicher
sind

Gruß

von Quix01 (Gast)


Lesenswert?

Hi,
bisher hab ich auf Controllern immer nur mit einem einzigen Programm,
der main()-Funktion gearbeitet. (Geht das überhaupt, mehrere
main()-Funktionen???)

Wenn ich Deine Frage richtig verstehe, meinst Du mit "ProgrammX"
eigentlich Funktionen.

Wenn eine Funktion irgendwo im Speicher Daten ablegst, dann hast Du ja
eine Variable, ein Array, einen Zeiger etc. der auf die Speicherstelle
zeigt. Faktisch ist also der Speicherort bekannt. Damit eine andere
Funktion darauf zugreifen kann, muss die Variable global sichtbar sein
oder der Funktionen als Argument übergeben werden.

Mikrocontroller - Dateien ?? Was meinst Du damit?

Ciao Thomas.

von markus (Gast)


Lesenswert?

Hi Thomas,

meine 1. Datei ist Main()
die 2 Datei ist ein CGI Programm das die in Main erstellten Werte
ausgeben soll.
und das Problem ist wie ich die da rüber bekomme.

Da dachte ich das ich in main() irgendwo die Adresse ablege wo main die
DAten speichert und irgendwie die (weiß noch nicht wie) aus die Adresse
in cgi zugreife und dann mit der Adresse die WErte auslese.

Oder ist meine Überlegung zu kompliziert? und es geht viel einfacher..

Gruß

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

O ja, das geht in der Tat einfacher.

Deklariere die für beide "Programmteile" relevanten Variablen in
einer Headerdatei, die Du in beiden C-Sourcefiles einbindest:

  // bla.h

  extern int Variable;

Definiere die Variablen in einem der beiden C-Sourcefiles

  // main.c

  #include "bla.h"

  int Variable;


und nutze sie auch im anderen C-Sourcefile:

  // dasandere.c

  #include "bla.h"

  ...
  Variable = 0;

von Quix01 (Gast)


Lesenswert?

ums nochmal zu präzisieren:
auf einen Controller (AVR etc.) kannst Du i.d.R. nur ein (1) Programm
flashen. Dieses erstellst Du mit einem Linker aus diversen Modulen, die
zuvor von einem Compiler aus den Quelltexten erzeugt worden sind.
Ansonsten so, wie Rufus schon schrieb,

Ich weiss nicht ganz, was Du mit CGI-Programm meinst? CGI ist eine
Schnittstelle für diverse Anwendungen, meist auf Webservern zu finden,
kein Programm.


Ciao Thomas.

von Quix01 (Gast)


Lesenswert?

vielleicht bringt
http://de.wikipedia.org/wiki/Common_Gateway_Interface
etwas Klarheit.

Ciao Thomas.

von markus (Gast)


Lesenswert?

@Quix01
Scheinbar hab ich mich etwas missverständlich ausgedrückt, sorry.

Ich nutzt einen Coldfire Controller auf dem als Betriebssystem ein
uCLinux läuft. Das BOrd stellt mir auch einen Webserver zur verfügung.
Das Programm main ließt die Serielle Schnittstelle aus und da bekomme
ich einen Temperaturwert.
Dieser Wert wird in einem Array gespeichert.
Da es mir aber nicht viel bringt wenn der WErt nur gespeichert will ich
den auch und hier kommt das CGI programm ins spiel.
main.c läuft im Ordner /var und das cgi.c im ORdner
home/httpd/cgi-bin.
und nun will ich möglichst einfach die Daten von main.c zu ggi.c
bekommen um diese anzuzeigen.

Mfg
Markus

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ah, Du verwendest einen Controller mit einem Betriebssystem. Und in der
Tat zwei getrennte Programme/Prozesse.
Das wäre als einleitende Bemerkung hilfreich gewesen ...

Um hier asynchron auf Speicherbereiche des jeweils anderen Prozesses
zugreifen zu können, ist "shared memory" eine Möglichkeit. Näheres
dazu sollte in der ucLinux-Dokumentation zu finden sein.

Beachte meinen Gebrauch des Wortes "asynchron" - beide Prozesse haben
keine Kontrolle darüber, wann der jeweils andere auf Variablen zugreift;
es kann hierbei zu ernsthaften Problemen kommen, wenn der
Variablenzugriff nicht atomar erfolgen kann.

Dafür bietet das Betriebssystem aber auch Mechanismen zur
Zugriffssynchronisation, Semaphoren bzw. Mutexe sind hier die
relevanten Stichworte.

Die im gemeinsamen Speicherbereich vorgehaltenen Variablen sollten
übrigens als "volatile" gekennzeichnet werden, weil der Compiler beim
Übersetzen des einen Programmes nicht ahnt, daß der Inhalt der Variablen
während der Laufzeit "hinterrücks" vom anderen Programm geändert
werden kann.

Viel Erfolg.

von Quix01 (Gast)


Lesenswert?

Hi,
jetzt ist mir die Sache klar!
Alternativ kannst Du die Temperatur auch in einer Umgebungsvariablen
ablegen. CGI-Programme laufen ja in einer Art Shell. Ich kenne zwar
uCLinuX nicht wirklich, aber auf "normalen" Linux-Systemen geht das.
Stichwort: getenv(), setenv() in stdlib.h

Ciao Thomas

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.