docs: comments state what is, not how it came to be

The loader build, the gate script and the line-ending rule each carried the
story of their arrival - a measurement off the bench, a loop got wrong by
hand, a checkout reached from two hosts - where a sentence of what holds now
is enough. .gitattributes loses two patterns for files this repository does
not have, .clangd its two non-ASCII dashes, two headers a "per C" that read
as a stripped degree sign, and the README a "(new)" and the port's own
first attempt at stopping monitor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
BlackMarkandClaude Opus 5.5 committed 2026-10-23 21:50:31 +02:00
1 parent 51535953b9
commit f8e136e8ad
7 files changed
+18 -27

No files matched your search

+2 -2
View File
@@ -5,7 +5,7 @@ CompileFlags:
Add: Add:
# clang has no 24-bit integer and GCC's are keywords, not macros, so the # clang has no 24-bit integer and GCC's are keywords, not macros, so the
# editor needs a stand-in for avr::uint24_t. The next width up is the only # editor needs a stand-in for avr::uint24_t. The next width up is the only
# one available — clang rejects _BitInt(24) on this target. # one available - clang rejects _BitInt(24) on this target.
- -D__uint24=unsigned long - -D__uint24=unsigned long
- -D__int24=long - -D__int24=long
# clangd forwards the driver's system includes but not its own header # clangd forwards the driver's system includes but not its own header
@@ -14,7 +14,7 @@ CompileFlags:
- -D__STDC_LIMIT_MACROS - -D__STDC_LIMIT_MACROS
- -D__STDC_CONSTANT_MACROS - -D__STDC_CONSTANT_MACROS
# isr::emit spells a vector number into [[gnu::signal(N)]], which clang # isr::emit spells a vector number into [[gnu::signal(N)]], which clang
# rejects rather than ignores — enough of them in one TU to reach the # rejects rather than ignores - enough of them in one TU to reach the
# default limit of 19 inside the headers and truncate the parse. # default limit of 19 inside the headers and truncate the parse.
- -ferror-limit=0 - -ferror-limit=0
Remove: Remove:
+2 -7
View File
@@ -1,12 +1,7 @@
# Line endings are the repository's, not the editing machine's: this checkout # Line endings are the repository's, not the editing tool's: a file rewritten
# is reached from two hosts, and a file rewritten by a Windows tool comes back # by a Windows tool must not come back with every line changed.
# with every line changed unless something says otherwise. Naming the source
# extensions left Markdown, Python, shell and CMake to whatever the writing
# tool defaulted to, which is CRLF on one of the two.
* text=auto eol=lf * text=auto eol=lf
# Atmel Studio writes these and expects them back. # Atmel Studio writes these and expects them back.
*.vcxproj* eol=crlf
*.cppproj eol=crlf *.cppproj eol=crlf
*.sln eol=crlf
*.atsln eol=crlf *.atsln eol=crlf
+6 -8
View File
@@ -37,14 +37,12 @@ add_custom_command(TARGET fantemp POST_BUILD
COMMAND ${CMAKE_OBJCOPY} -O ihex -R .eeprom COMMAND ${CMAKE_OBJCOPY} -O ihex -R .eeprom
$<TARGET_FILE:fantemp> $<TARGET_FILE_DIR:fantemp>/fantemp.hex) $<TARGET_FILE:fantemp> $<TARGET_FILE_DIR:fantemp>/fantemp.hex)
# The board's loader, built here rather than named from memory: consuming # The board's loader, built from the pin, so the one image this deployment
# pureboot for its geometry alone left the one image this deployment cannot be # cannot be recovered without is rebuilt by the commit that names it. Every
# recovered without outside the repository that pins it. Every parameter is # parameter is pureboot's own default for this chip - USART0 at 115200 on the
# pureboot's own default for this chip - USART0 at 115200 on the 16 MHz crystal # 16 MHz crystal `src/board.hpp` declares. It goes on over the wire
# `src/board.hpp` declares - and that is measured rather than assumed, the # (`--update-loader`), which is why there is no flash target beside it: the
# image being byte-for-byte the 386 B the board's slot reads back. It goes on # board has no programming header.
# over the wire (`--update-loader`), which is why there is no flash target
# beside it: no programmer has ever been in this board's path.
pureboot_add_loader(pureboot) pureboot_add_loader(pureboot)
enable_testing() enable_testing()
+3 -4
View File
@@ -18,7 +18,7 @@ Commands may be abbreviated to any unambiguous-by-order prefix, as the legacy
firmware allowed: `up` is `uptime`, `st` is `statistics`, `sa` is `save`. The firmware allowed: `up` is `uptime`, `st` is `statistics`, `sa` is `save`. The
table order resolves ties, so `s` is `show` — and `reset` is deliberately the one table order resolves ties, so `s` is `show` — and `reset` is deliberately the one
command that cannot be abbreviated, because `r` should not be able to wipe the command that cannot be abbreviated, because `r` should not be able to wipe the
histogram. `save` (new) forces a writeback, which otherwise happens every 30 histogram. `save` forces a writeback, which otherwise happens every 30
minutes and on the way into the bootloader. minutes and on the way into the bootloader.
`show`, `statistics` and the histogram print one value per line behind a dotted `show`, `statistics` and the histogram print one value per line behind a dotted
@@ -28,9 +28,8 @@ from 10 to 60 with a bar, because the curve is a cubic and five-degree samples
without a graph show none of its shape. without a graph show none of its shape.
**Ctrl+C** abandons a half-typed line and gives a fresh prompt, echoing `^C`, and **Ctrl+C** abandons a half-typed line and gives a fresh prompt, echoing `^C`, and
it is what stops `monitor`. Stopping on *any* byte, which is what the port did it is what stops `monitor`. Stopping on *any* byte would not do: a host's line
first, reads well right up until a host sends a line ending: `monitor\r\n` then ending would stop `monitor\r\n` on the `\n` it arrived with, one reading in.
stopped itself on the `\n` it arrived with, one reading in.
## Reaching the bootloader ## Reaching the bootloader
+1 -1
View File
@@ -6,7 +6,7 @@
#include <libavr/flash.hpp> #include <libavr/flash.hpp>
// The auto-mode fan curve, tabulated at compile time as a flash_table of duty // The auto-mode fan curve, tabulated at compile time as a flash_table of duty
// percent per C: a cubic that is held at zero below the temperature the fan // percent per degree C: a cubic that is held at zero below the temperature the fan
// starts at. // starts at.
namespace app::curve { namespace app::curve {
+1 -1
View File
@@ -7,7 +7,7 @@
#include "board.hpp" #include "board.hpp"
// Temperature histogram: one uint32 bucket per C 0..99, sampled once a // Temperature histogram: one uint32 bucket per degree C 0..99, sampled once a
// second, written back to EEPROM every 30 minutes (update() only touches // second, written back to EEPROM every 30 minutes (update() only touches
// changed bytes). // changed bytes).
namespace app { namespace app {
+3 -4
View File
@@ -1,11 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# The task gate: every configure preset built, and only then every one tested. # The task gate: every configure preset built, and only then every one tested.
# #
# The loop itself is libavr's (tools/check-presets.sh) because the order in it # The loop is libavr's (tools/check-presets.sh): the mode-identity checks read
# is subtle and was got wrong by hand more than once - the mode-identity checks # the sibling mode's tree, so a build-then-test-per-preset run would compare a
# read the sibling mode's tree, so a build-then-test-per-preset run compares a
# fresh image against a stale sibling. Anything this repository needs beyond # fresh image against a stale sibling. Anything this repository needs beyond
# the presets is written after the call, where every tree is built and tested. # the presets goes after the call, where every tree is built and tested.
set -euo pipefail set -euo pipefail
cd "$(dirname "${BASH_SOURCE[0]}")/.." cd "$(dirname "${BASH_SOURCE[0]}")/.."
"${LIBAVR_ROOT:-libavr}/tools/check-presets.sh" "$@" "${LIBAVR_ROOT:-libavr}/tools/check-presets.sh" "$@"