Funktion nach Prio aufrufen

OP #4593827
Lesenswert?
• ▲
▼
Hallo zusammen,

ich hab in meinen Code 2 Funktionsaufrufe die nacheinander abgearbeitet 
werden. Nun ist es aber so, dass die eine Funktion die andere etwas 
stört. Das liegt daran, dass die eine Funktion ca. alle 0,5s aufgerufen 
werden sollte, die andere aber schon alleine 0,7s braucht bis sie 
abgearbeitet ist.
Die Funktion die "gestört" wird steuert einen Ausgang an und die andere 
die diese "Störung" verursacht, sendet ein Protkoll per UART.

Gibt eine Möglichkeit, die Funktion, ich nenne sie mal "UART-Funktion", 
unterbrechen zulassen und dann weiter zumachen, sobald die andere fertig 
ist. So eine Art selbst verzeugter Interrupt oder muss ich da einfach 
etwas Gehirnschmalz investieren ?

Gruss
Gast #4593874
Lesenswert?
• ▲
▼
Peter F. schrieb:

> ich hab in meinen Code 2 Funktionsaufrufe die nacheinander abgearbeitet
> werden. Nun ist es aber so, dass die eine Funktion die andere etwas
> stört. Das liegt daran, dass die eine Funktion ca. alle 0,5s aufgerufen
> werden sollte, die andere aber schon alleine 0,7s braucht bis sie
> abgearbeitet ist.

0,7s??? Was macht diese Funktion? Berechnet sie den Sinn des Universums 
oder was? Also hier sollte man als erstes mal tiefer graben.

Wahrscheinlich braucht sie nur deshalb so lange, weil unzählige 
längliche delay() darin stecken. Wenn das der Fall ist, ist die Funktion 
einfach nur schwachsinnig programmiert. Die Funktionalität der Funktion 
ist in eine state-machine zu transformieren.

> Gibt eine Möglichkeit, die Funktion, ich nenne sie mal "UART-Funktion",
> unterbrechen zulassen und dann weiter zumachen, sobald die andere fertig
> ist. So eine Art selbst verzeugter Interrupt oder muss ich da einfach
> etwas Gehirnschmalz investieren ?

Wenn die Funktion einen guten Grund hat, so lange zu dauern (delay ist 
kein guter Grund) dann ist natürlich Gehirnschmalz zu investieren.

Man muss dann die Möglichkeit schaffen, eine Art Hintergrund-Task 
abzuarbeiten. Für unfähige C-Programmierer ist der einfachste Weg dahin 
die Verwendung eines Multitasking-OS. Da haben andere, fähigere Leute 
bereits diese Arbeit erledigt. Allerdings: natürlich nicht optimal auf 
das konkrete Problem zugeschnitten und dementsprechend mit an Sicherheit 
grenzender Wahrscheinlichkeit suboptimal für das konkrete Problem. Vor 
allem ist damit zu rechnen, dass Programmteile, die eine Quasi-Realtime 
voraussetzen, dann nicht mehr erwartungsgemäß funktionieren. U.a. 
sämtliche delays...

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