mikrocontroller.net

Forum: PC-Programmierung volatile Problem


Autor: dudu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

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


Programm 1:
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int testvar = 1;
    printf("testvar addresse: %i", &testvar);

    while(1)
    {
         testvar++;
    }
    return EXIT_SUCCESS;
}

Programm 2:
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    volatile int *testvar;
    int = 0x10101010  //jetzt gebe ich die Addresse vom Programm 1 ein
   
    while(1)
    {
        printf("testvar wert: %i", *testvar);
    }
    return EXIT_SUCCESS;
}


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

Autor: anderer Gast (Gast)
Datum:

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

Autor: dudu (Gast)
Datum:

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

Autor: Klauis (Gast)
Datum:

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

Autor: Klauis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie jetzt? PC und uC Frage? Wie kann es mit beidem zu tun haben?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: dudu (Gast)
Datum:

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

Autor: Klauis (Gast)
Datum:

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

Autor: anderer Gast (Gast)
Datum:

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

Autor: dudu (Gast)
Datum:

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

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

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

Autor: Daniel F. (df311)
Datum:

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

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.