Files
fantemp/dev/tasks.md
T
BlackMarkandClaude Opus 5.5 c58ff23e90 console: each command carries its summary, and dispatch names it, -166 B
The help text was thirteen help_row(N) calls and the dispatch thirteen
case N labels, both counting positions in a list defined elsewhere. A
command is now one row of name and summary; the summaries become a second
NUL-separated flash blob printed in a loop, and every case label is
command_index("name"), which does not compile for a name the list lacks.
The help column derives from the longest name, the dotted padding is one
helper for labels and help rows alike, and the ADC scale, the monitor
interval and the uptime units are named. Output is unchanged; the image
goes from 8004 B to 7838 B, both modes byte-identical. The 32-bit
narrowing in dev/tasks.md is re-measured against the new image.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 21:50:01 +02:00

1.7 KiB

Tasks

This file is current work. The repo is the sole task tracker (libavr guidance rule 20).

Open

Nothing.

Decided against

Both of these are measured, and both are recorded here rather than deleted so that the next person to measure them does not read a number as an opportunity and re-propose work the owner has already refused.

The millisecond clock stays 64 bits

Narrowing uptime::millis() and the three timestamps that hold its value from uint64_t to uint32_t is 602 B of flash, 7.7 % of the image (7838 B down to 7236), plus 16 B of RAM.

Refused, owner-stated: this board runs continuously and an uptime that restarts every 49.7 days is not acceptable. That is what a 32-bit millisecond counter wraps at, and the display is not the only cost - the interval tests would have to become subtractions, since now - last >= interval survives a wrap where now >= last + interval does not, and terminal.hpp's monitor tick is written the second way. The 64-bit counter is what puts the wrap out of reach, which is the property being bought.

The 1 kHz tick keeps its 64-bit increment

The compare handler increments 64 bits, so it calls libgcc's __adddi3_s8, and a call inside a signal handler decides the prologue - twelve push/pop pairs for what the helper might clobber. Splitting the counter into two 32-bit halves removes the call and keeps the full range, taking the handler from ~47 instructions to ~26 with the carry running once every 49.7 days.

Refused: it costs 66 B of flash to buy about 0.4 % of the CPU, and nothing here is timing-critical. It was only ever worth considering alongside the narrowing above, which is refused outright.