build: the pin advances over the bounded calibration
libavr's calibrate() now bounds its measurement loop, starts the pulse on an observed edge, and re-arms a rejected pulse on the remaining budget instead of one-strike booting the application. The autobaud images pay +16..20 B — every slot still fits, the worst now the 1284s' 502 of 512 — and the stock images are byte-identical, kept so by fitting the loader's flag set per backend: -fno-ivopts stays on the fixed-baud bodies it shrinks and comes off the autobaud body, where it duplicated the calibration countdown into a 9-cycle loop against the contracted seven. One deployed constant moved and its gate caught it: the calibrate wait's budget poll re-laid from ten cycles to nine (the exit branches land where block layout puts them), so pureboot.window.autobaud measured -10 % until AUTOBAUD_POLL_CYCLES and the README's derived seconds were re-measured — the default autobaud window is 36 M cycles, 4.5 s at 8 MHz. Full gate green on all 37 chips; the README's autobaud column carries each chip's rebuilt worst configuration, machine-checked against the built trees. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -27,8 +27,11 @@ sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent))
|
||||
from pbsim import Device
|
||||
|
||||
# The calibrate() budget loop's cycles per poll in the built image — what the
|
||||
# README's window arithmetic rests on, verified here.
|
||||
AUTOBAUD_POLL_CYCLES = 10
|
||||
# README's window arithmetic rests on, verified here. A measured fact, not a
|
||||
# design constant: the wait's exit branches land where the compiler's block
|
||||
# layout puts them, and the bounded-calibration rework moved the loop from
|
||||
# ten cycles to nine.
|
||||
AUTOBAUD_POLL_CYCLES = 9
|
||||
|
||||
|
||||
def load_tool(path):
|
||||
|
||||
Reference in New Issue
Block a user