Gast
#5179164
Hallo, ich habe eine Frage zur IPC mit FreeRTOS oder auch allgemein zur IPC. Ich habe zwei Tasks: - Netzwerktask -> kann einige hundert ms verzögert werden - Arbeitstask -> kann nur einige ms verzögert werden, hat jedoch einen "Ruhemodus" Nun möchte ich dem Arbeitstask eine Aufgabe aus dem Netzwerktask zuweisen. Ich habe zwei Queues mit jeweils nur einem Speicherplatz angelegt. Eine ist für die Aufgabenzuweisung und eine für die Rückmeldung ob die Aufgabe auch entgegengenommen wurde. Nun mache ich im Netzwerktask folgendes (exemplarisch): if(!QueueSend(send_handle, daten, 100ms)) -> Aufgabenzuweisung fehlgeschlagen if(!QueueRecv(recv_handle, daten, 100ms)) -> Aufgabenzuweisung fehlgeschlagen if(!daten.ACK) -> Aufgabenzuweisung fehlgeschlagen Im Arbeitstask kontrolliere ich bloß die fifo send_handle ohne zu blockieren: if(QueueRecv(send_handle, daten, 0ms)) -> prüfe Daten und sende ACK oder NAK Das funktioniert so lange "gut" bis der Arbeitstask mal über 100 ms blockiert, also in dem besprochenen Ruhemodus ist. Dann bekommt der Netzwerktask ein NAK und der Arbeitstask empfängt send_handle nach seinem Ruhemodus und ACK es. Die Folge: beide Task asynchrone. Einfach send_handle wieder aus dem Netzwerktask löschen würde zu race conditions führen. Ich denke die Aufgabenstellung sollte in einem RTOS recht häufig vorkommen und ich stehe auf dem Schlauch. Kann mich mal bitte jemand vom Schlauch schupsen? Danke Basti