This is the 30th changelog for Knurling-rs, our push to sustainably build better tooling for developing and debugging Rust software for embedded systems. Knurling-rs includes a suite of tools that make it easier to develop, log, debug, and test your embedded Rust libraries and applications!
Knurling-rs is supported by our sponsors on GitHub. If you're interested in seeing more projects like this, consider becoming a sponsor today!
Highlights 🎉
user survey results
Longed for. Whispered about. Finally ! The results of the Knurling-rs User Survey are here. 🎉🎉🎉
The data we gathered is the first step to deepen our understanding of our users (that's you!). What's your context? What are your needs and wishes? What can we do to come closer to our goal of improving the embedded Rust experience?
🥇 The most used tool is probe-run
with 72%, slightly ahead of defmt
with 65%. flip-link
is used by 27% of the respondents.
Fig.1 Usage of tools self-reported by respondents
Terms many people mention when getting asked for what they enjoy about knurling are "ease of use", "modern" and not very surprisingly "rust". Paving the way for people into embedded rust by providing easy to use and modern tooling is definitely a goal of us and we are happy that you think that we are getting there!
While most people use the knurling tools for hobby projects, there is still a large share of 38% who are also using them at work. It is great to see defmt
, probe-run
and flip-link
getting used in production!
Some people reported that they are not using rust at work, but would like to do so. Some weeks ago, we have written a guide on how to find a good first project to take Rust for a test drive, so you can try before you buy. Read it here!
The next steps for us are to talk to some of you in more detail and start implementing the learnings and suggestions we already got! 😁
deterministic bitflag values
A couple of days ago our testsuite started reporting failures on the nightly rust channel. In particular it was about the snapshot tests of the bitflags!
macro. The order of the values of ::ALL
attribute changed.
🧪 qemu/snapshot
bitflags (dev)
-INFO LargeFlags::ALL: ALL | MSB | NON_LITERAL
+INFO LargeFlags::ALL: MSB | ALL | NON_LITERAL
bitflags (release)
-INFO LargeFlags::ALL: ALL | MSB | NON_LITERAL
+INFO LargeFlags::ALL: MSB | ALL | NON_LITERAL
This was because each bitflags value is stored in its own symbol. Their order in the final executable is up to rustc/LLVM, or even the linker, which causes unreliable output that depends on toolchain details.
defmt#564 fixes that by storing an index in the symbol for bitflags values, which indicates their order in the source code. The decoder sorts by this index to put the values back in definition order. We now exactly match the output of the bitflags crate.
quicken flip-link build time vol. 2
You might remember our effort to improve the build time of flip-link: https://ferrous-systems.com/blog/knurling-changelog-28/#non-default-flip-link. This continues now!
Our goal is to make the experience of using flip-link
as easy as possible, and also enable the usage in CI-systems, where building for a long time is especially annoying.
While last time we gained a lot by disabling the default features of some of our dependencies, this time we've continued this effort by replacing the two dependencies anyhow
(flip-link#55) and tempfile
(flip-link#51) with custom code. This makes sense because we only need a subset of these dependencies functionality and by doing so avoid pulling in their sub-dependencies.
Running our build-time benchmark (hyperfine -p "cargo clean" -m 5 "cargo build" "cargo build --release"
) before and after the two PRs we gained 17.6% on the dev and 17.3% on the release channel. Remember that these measurements are highly dependent on your hardware, but should still give a good estimation.
measurements
commit | dev | release |
---|---|---|
6ff4b79 (before) | 4.18s | 5.07s |
514ffeb (after) | 3.44s | 4.19s |
Fig. 2 Build time of dev and release profile, before and after the patches
Improvements 🦀
defmt
- #564 Make order of
bitflags!
values deterministic - #557 Add
impl Format for TryFromSliceError
. Thank you newAM! - #556 Add
impl Format for TryFromIntError
. Thank you newAM!
Internal Improvements 🧽
defmt
- #561 Remove unused
cortex-m-rt
dependency inpanic-probe
. Thanks to Dirbaio! - #560 Update
cortex-m-rt
from0.6
to0.7
. Thank you newAM!
flip-link
- #55 Drop
anyhow
- #54 update & upgrade dependencies
- #53
xtest
: Cleartest-flip-link-app
starget/
-dir before each run - #52
xtest
: Pass--force
tocargo install
- #51 Avoid the
tempfile
dependency
Fixes 🔨
probe-run
- #246 Fix and enable deactivated tests for Windows
Version Update Notification 🆙
flip-link v0.1.5
Sponsor this work
Knurling-rs is mainly funded through GitHub sponsors. Sponsors get early access to the tools we are building and help us to support and grow the knurling tools and courses. Thank you to all of the people already sponsoring our work through the Knurling project!