Update architecture diagram IPC table with API details and corrected sizes
This commit is contained in:
+20
-9
@@ -170,20 +170,31 @@
|
|||||||
<table>
|
<table>
|
||||||
<tr><th>Objekt</th><th>Typ</th><th>Größe</th><th>Produzent (ISR)</th><th>Konsument (Task)</th><th>Zweck</th></tr>
|
<tr><th>Objekt</th><th>Typ</th><th>Größe</th><th>Produzent (ISR)</th><th>Konsument (Task)</th><th>Zweck</th></tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><span class="tag t-task">beepSemaphore</span></td>
|
<td><span class="tag t-task">beepTaskHandle</span></td>
|
||||||
<td>Binary Semaphore</td><td>–</td>
|
<td>Task Notification</td><td>32-bit Zähler im TCB</td>
|
||||||
<td><span class="tag t-isr">timerIsr</span> alle 10 ms</td>
|
<td><span class="tag t-isr">timerIsr</span> alle 10 ms<br><code style="font-size:10px">vTaskNotifyGiveFromISR</code></td>
|
||||||
<td><span class="tag t-task">beepTask</span> Core 0, Prio 5</td>
|
<td><span class="tag t-task">beepTask</span> Core 0, Prio 5<br><code style="font-size:10px">ulTaskNotifyTake(pdTRUE, …)</code></td>
|
||||||
<td>Takt für Beep-State-Machine; ersetzt direkten ISR-Aufruf von PiepPattern::TaskCyclic()</td>
|
<td>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.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><span class="tag t-task">rfEventQueue</span></td>
|
<td><span class="tag t-task">rfEventQueue</span></td>
|
||||||
<td>Queue – RfEvent_t</td><td>32 Einträge × 5 B</td>
|
<td>Queue – RfEvent_t</td><td>8 Einträge × 5 B</td>
|
||||||
<td><span class="tag t-isr">pinLevelChangeIsr</span> bei jeder Flanke</td>
|
<td><span class="tag t-isr">pinLevelChangeIsr</span> bei jeder Flanke<br><code style="font-size:10px">xQueueSendFromISR</code></td>
|
||||||
<td><span class="tag t-task">rfDecodeTask</span> Core 0, Prio 4</td>
|
<td><span class="tag t-task">rfDecodeTask</span> Core 0, Prio 4<br><code style="font-size:10px">xQueueReceive</code></td>
|
||||||
<td>Überträgt {dtMicros, pinValue}; alle 5 Receiver-State-Machines laufen jetzt im Task-Kontext</td>
|
<td>Ü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.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
<div style="margin-top:14px;">
|
||||||
|
<div style="color:var(--orange);font-size:11px;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;">Wann Semaphore statt Task Notification?</div>
|
||||||
|
<table>
|
||||||
|
<tr><th>Situation</th><th>Grund</th></tr>
|
||||||
|
<tr><td>Mehrere Tasks warten auf dasselbe Ereignis</td><td>Task Notification ist 1:1 — ein Handle, ein Empfänger</td></tr>
|
||||||
|
<tr><td>Mutex / gegenseitiger Ausschluss</td><td><code>xSemaphoreCreateMutex()</code> mit Priority Inheritance; Notification hat keine Mutex-Semantik</td></tr>
|
||||||
|
<tr><td>Produzent soll Feedback erhalten wenn voll</td><td>Counting Semaphore meldet <code>errQUEUE_FULL</code>; Notification-Zähler läuft lautlos über</td></tr>
|
||||||
|
<tr><td>Signalgeber kennt Empfänger nicht</td><td>Semaphore ist ein eigenständiges Objekt das man übergeben kann; Notification braucht <code>TaskHandle_t</code></td></tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- ═══════════════════════════════════════════════════════════
|
<!-- ═══════════════════════════════════════════════════════════
|
||||||
|
|||||||
Reference in New Issue
Block a user