1.7 KiB
1.7 KiB
K12 — Semaphores and task notifications
Position
- Series: FreeRTOS C++
- Lesson: L11, card K12
- Duration: 30 minutes
- Waiter priority 3, signaler priority 2
- Static semaphore controls; notification state in waiter TCB
Outcome
The student selects a binary semaphore, counting semaphore or direct task notification from the communication cardinality and state semantics, then proves blocked/wake transitions and clear/value policy.
Lesson plan
| Time | Mode | Evidence |
|---|---|---|
| 0–5 | binary | empty 0, give 1, second give false, take 0 |
| 5–10 | counting | max/initial 2, take to 1 then 0 |
| 10–15 | blocked waiter | third take blocks; signaler observes eBlocked |
| 15–20 | release | one give wakes exactly one waiter; token consumed |
| 20–25 | notification count | give/take returns 1, state lives in TCB |
| 25–30 | notification value | explicit overwrite/wait yields 0xA5A55A5A |
Acceptance
- binary and counting bounds are enforced;
- both handles equal caller static controls and heap delta is zero;
- waiter is blocked at all three intended waits;
- counting release is consumed immediately, leaving count 0;
- notification give/take returns exactly 1;
- explicit
overwriteaction transfers 0xA5A55A5A; - event order connects counting block/release and both notification phases;
- target exits with PASS.
Main traps
- A semaphore signals availability; it does not carry a data record.
- Notification targets one specific task/slot, not arbitrary consumers.
- Clear-on-exit versus decrement changes binary/counting notification meaning.
- Wrong action or clear mask can silently lose bits/value.
- Identical wake behavior does not imply identical storage/cardinality.