From 02a870f24935621a0b4a1798711db3ceaaa3e058 Mon Sep 17 00:00:00 2001 From: Flokke Date: Thu, 7 May 2026 12:21:16 +0200 Subject: [PATCH] Update architecture diagram IPC table with API details and corrected sizes --- architecture.html | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/architecture.html b/architecture.html index 6194f50..1720689 100644 --- a/architecture.html +++ b/architecture.html @@ -170,20 +170,31 @@ - - - - - + + + + + - - - - + + + +
ObjektTypGrößeProduzent (ISR)Konsument (Task)Zweck
beepSemaphoreBinary SemaphoretimerIsr alle 10 msbeepTask Core 0, Prio 5Takt für Beep-State-Machine; ersetzt direkten ISR-Aufruf von PiepPattern::TaskCyclic()beepTaskHandleTask Notification32-bit Zähler im TCBtimerIsr alle 10 ms
vTaskNotifyGiveFromISR
beepTask Core 0, Prio 5
ulTaskNotifyTake(pdTRUE, …)
Takt für Beep-State-Machine. Kein Heap-Objekt nötig, schneller als Semaphore. pdTRUE = Zähler nach Take auf 0 → verhält sich wie Binary Semaphore.
rfEventQueueQueue – RfEvent_t32 Einträge × 5 BpinLevelChangeIsr bei jeder FlankerfDecodeTask Core 0, Prio 4Überträgt {dtMicros, pinValue}; alle 5 Receiver-State-Machines laufen jetzt im Task-KontextQueue – RfEvent_t8 Einträge × 5 BpinLevelChangeIsr bei jeder Flanke
xQueueSendFromISR
rfDecodeTask Core 0, Prio 4
xQueueReceive
Überträgt {dtMicros, pinValue}. dtMicros wird in der ISR gemessen und by-value kopiert — Task decodiert den gespeicherten Wert, kein erneutes micros() nötig. Queue statt Notification, weil Nutzdaten übertragen werden.
+ +
+
Wann Semaphore statt Task Notification?
+ + + + + + +
SituationGrund
Mehrere Tasks warten auf dasselbe EreignisTask Notification ist 1:1 — ein Handle, ein Empfänger
Mutex / gegenseitiger AusschlussxSemaphoreCreateMutex() mit Priority Inheritance; Notification hat keine Mutex-Semantik
Produzent soll Feedback erhalten wenn vollCounting Semaphore meldet errQUEUE_FULL; Notification-Zähler läuft lautlos über
Signalgeber kennt Empfänger nichtSemaphore ist ein eigenständiges Objekt das man übergeben kann; Notification braucht TaskHandle_t
+