volatile Problem

Gast #1035564
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.
Gast #1035573
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
Moderator Persönliche Seite #1035580
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).
Gast #1035582
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?
Gast #1035585
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.
Gast #1036148
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.
Persönliche Seite #1036159
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 
...
#1036697
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"...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren