Forum: Mikrocontroller und Digitale Elektronik Kommunikation unter den Tasks


von Ma B. (drumstick)


Lesenswert?

Hallo!

Ich arbeite mit dem uVision von Keil in c mit dem stm32f103vc.

Ich habe 2 Tasks mit unterschiedlicher Prio, die unabhängig von einander 
laufen. Wie kann ich jetzt die Tasks kommunizieren lassen mit einander?? 
Mailbox??

Im einten Task wird der Ausgang geresetet , im 2. Gesetzt. Ich möchte 
jetzt im 2. Task mitteilen, er darf den Ausgang nicht setzten, da die 
Entscheidung des 1. Tasks wichtiger ist!

Gibt es sinnvolle Lösungsansätze? Die Mailbox kenne ich eben nicht!

Danke und Gruss!

M.B.
von Düsendieb (Gast)


Lesenswert?

Warum kann das zweite Unterprogramm nicht noch ein zusätzliches Sperrbit 
irgendwo abspeichern?
von holger (Gast)


Lesenswert?

Semaphore im Handbuch nachschlagen.
von (prx) A. K. (prx)


Lesenswert?

Die Ausgangsbasis ist schon etwas ungünstig, denn eigentlich sollten die 
selben Pins nicht gleichzeitig mehreren Tasks zugeordnet sein, d.h. ein 
Pin A.7 sollte von genau einer Task verwaltet werden, nicht von zweien. 
Andernfalls ist es etwas schwierig, Glitches auf den Pins zu verhindern, 
wenn also eine Task den Pin setzt bevor die andere die Kontrolle 
übernimmt und ihn sofort wieder löscht.

Daher möchte ich ganz vorsichtlich mal die Frage stellen, ob die 
bestehende Konstellation wirklich der Stein der Weisen ist, oder ob man 
nicht vielmehr die Kontrolle über den Pin einer einzelnen Task 
überlassen sollte, die ggf. von der anderen über deren Zustand/Wünsche 
informiert wird.
von Ma B. (drumstick)


Lesenswert?

Danke für die Tipps!

@ A. K. :

Ja, das sehe ich genau so! Ich möchte anstelle, dass ich direkt den Pin 
anspreche dem anderen Task mitteilen, dass er den Pin zu reseten soll. 
Wie geht das am besten?

Danke und Gruss!

M.B.
von (prx) A. K. (prx)


Lesenswert?

Das lässt sich ohne Kenntnis der Arbeitsweise der Tasks und der 
konkreten Zeitbedingungen und mit defekter Kistallkugel schlecht sagen.

Wenn die Prio-Task beispielsweise ohnehin zyklisch irgendwelche Runden 
dreht, dann reicht es u.U. aus, einfach den Zustand einer gemeinsam 
genutzen Variablen (volatile) abzufragen.
von Ma B. (drumstick)


Lesenswert?

Danke!

Habe einen Variable in beiden c Files definiert, einmal als volatile.

Sobald in Task2 die Variable gesetzt wird, wird der Pin von Task1 nicht 
mehr verändert!

Gruss

M.B.
von (prx) A. K. (prx)


Lesenswert?

M. B. schrieb:

> Habe einen Variable in beiden c Files definiert, einmal als volatile.

Aua! Nicht verschieden deklarieren.

> Sobald in Task2 die Variable gesetzt wird, wird der Pin von Task1 nicht
> mehr verändert!

D.h. beide Tasks manipulieren doch den Pin? So riskierst du 
möglicherweise den erwähnten Glitch.
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
Noch kein Account? Hier anmelden.