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.
Globale Variablen kannst du von überall benutzen... wo ist das Problem? einfach in der Headerdatei mit "extern" einbinden fertig...
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.
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.
Hallo und nochmal vielen Dank für die Antworten... ist den meine Implementierung korrekt ? Thx Hans M.
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"
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.
Nein leider nicht. Es bleibt immer noch die ungelöste Multitasking-Problematik.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.