mikrocontroller.net

Forum: Compiler & IDEs c- Problem Daten auslesen


Autor: Markus (Gast)
Datum:

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

Autor: Quix01 (Gast)
Datum:

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

Autor: markus (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Quix01 (Gast)
Datum:

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

Autor: Quix01 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht bringt
http://de.wikipedia.org/wiki/Common_Gateway_Interface
etwas Klarheit.

Ciao Thomas.

Autor: markus (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Quix01 (Gast)
Datum:

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

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.