Drop the EmbassyUart flush-per-write workaround once embassy-stm32 ships the BufferedUart TX fix

Aperta
#385 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
2/5
Tempo stimato
1-3 ore
Idoneità per principianti
20/100
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Attiva
Stack tecnologico
embedded-iot, rust
Ambito
embedded-iot

Direzione di ricerca

The workaround lives in aimdb-embassy-adapter/src/io.rs, where EmbassyUart and EmbassyUartWriter route write_all through write_all_flushed; the flush-count assertions are in that file's tests. Bump embassy-stm32 in the workspace Cargo.toml only once a release containing upstream commit 560ad7e91 exists, then switch to plain write_all and update CHANGELOG.md. Done means the NUCLEO-H563ZI full record.list reply arrives on fresh boot with no RX traffic, which needs hardware and is not a newcomer task yet.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

dependencies

Tracking issue for option 1 of #382.

Background

embassy-stm32 0.6.0's BufferedUart::write returns Poll::Pending without registering a TX waker when the ring has less free space than the chunk, so the first large reply after boot stalls after 256 B (see #382). #384 works around it in aimdb-embassy-adapter/src/io.rs: EmbassyUart's write_all (and the split writer's) goes through write_all_flushed, which flushes after every chunk. That costs a short gap on the line every 64 B.

Upstream fixed it on embassy main in 560ad7e91 ("stm32: fix embedded_io::Write impl for BufferedUartTx", 2026-07-17). It is not in a crates.io release yet; 0.6.0 is still the latest. Pinning embassy-stm32 to a git rev alone does not resolve (embassy-time-driver conflict), so it would mean moving the whole embassy-* family to git.

To do once a release with 560ad7e91 is out

  • Bump embassy-stm32 in the workspace Cargo.toml (and any embassy-* crates it pulls along).
  • Replace write_all_flushed with plain write_all in EmbassyUart and EmbassyUartWriter; revert the flush-count assertions in the io.rs tests.
  • Drop the workaround's Fixed note from aimdb-embassy-adapter/CHANGELOG.md, or record the removal.
  • Re-verify on the NUCLEO-H563ZI: fresh boot → serial_demo client (or serial_demo raw … record.list) straight away, on the serial, MQTT and KNX demos. The full record.list reply must arrive without any RX traffic to kick it. The aimdb CLI is not a valid check: its small hello reply arms the waker first, so it passes even on unfixed firmware.
Lingua principale
Rust
Stelle
101
Fork
20
Merge medio
2h 33m
PR unite (30g)
90

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di aimdb-dev/aimdb

Tutte le issue di aimdb-dev/aimdb

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.