feat: add lab-rv32i-freertos-integration card
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# K16 — Integrated real-time application and evidence report
|
||||
|
||||
K16 composes the wrappers introduced in K08–K15 without adding a new primitive:
|
||||
StaticTask, StaticQueue, one measured dynamic Queue, EventGroup, SoftwareTimer,
|
||||
CriticalSection, IsrContext and GpioPin.
|
||||
|
||||
The deterministic service graph is:
|
||||
|
||||
startup barrier (producer | processor | reporter = 0x7)
|
||||
-> real external IRQ at tick 1 wakes producer and yields once
|
||||
-> periodic timer callbacks at ticks 5 and 10
|
||||
-> producer -> static input queue -> processor
|
||||
-> dynamic report queue -> reporter -> GPIO/evidence report
|
||||
|
||||
The pressure phase sends sequences 2 and 3 into a capacity-2 input queue, then
|
||||
rejects sequence 4 with an explicit drop-newest policy. An end marker blocks
|
||||
until space is available, proving recovery. The report queue also reaches depth
|
||||
2. Three transformed values sum to 120.
|
||||
|
||||
## Measured report
|
||||
|
||||
static-service heap delta: 0 B
|
||||
one dynamic Queue cost: 128 B
|
||||
forced allocation failure: returned null, heap unchanged
|
||||
timer ticks: 5, 10; then inactive
|
||||
input/report queue peaks: 2 / 2
|
||||
dropped sequence: 4
|
||||
end-to-end latency: 6 ticks
|
||||
producer/processor/reporter HWM: 169 / 183 / 189 words
|
||||
trace events: 24
|
||||
trace digest: c474ac09
|
||||
|
||||
## Build
|
||||
|
||||
make check
|
||||
|
||||
This runs the host model, ABI/storage gate and Hazard3 end-to-end simulation.
|
||||
|
||||
## Debug
|
||||
|
||||
riscv64-unknown-elf-gdb build/task01_integration/prog.elf
|
||||
b integration_debug_checkpoint
|
||||
p/x g_barrier_mask
|
||||
p g_timer_ticks
|
||||
p g_input_queue_peak
|
||||
p g_report_queue_peak
|
||||
p g_dynamic_queue_heap_cost
|
||||
p g_pressure_dropped_sequence
|
||||
p g_end_to_end_latency
|
||||
p g_producer_hwm
|
||||
p g_processor_hwm
|
||||
p g_reporter_hwm
|
||||
p/x g_trace_digest
|
||||
p g_integration_pass
|
||||
|
||||
## Design boundary
|
||||
|
||||
All long-lived services except the boot-configured report queue use caller-owned
|
||||
static storage. A deliberately oversized pvPortMalloc request is handled as a
|
||||
fallible probe; it does not use ordinary operator new and leaves the heap
|
||||
unchanged. The timer callback and ISR only notify. Queue processing, pressure
|
||||
recovery, transformation and reporting remain in tasks.
|
||||
Reference in New Issue
Block a user