Files
lab-rv32i-freertos-integration/doc/card-plan.md
T

52 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# K16 — Integrated real-time application and evidence report
## Position
- Series: FreeRTOS C++
- Lesson: L15, card K16
- Duration: 30 minutes
- Final integration card; no new wrapper primitive
- Reproducible end-to-end evidence on Hazard3
## Outcome
The student composes ownership, storage, task priorities, startup coordination,
ISR/timer boundaries, queue pressure and memory/stack diagnostics into one
defensible real-time service graph.
## Lesson plan
| Time | Mode | Evidence |
| --- | --- | --- |
| 05 | inventory | static services delta 0; dynamic report queue 128 B |
| 510 | startup | EventGroup barrier=0x7; task priorities and ownership |
| 1015 | inputs | real IRQ tick 1; timer ticks 5/10 |
| 1520 | pipeline | three samples, transform sum 120 |
| 2025 | pressure | peaks 2/2, sequence 4 dropped, end marker recovers |
| 2530 | report | latency 6, stack HWM, 24-event digest c474ac09 |
## Acceptance
- no new wrapper primitive is introduced;
- producer, processor and reporter are StaticTask instances;
- startup EventGroup remains at mask 0x7;
- external IRQ wakes producer at tick 1 and requests exactly one yield;
- periodic timer callbacks occur at ticks 5 and 10, then timer becomes inactive;
- three samples are produced, processed and reported with sum 120;
- input and report queues both reach depth 2;
- sequence 4 is explicitly drop-newest and the end marker later succeeds;
- static services have heap delta zero;
- exactly one persistent dynamic Queue costs 128 B;
- oversized fallible allocation returns null without changing free heap;
- producer/processor/reporter stack HWM are positive and recorded;
- end-to-end latency is 6 ticks and trace digest is c474ac09;
- target exits with PASS.
## Main traps
1. Adding abstraction without a new invariant.
2. Hiding an unbounded allocation or queue wait in the periodic path.
3. Treating a pressure drop as success or failing to count it.
4. Performing transformation in ISR/timer callback instead of a task.
5. Reporting screenshots without source, timestamped trace and repeatable gate.