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ß
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.
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ß
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;
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.
vielleicht bringt http://de.wikipedia.org/wiki/Common_Gateway_Interface etwas Klarheit. Ciao Thomas.
@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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.