mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Variable aus Task ausrufen ?


Autor: Hans M. (Gast)
Datum:

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

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Globale Variablen kannst du von überall benutzen...
wo ist das Problem?
einfach in der Headerdatei mit "extern" einbinden fertig...

Autor: Hans M. (Gast)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werf mal völlig wertfrei VOLATILE in den Raum.

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und nochmal vielen Dank für die Antworten...

ist den meine Implementierung korrekt ?

Thx Hans M.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

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

Autor: Hans M. (Gast)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein leider nicht.

Es bleibt immer noch die ungelöste Multitasking-Problematik.

Autor: Hans M. (Gast)
Datum:

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

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Exakt. Das ist dann erledigt.

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.