Forum: PC-Programmierung volatile Problem


von dudu (Gast)


Lesenswert?

Hallo

Ich möchte gerne mit volatile das sich 2 C Programme untereinander 
austauschen.


Programm 1:
1
#include <stdio.h>
2
#include <stdlib.h>
3
 
4
int main(void)
5
{
6
    int testvar = 1;
7
    printf("testvar addresse: %i", &testvar);
8
9
    while(1)
10
    {
11
         testvar++;
12
    }
13
    return EXIT_SUCCESS;
14
}

Programm 2:
1
#include <stdio.h>
2
#include <stdlib.h>
3
 
4
int main(void)
5
{
6
    volatile int *testvar;
7
    int = 0x10101010  //jetzt gebe ich die Addresse vom Programm 1 ein
8
   
9
    while(1)
10
    {
11
        printf("testvar wert: %i", *testvar);
12
    }
13
    return EXIT_SUCCESS;
14
}


Aber so funktioniert es leider nicht. Bei Programm 2 kommt immer null 
raus.

von anderer Gast (Gast)


Lesenswert?

Ist das eine PC Frage?
da gibt es ein eigenes Forum für...

aber es funktioniert trozdem nicht da beide Programme im einem eigenen 
Speicherbereich ausgefürt werden.

Gruß

von dudu (Gast)


Lesenswert?

ist ne µc und PC frage

>>aber es funktioniert trozdem nicht da beide Programme im einem eigenen
>>Speicherbereich ausgefürt werden.

Und wie könnte ich es machen? muss ich erst den Speicherbereich 
ausrechen oder gibt es da eine andere Methode

von Klauis (Gast)


Lesenswert?

Wenn du 2 Threads inerhalb eines Programms nimmst, kannst du sozusagen 
beide Programme gleichzeitig im selber Speicherbereich laufen lassen.

von Klauis (Gast)


Lesenswert?

Wie jetzt? PC und uC Frage? Wie kann es mit beidem zu tun haben?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

volatile ist zwar notwendiges Beiwerk hier, aber nur ein kleiner
Teil.

Was du suchst, heißt "shared memory".  Den musst du irgendwie bereit
stellen (lassen).  Wie das auf dem PC-Betriebssystem deiner Wahl
geht, verrät dir das Programmierhandbuch deines Systems.  Auf einem
Microcontroller wirst du dagegen eher kein Betriebssystem haben, da
musst du dir den Speicher dafür selbst festlegen (und dich darum
kümmern, dass er außerhalb des vom Compiler verwalteten Speichers
liegt).

von dudu (Gast)


Lesenswert?

>>Wie jetzt? PC und uC Frage? Wie kann es mit beidem zu tun haben?

ja gut ist eigentlich eine PC frage.

>>Wenn du 2 Threads inerhalb eines Programms nimmst, kannst du sozusagen
>>beide Programme gleichzeitig im selber Speicherbereich laufen lassen.

Wenn ich jetzt unter windows die uhrzeit auslese geht das ja auch. Ohne 
das sie im gleichen Thread sind oder?

von Klauis (Gast)


Lesenswert?

Ja, aber die Uhrzeit liest du über eine Systemfunktion aus, die allen 
Programmen zur Verfügung steht. Auch da greifst nicht direkt auf eine 
Variable zu, in der die Uhrzeit steht.

Die Frage ist jetzt also, ob es wirklich 2 Programme sein müssen. Dann 
könntest du z. B. mit shared memroy arbeiten.

Oder, wenn es keine 2 Programme sein müssen, sondern nur bestimmte 
Aufgaben gleichzeitig erledigt werden sollten, solltest du es mit 
Threads lösen.

von anderer Gast (Gast)


Lesenswert?

Wenn es nicht kritisch ist können die Programme sich auch über Dateien 
unterhalten...
Was willst du denn genau machen? anders kann dir hier sonst nicht 
geholfen werden

von dudu (Gast)


Lesenswert?

Ich will mir bald ein NGW100 kaufen. Drauf möchte ich mir eine art 
Betriebssystem entwickeln (Betriebssystem ist eigentlich ein viel zu 
großes Wort :) ). Welches aus ein Basis Programm besteht und vom 
Anwender Programmierte Programme. Das Basis Programm soll ganz klein 
sein, es soll nur das "User Programm" laden, ausführen und funktionen 
bereit halten wie z.B. Uhrzeit oder Zustände an der Ports. Darum wollte 
ich gerne wissen wie ich es machen kann das sich zwei Programme 
austauschen können.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Du ein eigenes Betriebssystem entwickeln willst (warum nur?), dann 
hängt es davon ab, wie dieses Betriebssystem mit Prozessen umgeht.
Verzichtest Du auf den Gebrauch der MMU und setzt auch keinen virtuellen 
Speicher ein, dann können feste Speicheradressen verwendet werden; die 
einzelnen Prozesse müssen sich halt irgendwie darüber austauschen, 
welche Adressen zu nutzen sind.

Das ganze nennt man übrigens --unabhängig von der verwendeten Technik-- 
Interprozesskommunikation, ein Thema, über das Du Dir mal ein 
Grundlagenbuch durchlesen solltest, weil es nicht nur um den Austausch 
von Daten geht, sondern auch um die Synchronisation von Zugriffen. Sind 
beispielsweise die auszutauschenden Daten ein Array von Bytes, könnte 
ein Taskwechsel geschehen, bevor der das Array beschreibende Prozess 
damit fertig ist, so daß das Array "neue" und "alte" Daten enthält, was 
der zweite, das Array lesende Prozess nicht ohne weiteres erkennen kann 
...

von Daniel F. (df311)


Lesenswert?

warte mit dem grundlagenbuch noch ca. 4 wochen, dann gehst du in eine 
buchhandlung deiner wahl und fragst, ob sie einen "tannenbaum" haben. 
dann fotografierst du bitte das gesicht des verkäufers/der verkäuferin 
und stellst es hier rein.

eigentlich heißt der mensch tanenbaum, und er hat eines DER 
grundlagenbücher über betriebssysteme geschrieben: "moderne 
betriebssysteme"...

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.