Variable aus Task ausrufen ?

Gast #1071275
Lesenswert?

Hallo und einen guten Abend zusammen !

Ich habe eine Funktion in der eine Variable beim Programmstart gesetzt 
wird !
-> StartStop = 1;

in einem Unterprogramm wird dann folgendermaßen gewartet !

while (StartStop); // D.h so lange StartStop==1
Es wird also so lange gewartet wir die variable gesetzt ist !
Zugegebenermaßen ziemlich schlecht ! aber erstmal egal !
Zwischenzeitlich wird eine Interruptroutine bearbeitet ! Was aber auch 
eigentlich keine Rolle spielt nur zum Verständnis gesagt werden soll...

Wenn man ein Betriebssystem benutzt (auf einem µc!), dann kann ich aus 
einer anderen Task hinaus ja rein theoretisch die Variable StartStop 
verändern ? oder ?
Jetzt möchte ich erstmal eine Funktion haben welche auf die 
Speicheradresse wo StartStop abgelegt ist zuzgreifen kann !
.... mhhh genau das ist mein Problem wie kann ich einer anderen Funktion 
sagen wo die Speicherstelle von StartStop ist ?
(also ich benutzt kein Betriebssystem !, ich möchte aber irgendwann mal 
eines benutzen und meine Funktion dafür auslegen !)

Vielen Dank für eure Hilfe
Hans M.
Gast #1071310
Lesenswert?

Hallo und vielen Dank fürd eine Antwort...

Also kann ich das also ungefähr so verwirklichen

//Globale Variable
main.h
  ...
  extern unsigned char StartStop; //Definition der Globalen Variable

/////////////////////////////////////////
main.c
#include "main.h"
// Verwendung der Globalen Variable StartStop
  unsigned char StartStop //hier hin ?
...
  void stop (void)
  {
      StartStop=0;
  }

  void main (void)
  {
   ...
      stop():
  }
///////////////////////////////////////
andereFunktion.c
...
include "main.h"
unsigned char StartStop // hier so deklarieren ?

 void Funktion (void)
 {
    ...
    while StartStop==1;
    ...
 }

Vielen Dank für die Hilfe

Mfg Hans M.
Persönliche Seite #1071326
Lesenswert?

Du musst dir tatsächlich Gedanken machen, was passiert, wenn Task1 die 
Variable gerade ganz oder teilweise eingelesen hat, dann von dem 
Taskmanager unterbrochen wird, dann Task2 zum Zuge kommt und seinerseits 
die Variable verändert.

Wenn es dann zurück zu Task1 geht - tja was ist dann? - soll Task1 mit 
dem eingelesenen Wert weiterarbeiten oder neu einlesen? Und wie stellt 
Task1 fest ob neu eingelesen werden muss?

Da Multitasking keine neue Erfindung ist, wurden diese Probleme bereits 
angegangen. Die Stichworte hierfür gleichen den Stichworten bei der 
Interruptprogrammierung, also atomarer Zugriff spielt eine Rolle und das 
C Schlüsselwort volatile.
Persönliche Seite #1071378
Lesenswert?

Nein leider nicht.

Abgesehen von der ungelösten Multitasking-Problematik, hast du

* zwei Definitionen von StartStop. Einmal in main.c und einmal in 
andereFunktion.c. Manche C Linker werfen einen Fehler ("doppeltes 
Symbol"); andere Überlagern einfach beide Variablen in einer.

* Primitive C Syntaxfehler in der Zeile
while StartStop==1;

Übrigens erinnert mich deine Frage an etwas, Moment, i'll be back

...here we are again:
Beitrag "[AVR] Seltsame Optimierung"
Gast #1071384
Lesenswert?

ok danke für die Antwort !

d.h ich müsste die Variable StartStop nur einmal , entweder in main.c 
oder in andereFunktion.c deklarieren, also Speicher reservieren ?
Würde das reichen ?
Ja den primitiven C Syntax Fehler .. ups...

Mfg Hans M.
Gast #1071444
Lesenswert?

ok ja das ist natürlich klar ! Vielen Dank für die Hilfe !!!
aber das compilerproblem :

* zwei Definitionen von StartStop. Einmal in main.c und einmal in
andereFunktion.c. Manche C Linker werfen einen Fehler ("doppeltes
Symbol"); andere Überlagern einfach beide Variablen in einer.

ist damit doch erledigt, oder ?

Thx Hans M.

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