feat: add lab-rv32i-freertos-sw-timer card
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
# K14 — Software timer and the timer daemon task
|
||||
|
||||
K14 implements a freestanding, non-copyable C++ SoftwareTimer wrapper over
|
||||
statically allocated FreeRTOS timers. OneShotTimer and PeriodicTimer encode the
|
||||
reload policy in the type. The constructor creates the timer, while start,
|
||||
reset, change_period and stop remain explicit commands sent to the timer daemon.
|
||||
|
||||
The target experiment starts both timers before the scheduler:
|
||||
|
||||
command acceptance snapshot: callbacks = 0
|
||||
periodic initial period 2: ticks 2, 4
|
||||
one-shot reset at tick 1: callback at tick 6, then inactive
|
||||
periodic change at tick 4: next callback at tick 7
|
||||
periodic stop: inactive, no fourth callback
|
||||
|
||||
The callback checks that its current task is xTimerGetTimerDaemonTaskHandle()
|
||||
and that the task name begins with Tmr S. It also records a stack pointer
|
||||
different from the verifier task. Timer control blocks, verifier TCB and stacks
|
||||
live in .bss; creating both timers leaves the heap unchanged.
|
||||
|
||||
## Build
|
||||
|
||||
make check
|
||||
|
||||
This runs a host policy test, ABI/storage checks and the deterministic Hazard3
|
||||
simulation.
|
||||
|
||||
## Debug
|
||||
|
||||
riscv64-unknown-elf-gdb build/task01_sw_timer/prog.elf
|
||||
b software_timer_debug_checkpoint
|
||||
p g_start_commands_accepted
|
||||
p g_callbacks_when_start_returned
|
||||
p g_reset_tick
|
||||
p g_change_tick
|
||||
p g_one_shot_tick
|
||||
p g_periodic_ticks
|
||||
p g_daemon_handle_match
|
||||
p g_daemon_name_match
|
||||
p g_timer_pass
|
||||
|
||||
## Lifetime boundary
|
||||
|
||||
The timer ID stores a pointer to the typed callback context. Therefore the
|
||||
StaticTimer_t storage, wrapper and context must remain alive while a command or
|
||||
callback can still be pending. A successful API return proves queue acceptance,
|
||||
not callback completion. Timer callbacks execute in the shared daemon task and
|
||||
must not block.
|
||||
Reference in New Issue
Block a user