P70 ended with the right proof: bundled lib.avm, pingpong.beam,
io:format/2, 32 message round trips, and Return value: ok.
P71 keeps the same chip/runtime base and makes the AtomVM workload a
little less ceremonial. The new default Erlang module is
stress.erl. It checks:
erlang:send_after/3receive ... after- four spawned workers
- tuple-list allocation pressure
- parent-side message collection
- stdlib printing via
io:format/2
Captured UART:
AtomVM on P71 (stdlib scheduler/timer stress)
Starting AtomVM revision 0.8.0-dev+git.81c67c9
Found startup beam: stress.beam
P71 AtomVM stress starting
timer delta ms: 51
receive-after fired
worker 1 count 64 sum 4224
worker 2 count 96 sum 14160
worker 3 count 128 sum 33408
worker 4 count 160 sum 65040
workers total: 116832
P71 AtomVM stress PASS
Return value: ok
AtomVM exited result=0
Harness:
[harness] === run ended after 18862281 post-load cycles ===
[harness] halted=1, halt_code=0x00000001
Honest status
| step | status |
|---|---|
| AtomVM stdlib bundle | PASS |
erlang:send_after/3 | PASS |
receive ... after | PASS |
| spawned workers and mailbox collection | PASS |
| allocation/list pressure | PASS |
| Verilator run | PASS |
| F/D architectural compliance | NOT RUN |
| LibreLane hardening | NOT RUN |
The timer probe requested 5 ms and observed 51 ms. That is acceptable
for this rung because the platform shim still busy-polls mtime in
sys_poll_events; the useful result is that timers wake the scheduler
and resume Erlang execution at all. Accurate sleep is a future
mtimecmp/WFI platform-runtime task.