diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index f2b6b7d..0000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,2 +0,0 @@ -* @rust-embedded/resources - diff --git a/.github/bors.toml b/.github/bors.toml deleted file mode 100644 index c3cfa37..0000000 --- a/.github/bors.toml +++ /dev/null @@ -1,4 +0,0 @@ -block_labels = ["needs-decision"] -delete_merged_branches = true -required_approvals = 1 -status = ["build"] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index ecdaf34..0000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: CI - -on: - push: - branches: [ staging, trying, master ] - pull_request: - -jobs: - build: - runs-on: ubuntu-20.04 - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - profile: minimal - toolchain: stable - - - name: Install Python dependencies - run: | - pip3 install --user python-dateutil linkchecker - - - name: Download and install Zola - run: | - wget https://github.com/getzola/zola/releases/download/v0.13.0/zola-v0.13.0-x86_64-unknown-linux-gnu.tar.gz - tar xvf zola-v0.13.0-x86_64-unknown-linux-gnu.tar.gz - - - name: Put pip binary directory into path - run: echo "~/.local/bin" >> $GITHUB_PATH - - - name: Build book - run: ./zola build - - - name: Check links - run: linkchecker public/ - - - name: Deploy book - if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }} - uses: peaceiris/actions-gh-pages@v3 - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: public - force_orphan: true - cname: blog.rust-embedded.org diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 85a1daf..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/public \ No newline at end of file diff --git a/themes/hyde/static/.gitkeep b/.gitkeep similarity index 100% rename from themes/hyde/static/.gitkeep rename to .gitkeep diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/2018-03-15/index.html b/2018-03-15/index.html new file mode 100644 index 0000000..fd6f5c6 --- /dev/null +++ b/2018-03-15/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/2018-03-29/index.html b/2018-03-29/index.html new file mode 100644 index 0000000..d9f2910 --- /dev/null +++ b/2018-03-29/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/2018-04-14/index.html b/2018-04-14/index.html new file mode 100644 index 0000000..804da91 --- /dev/null +++ b/2018-04-14/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/2018-04-28/index.html b/2018-04-28/index.html new file mode 100644 index 0000000..5a70292 --- /dev/null +++ b/2018-04-28/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/2018-05-15/index.html b/2018-05-15/index.html new file mode 100644 index 0000000..feb7188 --- /dev/null +++ b/2018-05-15/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/2018-07-01/index.html b/2018-07-01/index.html new file mode 100644 index 0000000..69b5eff --- /dev/null +++ b/2018-07-01/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/2018-07-15/index.html b/2018-07-15/index.html new file mode 100644 index 0000000..ece8e31 --- /dev/null +++ b/2018-07-15/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/2018-07-29/index.html b/2018-07-29/index.html new file mode 100644 index 0000000..1539517 --- /dev/null +++ b/2018-07-29/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/2018-08-12/index.html b/2018-08-12/index.html new file mode 100644 index 0000000..319e8e5 --- /dev/null +++ b/2018-08-12/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/2018-08-2x-psa-cortex-m-breakage/index.html b/2018-08-2x-psa-cortex-m-breakage/index.html new file mode 100644 index 0000000..3632dad --- /dev/null +++ b/2018-08-2x-psa-cortex-m-breakage/index.html @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

PSA: Cortex-M Breakage (LLD as the default linker)

+ +

The default linker for the 4 ARM Cortex-M targets listed below has changed from +arm-none-eabi-gcc to rust-lld in the latest nightly.

+ +

This will break the builds of binaries and cdylibs that were using the +old default linker (arm-none-eabi-gcc) and additionally pass extra flags to +the linker using any of these rustc flags: -C link-arg, -C link-args, -Z pre-link-arg or -Z pre-link-args. Building libraries (rlibs and +staticlibs) is not affected by this change.

+ +

This change won't affect stable users when it reaches the 1.30 release because, +as of 1.28, it's not possible to build binaries or cdylibs for those targets on +the stable channel. Building libraries for those targets is possible on stable +but it's not affected by this change.

+

Rationale

+

This breaking change was intentional.

+

We, the embedded WG, wanted to reduce the number of external tools required to +build embedded programs for the ARM Cortex-M architecture. By switching the +default linker to the LLD linker that's shipped with the Rust toolchain the user +no longer needs to install an ARM linker (like arm-none-eabi-gcc or +arm-none-eabi-ld) to build Rust programs.

+

Before landing this change we first consulted with the community if they +thought this breaking change was worth it. We received over 20 positive responses +representing the Cortex-M team (part of the embedded WG), the Tock OS project, +the embed-rs organization and independent developers.

+

The consensus was that it was worth to make the default configuration more self +contained and that if we were to make the change it had to be made before it +became possible to build binaries on stable otherwise it wouldn't be possible +to make this change without breaking stable builds.

+

How to fix your build

+

If you are affected by this change you'll observe a linker error with a message +similar to one shown below:

+
+$ # these are the custom linker flags of the project
+$ cat .cargo/config
+
+[target.thumbv7m-none-eabi]
+runner = 'arm-none-eabi-gdb'
+rustflags = [
+  "-C", "link-arg=-Wl,-Tlink.x",
+  "-C", "link-arg=-nostartfiles",
+]
+
+[build]
+target = "thumbv7m-none-eabi"
+
+$ cargo build
+error: linking with `rust-lld` failed: exit code: 1
+  |
+  = note: "rust-lld" "-flavor" "gnu" (..)
+  = note: rust-lld: error: unknown argument: -Wl,-Tlink.x
+          rust-lld: error: unknown argument: -nostartfiles
+
+

There are two ways to fix the problem.

+

Option A: switch back to GCC

+

The easiest way is to switch back to using arm-none-eabi-gcc as the linker. To +do so pass the flag -C linker=arm-none-eabi-gcc to rustc. In the above example +you can do that in the .cargo/config file.

+
+$ # these are the custom linker flags of the project
+$ cat .cargo/config
+
+[target.thumbv7m-none-eabi]
+runner = 'arm-none-eabi-gdb'
+rustflags = [
+  "-C", "linker=arm-none-eabi-gcc", # ADDED
+  "-C", "link-arg=-Wl,-Tlink.x",
+  "-C", "link-arg=-nostartfiles",
+]
+
+[build]
+target = "thumbv7m-none-eabi"
+
+$ cargo build && echo It works now
+It works now
+

Option B: tweak the additional linker arguments

+

The other option is to tweak the additional linker arguments so they'll be +accepted by LLD. In the above example the -nostartfiles flag can be dropped +because that's the default behavior of LLD, and the flags prefixed by -Wl, +will have to lose their prefix.

+
+$ # these are the custom linker flags of the project
+$ cat .cargo/config
+
+[target.thumbv7m-none-eabi]
+runner = 'arm-none-eabi-gdb'
+rustflags = [
+  "-C", "link-arg=-Tlink.x", # CHANGED
+# "-C", "link-arg=-nostartfiles", # REMOVED
+]
+
+[build]
+target = "thumbv7m-none-eabi"
+
+$ cargo build && echo It works now
+It works now
+
+

With this approach your build will no longer depend on an external linker.

+

Should I prefer option A or B?

+

If you are linking to a system installed C library like newlib-arm-none-eabi +then you should continue to use GCC. The default library search path of +arm-none-eabi-gcc includes the path to those libraries.

+

If you are not linking to any C code then you should prefer LLD then you won't +need to install the arm-none-eabi toolchain.

+ +
+ +
+ + + + diff --git a/404.html b/404.html new file mode 100644 index 0000000..f8414f0 --- /dev/null +++ b/404.html @@ -0,0 +1,3 @@ + +404 Not Found +

404 Not Found

diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..ed13a65 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +blog.rust-embedded.org diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md deleted file mode 100644 index 7afcb2c..0000000 --- a/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,37 +0,0 @@ -# The Rust Code of Conduct - -## Conduct - -**Contact**: [Embedded WG][wg] - -* We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic. -* On IRC, please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all. -* Please be kind and courteous. There's no need to be mean or rude. -* Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. -* Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. -* We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term "harassment" as including the definition in the [Citizen Code of Conduct](http://citizencodeofconduct.org/); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups. -* Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [Embedded WG][wg] immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. -* Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome. - -## Moderation - -These are the policies for upholding our community's standards of conduct. - -1. Remarks that violate the Rust standards of conduct, including hateful, hurtful, oppressive, or exclusionary remarks, are not allowed. (Cursing is allowed, but never targeting another user, and never in a hateful manner.) -2. Remarks that moderators find inappropriate, whether listed in the code of conduct or not, are also not allowed. -3. Moderators will first respond to such remarks with a warning. -4. If the warning is unheeded, the user will be "kicked," i.e., kicked out of the communication channel to cool off. -5. If the user comes back and continues to make trouble, they will be banned, i.e., indefinitely excluded. -6. Moderators may choose at their discretion to un-ban the user if it was a first offense and they offer the offended party a genuine apology. -7. If a moderator bans someone and you think it was unjustified, please take it up with that moderator, or with a different moderator, **in private**. Complaints about bans in-channel are not allowed. -8. Moderators are held to a higher standard than other community members. If a moderator creates an inappropriate situation, they should expect less leeway than others. - -In the Rust community we strive to go the extra step to look out for each other. Don't just aim to be technically unimpeachable, try to be your best self. In particular, avoid flirting with offensive or sensitive issues, particularly if they're off-topic; this all too often leads to unnecessary fights, hurt feelings, and damaged trust; worse, it can drive people away from the community entirely. - -And if someone takes issue with something you said or did, resist the urge to be defensive. Just stop doing what it was they complained about and apologize. Even if you feel you were misinterpreted or unfairly accused, chances are good there was something you could've communicated better — remember that it's your responsibility to make your fellow Rustaceans comfortable. Everyone wants to get along and we are all here first and foremost because we want to talk about cool technology. You will find that people will be eager to assume good intent and forgive as long as you earn their trust. - -The enforcement policies listed above apply to all official embedded WG venues; including official IRC channels (#rust-embedded); GitHub repositories under rust-embedded; and all forums under rust-embedded.org (forum.rust-embedded.org). - -*Adapted from the [Node.js Policy on Trolling](http://blog.izs.me/post/30036893703/policy-on-trolling) as well as the [Contributor Covenant v1.3.0](https://www.contributor-covenant.org/version/1/3/0/).* - -[wg]: https://github.com/rust-embedded/wg#organization diff --git a/README.md b/README.md deleted file mode 100644 index f0b88f1..0000000 --- a/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# The Embedded Rust Working Group Blog - -Content for [the Rust Embedded WG blog](https://blog.rust-embedded.org/). - -This blog is a collaborative effort publishing news about embedded development with the Rust programming language. - -## Contributing - -To contribute please find the latest entry in the [content directory](https://github.com/rust-embedded/blog/tree/master/content) of this repo which contains the draft for the next blog post, do the desired edits (via GitHub editor is fine) and create a PR (Pull Request) with your change(s). - -## Rules - -* Any content concerning Rust and embedded devices is relevant and welcome -* Proposed content can come from the original author or a third party -* Content with commercial background is fine, too, unless it's a plain advertisement -* Please mind the [Code of Conduct](CODE_OF_CONDUCT.md) diff --git a/config.toml b/config.toml deleted file mode 100644 index 7197834..0000000 --- a/config.toml +++ /dev/null @@ -1,30 +0,0 @@ -# The URL the site will be built for -base_url = "https://blog.rust-embedded.org" - -title = "Rust Embedded Working Group" -description = """ -Blog of the Embedded Rust Working Group -""" - -# Whether to automatically compile all Sass files in the sass directory -compile_sass = true - -# Whether to build a search index to be used later on by a JavaScript library -build_search_index = true - -theme = "hyde" - -generate_feed = true -feed_filename = "rss.xml" - -# Whether to do syntax highlighting -[markdown] -highlight_code = true - -[extra] -hyde_links = [ - {url = "https://rust-lang.org", name = "The Rust Language"}, - {url = "https://github.com/rust-embedded/wg", name = "Embedded WG"}, - {url = "https://github.com/rust-embedded/blog", name = "The Blog on GitHub"}, - {url = "https://blog.rust-embedded.org/rss.xml", name = "RSS Feed"}, -] diff --git a/content/2018-03-15-newsletter-1.md b/content/2018-03-15-newsletter-1.md deleted file mode 100644 index b0d98f1..0000000 --- a/content/2018-03-15-newsletter-1.md +++ /dev/null @@ -1,90 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 1" -date = 2018-03-15 -draft = false -in_search_index = true -template = "page.html" -aliases = ["2018-03-15/"] -+++ - -This is the first newsletter of the [Embedded WG]! We will be releasing this newsletter on a bi-weekly basis, and we are looking to highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue! - -## Highlights - -* [Tock-OS] has released the [1.0 of their kernel], gotten the Rust Userspace library back in order, and are working on a [new register interface] -* [Emilgardis], [jamesmunns] and [ryankurte] have become collaborators of the [svd] and [svd2rust] projects. -* [hannobraun], [ilya-epifanov], [thejpster], [therealprof] have become collaborators of the [embedded-hal] project. -* [dvc94ch] has created the [riscv-rust] organization for all your embedded RISCV needs! -* [dylanmckay] has begun [rebasing][avr-rust-rebase] the avr-rust/rust fork onto a recent rust-lang/rust version, bringing in LLVM 6.0 support. - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -### `embedded-hal` drivers - -This is a list of recently released drivers that are part of the [Weekly Driver Initiative]. There are currently 5 Released Drivers, 14 WIP Drivers, and lots of TODOs! - -* [pcein] has [released][pcein-blog] the third weekly driver for the [`adc-mcp3008`], an 8-channel 10-bit ADC. -* [japaric] has [released][enc-blog] the fourth weekly driver for the [`enc28j60`], an Ethernet controller with SPI interface. -* [dbrgn] has [released][mcp-blog] the fifth weekly driver for the [`mcp3425`], a 16-bit ADC with I2C interface. - -## Thanks - -* Thanks to everyone who has been commenting on the [Embedded WG Issues], especially for the [Embedded Rust Book] tracking issue! -* [varkor] has fixed a [long standing LLVM bug][gh41315], that artificially increased the binary size of Rust programs, and backported the patch to rustc. -* LLD is now being shipped with the Rust toolchain. [FenrirWolf] [patched Xargo][xargo-lld] so that Xargo users can make use of it too. - -## Help Wanted - -If you have an embedded project that could use contributors or maintainers, leave a comment for [the next newsletter]! - -* We are [pretty close][cortex-m-rt-lld] to being able to use LLD to link Rust programs compiled for ARM Cortex-M but there are some [LLD bugs][lld-issues] that still need to be fixed. Help reporting these bugs upstream would be greatly appreciated! -* Incremental compilation is in the roadmap for this year but it doesn't work with `no_std` binaries due to an [old rustc bug][gh18807] related to linking. Help us fix it! There's a proposed solution [here]. -* We want to explore stabilizing some assembly operations in core as an alternative to the unstable asm! macro. We would love some help identifying the assembly operations that need to be provided this way as some can be implemented in external assembly files without losing -semantics. Details in issue [#63]. - -[#63]: https://github.com/rust-lang-nursery/embedded-wg/issues/63 -[1.0 of their kernel]: https://www.tockos.org/blog/2018/talking-tock-35/ -[`adc-mcp3008`]: https://crates.io/crates/adc-mcp3008 -[`enc28j60`]: https://crates.io/crates/enc28j60 -[`mcp3425`]: https://crates.io/crates/mcp3425 -[avr-rust-rebase]: https://github.com/avr-rust/rust/pull/91 -[cortex-m-rt-lld]: https://github.com/japaric/cortex-m-rt/issues/53 -[dbrgn]: https://github.com/dbrgn -[dvc94ch]: https://github.com/dvc94ch -[dylanmckay]: https://github.com/dylanmckay -[Embedded Rust Book]: https://github.com/rust-lang-nursery/embedded-wg/issues/56 -[Embedded WG Issues]: https://github.com/rust-lang-nursery/embedded-wg/issues -[Embedded WG]: https://github.com/rust-lang-nursery/embedded-wg -[embedded-hal]: https://github.com/japaric/embedded-hal -[Emilgardis]: https://github.com/Emilgardis -[enc-blog]: http://blog.japaric.io/wd-4-enc28j60/ -[FenrirWolf]: https://github.com/FenrirWolf -[gh18807]: https://github.com/rust-lang/rust/issues/18807 -[gh41315]: https://github.com/rust-lang/rust/issues/41315 -[hannobraun]: https://github.com/hannobraun -[here]: https://github.com/rust-lang/rust/issues/47074#issuecomment-354588718 -[ilya-epifanov]: https://github.com/ilya-epifanov -[jamesmunns]: https://github.com/jamesmunns -[japaric]: https://github.com/japaric -[lld-issues]: https://github.com/japaric/cortex-m-rt/issues/53#issuecomment-371972935 -[mcp-blog]: https://blog.dbrgn.ch/2018/3/13/rust-mcp3425-driver/ -[new register interface]: https://www.tockos.org/blog/2018/talking-tock-36/ -[pcein]: https://github.com/pcein -[pcein-blog]: http://pramode.in/2018/02/24/an-introduction-to-writing-embedded-hal-based-drivers-in-rust/ -[riscv-rust]: https://github.com/riscv-rust -[ryankurte]: https://github.com/ryankurte -[svd2rust]: https://github.com/japaric/svd2rust -[svd]: https://github.com/japaric/svd -[the next newsletter]: https://github.com/rust-lang-nursery/embedded-wg/issues/65 -[thejpster]: https://github.com/thejpster -[therealprof]: https://github.com/therealprof -[Tock-OS]: https://github.com/helena-project/tock -[varkor]: https://github.com/varkor -[Weekly Driver Initiative]: https://github.com/rust-lang-nursery/embedded-wg/issues/39 -[xargo-lld]: https://github.com/japaric/xargo/pull/200 \ No newline at end of file diff --git a/content/2018-03-29-newsletter-2.md b/content/2018-03-29-newsletter-2.md deleted file mode 100644 index a41147b..0000000 --- a/content/2018-03-29-newsletter-2.md +++ /dev/null @@ -1,225 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 2" -date = 2018-03-29 -draft = false -in_search_index = true -template = "page.html" -aliases = ["2018-03-29/"] -+++ - -This is the second bi-weekly newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-lang-nursery/embedded-wg/issues/72 -[Embedded WG]: https://github.com/rust-lang-nursery/embedded-wg - -## Highlights - -* [dbrgn] has kicked off an investigation on how to [mock embedded-hal] to make testing sensors easier -* [emilgardis] and [ryankurte] are busy [refactoring] the [svd-parser] crate -* [japaric], [hannobraun], and [jamesmunns] from the [Embedded WG] attended the 2018 Rust All Hands in Berlin, working on our goal to make [stable embedded rust development] possible in 2018. See the bottom of this post for more details! - -[japaric]: https://github.com/japaric -[hannobraun]: https://github.com/hannobraun -[jamesmunns]: https://github.com/jamesmunns -[mock embedded-hal]: https://github.com/rust-lang-nursery/embedded-wg/issues/70 -[stable embedded rust development]: https://github.com/rust-lang-nursery/embedded-wg/issues/42 -[refactoring]: https://github.com/japaric/svd/issues/46 -[svd-parser]: https://github.com/japaric/svd -[ryankurte]: https://github.com/ryankurte -[emilgardis]: https://github.com/Emilgardis - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -### `embedded-hal` drivers - -This is a list of recently released drivers that are part of the [Weekly Driver Initiative]. There are currently 5 Released Drivers, 14 WIP Drivers, and lots of TODOs! - -* [danielgallagher0] has released their [hts221] humidity and temperature sensor driver -* [MrBuddyCasino] has released their I2C based [mcp9808] temperature sensor driver -* [Ilya Epifanov] has released their I2C based [si5351] CMOS clock generator driver, check out the [si5351 docs] for more info -* [Edwin Amsler] is working on their [axp209] PMIC driver -* [dbrgn] is working on their Sensirion [sgp30] low-power gas sensor driver -* [pcein] has started work on their [pcd8544] for SPI based LCD controllers used in displays like the Nokia 5110 -* [nordmoen] is working on their driver for the [hc-sr04] ultrasonic distance sensor - -[Weekly Driver Initiative]: https://github.com/rust-lang-nursery/embedded-wg/issues/39 -[danielgallagher0]: https://github.com/danielgallagher0 -[hts221]: https://medium.com/@pdanielgallagher/hts221-humidity-and-temperature-sensor-88056ea9e5fa -[MrBuddyCasino]: https://github.com/MrBuddyCasino -[mcp9808]: https://crates.io/crates/mcp9808 -[Ilya Epifanov]: https://github.com/ilya-epifanov -[si5351]: https://github.com/ilya-epifanov/si5351 -[si5351 docs]: https://docs.rs/si5351/0.1.5/si5351/ -[Edwin Amsler]: https://github.com/RandomInsano -[axp209]: https://github.com/RandomInsano/axp209-rs -[pcein]: https://github.com/pcein -[pcd8544]: https://github.com/pcein/pcd8544 -[dbrgn]: https://github.com/dbrgn -[sgp30]: https://github.com/dbrgn/sgp30-rs -[nordmoen]: https://github.com/nordmoen -[hc-sr04]: https://github.com/nordmoen/hc-sr04 - -### `embedded-hal` Board/Chip Support Crates - -* [DoumanAsh] has started work on their [stm32l4x6-hal] chip support crate - -[DoumanAsh]: https://github.com/DoumanAsh -[stm32l4x6-hal]: https://github.com/DoumanAsh/stm32l4x6_hal - -## Thanks - -* Thanks to all of the Rust Team and Working Group members who took time at the All Hands to tackle some important Embedded Issues -* Thanks to [Alex Chrichton] who pushed a fix to a [linker issue] mentioned in our [last newsletter] - -[Alex Chrichton]: https://github.com/alexcrichton -[linker issue]: https://github.com/rust-lang/rust/pull/49316 -[last newsletter]: https://github.com/rust-lang-nursery/embedded-wg/blob/master/newsletters/2018-03-15.md - -## Help Wanted - -* [Simon Sapin] posted some working code for the [DS3234] SPI RTC, and is looking for someone to turn it into a maintained crate! - -[Simon Sapin]: https://github.com/SimonSapin -[DS3234]: https://github.com/rust-lang-nursery/embedded-wg/issues/39#issuecomment-375262785 - -If you have an embedded project that could use contributors or maintainers, leave a comment for [the next newsletter]! - -# Special Feature: The Embedded WG at the 2018 Rust All Hands - -This week 15 or so Rust teams/working groups met for the Rust All Hands event in Berlin. Some members of the embedded WG were present and we had a chance to talk to the compiler, core and infra teams. - -These are the highlights of our talks. - -## Embedded Rust on stable - -We had previously identified 3 unstable features / issues that tie embedded development to the nightly channel in https://github.com/japaric/stable-embedded-rust. We talked to the other Rust teams about the possibility of addressing these issues in time for the 2018 edition release and the conclusion was that they thought that the timeline was possible. These are the 3 unstable features we are referring to: - -### Unstable Feature #1: `xargo` - -We'll ship a rust-std component (pre-compiled `core`+`compiler-builtins`) for the `thumb*` and `msp430` targets. This removes the need for `xargo` so people will be able to do something like the following to cross compile to ARM Cortex-M: - -```bash -rustup target add thumb7m-none-eabi -cargo build --target thumbv7m-none-eabi -``` - -**Tracking issue**: [rust-lang/rust#49382]. - -[rust-lang/rust#49382]: https://github.com/rust-lang/rust/issues/49382 - -### Unstable Feature #2: `compiler-builtins` - -`extern crate compiler_builtins` is unstable to directly use. The fix we have decided on is to inject that as part of the prelude you get from `#![no_std]`. - -So, today `#![no_std]` expands to something like this: - -``` rust -#![no_std] -extern crate core; -``` - -With our change the expansion will run like this: - -``` rust -#![no_std] -extern crate core; - -// but this doesn't #![feature(compiler_builtins_lib)] -extern crate compiler_builtins; -``` - -In the future we might want to merge `compiler-builtins` into `core` but that requires more effort and can still be done if we do the `#![no_std]` prelude approach right now. - -**Tracking issue:** [rust-lang/rust#49380] - -[rust-lang/rust#49380]: https://github.com/rust-lang/rust/issues/49380 - -### Unstable Feature #3: `panic_fmt` - -There's an accepted RFC (#2070) for a stable mechanism to select the behavior of `panic!` in `no_std` context, and there's a know issue where the arguments of `panic_fmt` are kept in the binary even when they are unused by the `panic_fmt` implementation (cf. [rust-lang/embedded-wg#41]). - -[rust-lang/embedded-wg#41]: https://github.com/rust-lang-nursery/embedded-wg/issues/41 - -The main concern here was whether we'll be able to fix the binary size problem with the accepted design or if we'll need some new design. The compiler team thinks that this can be fixed with the existing design using MIR only rlibs but it's unlikely this will get fixed in time for the edition release. [nagisa] will likely propose an alternate solution that involves having Cargo select the panic provider crate. - -[nagisa]: https://github.com/nagisa - -## Non critical unstable features - -There are some other unstable features that don't prevent you from doing embedded development, however they come up often when doing no-std development. We had a chat with people on the compiler team about them. - -### Unstable Feature #4: `const fn` - -This feature has been proposed for stabilization (cf. [rust-lang/rust#24111]). - -[rust-lang/rust#24111]: https://github.com/rust-lang/rust/issues/24111#issuecomment-376649804 - -### Unstable Feature #5: `asm!` - -**Background**: Some assembly operations can be implemented as external assembly files that are then called into using FFI; other ops though do need to be inlined into the function from which they are called to prevent losing semantics. Using external assembly file can be done on the stable channel. The second type of operation requires the unstable `asm!` macro. - -The compiler team is not 100% sure on whether they want to stabilize inline assembly for the edition release. The embedded WG has proposed an alternative proposal: expose *some* assembly operations that need to be inlined as "Rust intrinsics" -- in a similar fashion to how SIMD is being implemented; these intrinsics would be in the `core::asm::$ARCH` module and they could either be implemented by lowering to a LLVM intrinsic or using inline assembly. For example: - -``` rust -pub mod asm { - pub mod arm { - #[inline(always)] - pub fn cpsid() { - unsafe { - asm!("cpsid i" ::: "memory" : "volatile"); - } - } - } -} -``` - -These would be stable APIs with an unstable implementation. If LLVM assembler syntax changes, the implementations of these functions would have to be updated. - -The embedded WG will submit an RFC proposing the `asm` module and that will include a list of assembly operations that (a) are common and (b) need to be inlined for different architectures. - -### Unstable Feature #6: `#[used]` - -This experimental feature has been in the compiler for a while and it's required in some scenarios when using LTO to prevent the compiler from dead-stripping some function / `static` that needs to be in the final binary. - -We'll try to get it stabilized by the edition release but it's not a high priority feature. - -## Stability of the Embedded Targets - -We don't only want to make embedded Rust possible on stable; we also want to make sure the embedded targets don't regress. So we are going to add tests to rust-lang/rust CI to make sure regression block PRs from landing. - -That effectively will make some of the embedded targets into the tier 1 platform. The core team is fine with adding the `thumb*` targets (ARM Cortex-M) to tier 1. Less maintained, still in development and not fully mature targets like AVR, MSP430 and RISCV will become tier 2 -- they'll be tested but won't block PRs and rust-std binaries will be produced but it's not guaranteed there will be binaries available for all nightly / beta / stable releases. - -We'll open an issue to discuss with the infra team the exact tests we want to add and track progress on that, but have already told them about the kind of tests we want to add and they thought those kind of tests are possible to implement. The kind of tests we discussed were: - -- It compiles and links -- Runs the cross compiled binary in QEMU doesn't crash and exits with exit code 0. -- Tracking the binary size of a program compiled with `-Os` / `-Oz` and notify someone or fail the build if the size changes by +/- 5-10% or something. - -## LLVM backends that are not yet in rustc - -There are two embedded LLVM backends that have not yet been enabled in rustc for different reasons: AVR and RISCV. - -In the case of AVR the main reason is that some LLVM codegen bugs prevent you from building core for AVR. These bugs are related to 128-bit integers and formatting floats. The libs team discussed this some time ago and they decided they are fine with landing arch specific `#[cfg]` attributes to remove 128-bit integers and other things like float APIs. - -In the case of RISCV the LLVM backend is currently under active development and our current version of LLVM doesn't fully support RISCV. We would have to backport several patches to make RISCV work on our LLVM version. The core team feels OK with backporting those patches as long as they have already landed in upstream LLVM, and are not still under review. - -## Tooling - -Getting tooling for e.g. binary inspection (e.g. `objdump`) can be hard on some platforms (e.g. Windows) specially for architecture which currently are not too widely used (e.g. RISCV). We can improve the situation here by shipping llvm tools with the Rust toolchain -- with one set of those tools you can inspect all the architectures that Rust supports. These are the thoughts of the core / infra team regarding this: - -- We put these tools in the sysroot and have them always shipped with the Rust toolchain so no `rustup component add` required -- this is already the case with `lld`. It might not be possible to provide these tools on all platforms but it's very likely they'll be available on tier 1 platforms. -- We do *not* add these tools to the user `$PATH`. Instead some Cargo subcommand will be created by the embedded WG (e.g. `cargo objdump`) and that subcommand will look for `llvm-objdump` in the sysroot and do the right thing. -- We make no guarantees about the semantics and interface of these tools being preserved over time (e.g. CLI changes, user facing output format changes, etc.). - -### The Embedded Rust Book - -We decided on an initial audience for the embedded book; we will be targeting people that know some embedded stuff *and* some Rust. The main reason for this is that if someone knows one and not the -other then they can go and read existing Rust documentation or the Discovery book and then read the embedded book. For more details check [rust-lang-nursery/embedded-wg#56]. - -[rust-lang-nursery/embedded-wg#56]: https://github.com/rust-lang-nursery/embedded-wg/issues/56 diff --git a/content/2018-04-14-newsletter-3.md b/content/2018-04-14-newsletter-3.md deleted file mode 100644 index 1a30368..0000000 --- a/content/2018-04-14-newsletter-3.md +++ /dev/null @@ -1,78 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 3" -date = 2018-04-14 -draft = false -in_search_index = true -template = "page.html" -aliases = ["2018-04-14/"] -+++ - -This is the third bi-weekly newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-lang-nursery/embedded-wg/issues/84 -[Embedded WG]: https://github.com/rust-lang-nursery/embedded-wg - -## Highlights - -* Crates for the Embedded Rust Ecosystem are now being tracked in the [Awesome Embedded Rust] repository -* Progress has been made as part of the [Embedded Rust on Stable] initiative, including: - * `extern crate compiler_builtins` is [now included in the no_std prelude] - * [xargo no longer needed] for ARM Cortex-M development -* We also made some progress on simplifying the embedded development setup: You can now link Embedded Rust programs [using lld] -* [Wilfried] kicked off a blog series about [using embedded rust] -* [Andre Richter] is writing a tutorial for using Rust to write [bare metal Raspberry Pi 3] applications -* The Embedonomicon and the Embedded Rust Books are [now kept] in the [Embedded WG] repository, and pull requests are welcome! - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Embedded Rust on Stable]: https://github.com/rust-lang-nursery/embedded-wg/issues/42 -[now included in the no_std prelude]: https://users.rust-lang.org/t/psa-breaking-change-extern-crate-compiler-builtins-is-now-included-in-no-std-crates/16704 -[xargo no longer needed]: https://users.rust-lang.org/t/psa-you-no-longer-need-xargo-to-do-arm-cortex-m-development/16703 -[using lld]: https://users.rust-lang.org/t/cortex-m-rt-v0-4-0-now-you-can-link-arm-cortex-m-programs-using-lld/16751 -[Wilfried]: https://github.com/ithinuel -[using embedded rust]: http://ithinuel.me/embedded-rust-why/ -[Andre Richter]: https://github.com/andre-richter -[bare metal Raspberry Pi 3]: https://github.com/andre-richter/rust-raspi3-tutorial -[now kept]: https://github.com/rust-lang-nursery/embedded-wg/pull/78 - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* [japaric] released an initial version of [cargo-binutils], which will allow you to use LLVM's binutils (like `nm`, `size`, `objcopy`, etc.) in the format `cargo objcopy` (once [issue 49584] has landed) -* [myeisha] released the first version of their [thumb2-stack-size] tool, which helps determine the maximum stack size used in embedded code - -[japaric]: https://github.com/japaric -[cargo-binutils]: https://github.com/japaric/cargo-binutils -[issue 49584]: https://github.com/rust-lang/rust/issues/49584 -[myeisha]: https://github.com/myeisha -[thumb2-stack-size]: https://crates.io/crates/thumb2-stack-size - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | -| :--- | :----- | :---- | -| [Device Crates] | released | 13 | -| [HAL Impl Crates] | released | 10 | -| [Driver Crates Released] | released | 7 | -| [Driver Crates WIP] | WIP | 26 | - -[Weekly Driver Initiative]: https://github.com/rust-lang-nursery/embedded-wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip - -## Help Wanted - -* We need help working on [RFC2070], stabilizing usage of custom Panic behavior. [nagisa] is willing to mentor! -* If you use inline assembly in your Embedded Rust programs, help us capture what assembly operations are [used most often] so we can stabilize them as intrinsics - -[RFC2070]: https://github.com/rust-lang/rust/issues/44489#issuecomment-381324623 -[nagisa]: https://github.com/nagisa -[used most often]: https://github.com/rust-lang-nursery/embedded-wg/issues/63#issue-305114817 diff --git a/content/2018-04-28-newsletter-4.md b/content/2018-04-28-newsletter-4.md deleted file mode 100644 index cb9c8fa..0000000 --- a/content/2018-04-28-newsletter-4.md +++ /dev/null @@ -1,82 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 4" -date = 2018-04-28 -draft = false -in_search_index = true -template = "page.html" -aliases = ["2018-04-28/"] -+++ - -This is the fourth bi-weekly newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-lang-nursery/embedded-wg/issues/93 -[Embedded WG]: https://github.com/rust-lang-nursery/embedded-wg - -## Highlights - -* The [Embedded WG] IRC meetings are now explicitly public, and the agendas for the next meeting can be found in the [WG Issues], like [this issue] for the next meeting -* [David] shared his utility [`Form`], which takes a single `lib.rs` (like those created by `svd2rust` or `bindgen`), and splits it into structured modules. Check out the [`nrf52`] Chip Support Crate as an example, and try it out for your generated projects! -* [astro] shared [`managed`], A library that provides a way to logically own objects, whether or not heap allocation is available - -[WG Issues]: https://github.com/rust-lang-nursery/embedded-wg/issues -[this issue]: https://github.com/rust-lang-nursery/embedded-wg/issues/91 -[David]: https://github.com/djmcgill -[`Form`]: https://github.com/djmcgill/form -[`nrf52`]: https://github.com/jamesmunns/nrf52/tree/master/src -[astro]: https://github.com/astro -[`managed`]: https://crates.io/crates/managed - - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* [Daniel] started work on [`bluetooth-hci`], an abstraction layer for HCI based Bluetooth Controllers, and is using it in his [`bluenrg`] crate for STMicro's BlueNRG RF modules -* [cr1901] shared his [`AT2XT`] project, an adapter that allows use of low cost PS2 keyboards with older computers that expect (now very expensive) XT keyboards. The firmware for this project is based on `rtfm`, and runs on an `msp430` microcontroller. Check out the [short blurb] by [cr1901] summarizing the project -* [hannobraun] released v0.3 of his [`lpc82x`] Chip Support Crate for NXP's LPC82x family of microcontrollers, as well as v0.1 of [`lpc82x-hal`]. Check out the [lpc82x-hal announcement] here! -* [japaric] released v0.3.1 of [`heapless`] which now contains fixed capacity implementations of `HashMap` and `HashSet` that work on `no_std`, do not require an allocator, and use `u32` hashes (instead of the default `u64`). - -[`AT2XT`]: https://github.com/cr1901/AT2XT -[cr1901]: https://github.com/cr1901 -[japaric]: https://github.com/japaric -[`heapless`]: https://crates.io/crates/heapless -[Daniel]: https://github.com/danielgallagher0 -[`bluetooth-hci`]: https://github.com/danielgallagher0/bluetooth-hci -[`bluenrg`]: https://github.com/danielgallagher0/bluenrg -[hannobraun]: https://github.com/hannobraun -[`lpc82x`]: https://crates.io/crates/lpc82x -[`lpc82x-hal`]: https://crates.io/crates/lpc82x-hal -[lpc82x-hal announcement]: https://users.rust-lang.org/t/lpc82x-hal-0-1-hardware-abstraction-layer-for-nxp-lpc82x-mcus/17116 -[short blurb]: https://github.com/rust-lang-nursery/embedded-wg/pull/94#issuecomment-385172043 - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | -| :--- | :----- | :---- | -| [Device Crates] | released | 12 | -| [HAL Impl Crates] | released | 10 | -| [Board Support Crates] | released | 6 | -| [Driver Crates Released] | released | 7 | -| [Driver Crates WIP] | WIP | 27 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-lang-nursery/embedded-wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip - -## Help Wanted - -* The [Embedded WG] is looking for contributors for the [Rustfest Impl Period]. If you will be attending RustFest in Paris, let us know! -* Progress is being made towards [Stable Embedded Rust], try out the current preview, and we would love some feedback! - -[Stable Embedded Rust]: https://github.com/rust-lang-nursery/embedded-wg/issues/42#issuecomment-384524779 -[Rustfest Impl Period]: https://github.com/rust-lang-nursery/embedded-wg/issues/90 diff --git a/content/2018-05-13-the-path-towards-stable.md b/content/2018-05-13-the-path-towards-stable.md deleted file mode 100644 index ac1de1a..0000000 --- a/content/2018-05-13-the-path-towards-stable.md +++ /dev/null @@ -1,229 +0,0 @@ -+++ -title = "The Path Towards Stable" -date = 2018-05-13 -draft = false -in_search_index = true -template = "page.html" -+++ - -## Cortex-M library development now possible on beta and the path towards stable embedded Rust - -> **TL;DR** -> -> * 1.27 = embedded (Cortex-M) *library* development on stable -> * 1.28 or 1.29 = embedded (Cortex-M) *application* development on stable -> * We are making breaking changes in the ecosystem in order to move towards development on the -> stable channel -> * If you are a crate maintainer / author, make sure you test your crates with the new versions of -> `cortex-m` (and similar) on the current `beta` release of Rust -> * If the latest version of a dependency doesn't compile on `beta`, file an issue and/or ping us on -> the #rust-embedded IRC channel -> * Thanks for your patience! - -We are happy to announce that *library* development for the Cortex-M targets is now possible on the -beta channel! :tada: - - - -For example, to cross compile a library crate for the Cortex-M3 you would run these commands: - -``` console -$ # switch to the beta channel -$ rustup default beta - -$ # install the rust-std component (pre-compiled core) for the target -$ rustup target add thumbv7m-none-eabi - -$ # get some source to build -$ cargo clone cortex-m --vers 0.5.0 && cd cortex-m - -$ # then It Just Works -$ cargo build --target thumbv7m-none-eabi -``` - -What about embedded *application* development? There is just a single unstable feature that prevents -us from building a `no_std` binary on stable: the `panic_fmt` lang item. This unstable feature will -soon be removed in favor of the `#[panic_implementation]` feature ([implementation PR]), which is -slated for stabilization in time for the edition release (we are hoping to stabilize it as early as -1.28 but we'll see). - -[implementation PR]: https://github.com/rust-lang/rust/pull/50338 - -## Making the Cortex-M ecosystem work on stable - -"`no_std` binaries are *possible* on stable" is very different from "*my* embedded application -builds on stable". The later requires all the dependencies to also compile on stable. So we are -starting to migrate the Cortex-M ecosystem to work on stable. All the crates listed below are now -compiling on the beta channel. - -Legend: `crate-name` - link to CHANGELOG - link to stabilization PR - ~removed unstable features~ - -- [`cortex-m-quickstart`][c0] - [CHANGELOG][ch0] - [PR][p0] - -[c0]: https://docs.rs/cortex-m-quickstart/~0.3 -[ch0]: https://github.com/japaric/cortex-m-quickstart/blob/master/CHANGELOG.md#v030---2018-05-12 -[p0]: https://github.com/japaric/cortex-m-quickstart/pull/29 - -- [`cortex-m-rt`][c1] - [CHANGELOG][ch1] - [PR][p1] - ~asm!~ ~core_intrinsics~ ~global_asm!~ - ~lang_items~ ~linkage~ ~naked_functions~ ~used~ - -[c1]: https://crates.io/crates/cortex-m-rt/0.5.0 -[ch1]: https://github.com/japaric/cortex-m-rt/blob/master/CHANGELOG.md#v050---2018-05-12 -[p1]: https://github.com/japaric/cortex-m-rt/pull/69 - -- [`cortex-m-semihosting`][c2] - [CHANGELOG][ch2] - [PR][p2] - -[c2]: https://crates.io/crates/cortex-m-semihosting/0.3.0 -[ch2]: https://github.com/japaric/cortex-m-semihosting/blob/master/CHANGELOG.md#v030---2018-05-10 -[p2]: https://github.com/japaric/cortex-m-semihosting/pull/16 - -- [`cortex-m`][c3] - [CHANGELOG][ch3] - [PR][p3] - ~asm!~ ~const_fn~ - -[c3]: https://crates.io/crates/cortex-m/0.5.0 -[ch3]: https://github.com/japaric/cortex-m/blob/master/CHANGELOG.md#v050---2018-05-11 -[p3]: https://github.com/japaric/cortex-m/pull/88 - -- [`embedded-hal`][c4] - [CHANGELOG][ch4] - [PR][p4] - ~never_type~ - -[c4]: https://crates.io/crates/embedded-hal/0.2.0 -[ch4]: https://github.com/japaric/embedded-hal/blob/master/CHANGELOG.md#v020---2018-05-12 -[p4]: https://github.com/japaric/embedded-hal/pull/80 - -- [`f3`][c5] - [CHANGELOG][ch5] - [PR][p5] - -[c5]: https://crates.io/crates/f3/0.6.0 -[ch5]: https://github.com/japaric/f3/blob/master/CHANGELOG.md#v060---2018-05-12 -[p5]: https://github.com/japaric/f3/pull/93 - -- [`l3gd20`][c6] - [CHANGELOG][ch6] - [PR][p6] - ~Unsized~ - -[c6]: https://crates.io/crates/l3gd20/0.2.0 -[ch6]: https://github.com/japaric/l3gd20/blob/master/CHANGELOG.md#v020---2018-05-12 -[p6]: https://github.com/japaric/l3gd20/pull/4 - -- [`lsm303dlhc`][c7] - [CHANGELOG][ch7] - [PR][p7] - ~Unsized~ - -[c7]: https://crates.io/crates/lsm303dlhc/0.2.0 -[ch7]: https://github.com/japaric/lsm303dlhc/blob/master/CHANGELOG.md#v020---2018-05-12 -[p7]: https://github.com/japaric/lsm303dlhc/pull/4 - -- [`stm32f103xx`][c8] - [CHANGELOG][ch8] - [PR][p8] - ~const_fn~ ~global_asm!~ ~try_from~ - ~use_extern_macros~ ~used~ - -[c8]: https://crates.io/crates/stm32f103xx/0.10.0 -[ch8]: https://github.com/japaric/stm32f103xx/blob/master/CHANGELOG.md#v0100---2018-05-12 -[p8]: https://github.com/japaric/stm32f103xx/pull/24 - -- [`stm32f30x-hal`][c9] - [CHANGELOG][ch9] - [PR][p9] - ~never_type~ - -[c9]: https://crates.io/crates/stm32f30x-hal/0.2.0 -[ch9]: https://github.com/japaric/stm32f30x-hal/blob/master/CHANGELOG.md#v020---2018-05-12 -[p9]: https://github.com/japaric/stm32f30x-hal/pull/25 - -- [`stm32f30x`][c10] - [CHANGELOG][ch10] - [PR][p10] - ~const_fn~ ~global_asm!~ ~try_from~ - ~use_extern_macros~ ~used~ - -[c10]: https://crates.io/crates/stm32f30x/0.7.0 -[ch10]: https://github.com/japaric/stm32f30x/blob/master/CHANGELOG.md#v070---2018-05-12 -[p10]: https://github.com/japaric/stm32f30x/pull/16 - -- [`svd2rust`][c11] (output of) - [CHANGELOG][ch11] - [PR][p11] - ~const_fn~ ~global_asm!~ - ~try_from~ ~use_extern_macros~ ~used~ - -[c11]: https://crates.io/crates/svd2rust/0.13.0 -[ch11]: https://github.com/japaric/svd2rust/blob/master/CHANGELOG.md#v0130---2018-05-12 -[p11]: https://github.com/japaric/svd2rust/pull/203 - -There's a lot of breaking changes there but the most visible one is `cortex-m-rt` because it changes -how applications are structured. Check the [`cortex-m-quickstart`][c0] template for instructions on -how to set up an embedded application using the latest versions of everything. - -There are still a lot of crates that will need to be updated to work on beta. Among the more general -purpose ones we have [`heapless`] and [`cortex-m-rtfm`], which needs to be update to work with -`cortex-m-rt` v0.5.0. - -[`heapless`]: https://crates.io/crates/heapless -[`cortex-m-rtfm`]: https://crates.io/crates/cortex-m-rtfm - -### How you can help us - -Try to compile your Cortex-M crate using the beta channel! If your crate is an application the build -will certainly fail, but check if all the dependencies, excluding the [panic handler crate][phc], -compile on beta. If any dependency doesn't compile on the beta channel let the author know, but -first check if there's a new version of the crate that already compiles on the beta channel. And if -you feel up to the task you could even send a PR to the dependency to make it compile on beta -- the -list of stabilization PRs in the previous section may give you a clue on how to move the crate to -beta. - -If you are the author of a Cortex-M device crate, a crate generated using `svd2rust`, moving it to -stable only requires regenerating it using `svd2rust` v0.13.0. Do note that the generation process -[has changed] for the Cortex-M target; also make sure you bump the minor version when you publish a -new version. - -[has changed]: https://docs.rs/svd2rust/0.13.0/svd2rust/#usage - -If you are the author of a driver crate or a HAL implementation, please update your crate to use -v0.2.0 of `embedded-hal` and test that it builds on beta. Make sure you bump the minor version when -you publish a new version of your crate -- bumping the version of the `embedded-hal` dependency is a -breaking change (drivers that depend on `embedded-hal` v0.1.0 can't be used with HAL implementation -crates that depend on `embedded-hal` v0.2.0). - -If you are porting an application to the newest `cortex-m-*` crates you may hit these errors: - -- "error: requires `start` lang_item" on binary crates. You need to switch from the standard `main` - interface to `#![no_main]` + `entry!`. Use the [examples][qse] in the quickstart template as a - reference. - -[qse]: https://docs.rs/cortex-m-quickstart/0.3.0/cortex_m_quickstart/examples/_0_minimal/index.html - -- "error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple - variants". `const fn` is not a stable feature so it's not used in the API by default. The - `cortex-m` provides a `"const-fn"` feature to opt into this unstable feature and expose `const` - functions in the API; other dependencies should / probably provide a similar feature. - -## What does this all mean for you? - -To those of you who have been doing embedded development on nightly: things will get *much easier* -from now on. We have reduced the number of unstable features in core crates of the Cortex-M -ecosystem to **zero**. Although you will have to continue to use nightly for application development -you can expect zero breakage from these crates when updating the nightly compiler. There is one -expected breakage coming soon though: `panic_fmt` will be removed as announced above. This will -break the [panic handler crates][phc]; however, the breakage will be isolated to those crates and -the fix will consist of simply updating the dependency version. - -[phc]: https://crates.io/keywords/panic-impl - -To those of you who have been meaning to dive into embedded Rust development: we'll soon be done -with our "embedded Rust on stable" tasks and we'll move our focus to documenting the embedded -development process, tooling and ecosystem. The [embedded Rust book][book] will become the resource -to get started on embedded Rust, but it doesn't quite exist right now. - -[book]: https://github.com/rust-lang-nursery/embedded-wg/blob/master/books/embedded-rust-book/README.md - -## What about architectures other than ARM Cortex-M? - -The path carved for ARM Cortex-M can be followed by the other architectures (ARM Cortex-R, AVR, -MSP430, RISCV, etc.). Each architecture presents its own extra set of challenges though: - -- MSP430 being the second oldest embedded / `no_std` target is the closest one to make it to stable - (as a tier 2 target) by the edition release. The main blocker is that `extern "msp430-interrupt"` - is not available on stable but I think that may be possible to work around using external C / - assembly files + FFI. - -- Both AVR and RISCV are blocked from being included in the Rust compiler due to either the - immaturity of the LLVM backend or LLVM backend bugs. Not many (embedded) Rust developers can also - hack LLVM backends so we are short handed on the AVR front; OTOH, the RISCV is being actively - developed by third parties so it's probably just a matter of time before we add it to rustc. - -- ARM Cortex-R LLVM backend is probably in good shape due to the similarities between its - instruction set and the ARM Cortex-M instruction set, so adding the target to the compiler should - be straightforward. However, the crate ecosystem is nonexistent at this point so there's a lot of - work to be done on that front. - ---- - -This work is part of the [embedded WG][ewg] effort towards [making embedded development possible on -the stable channel][stable]. (We are almost done! :tada:) - -[ewg]: https://github.com/rust-lang-nursery/embedded-wg -[stable]: https://github.com/rust-lang-nursery/embedded-wg diff --git a/content/2018-05-15-newsletter-5.md b/content/2018-05-15-newsletter-5.md deleted file mode 100644 index 35a6f0b..0000000 --- a/content/2018-05-15-newsletter-5.md +++ /dev/null @@ -1,120 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 5" -date = 2018-05-15 -draft = false -in_search_index = true -template = "page.html" -aliases = ["2018-05-15/"] -+++ - -This is the fifth bi-weekly newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-lang-nursery/embedded-wg/issues/98 -[Embedded WG]: https://github.com/rust-lang-nursery/embedded-wg - -## Highlights - -* We had a bonus Embedded-WG Newsletter this week about the [path forward] towards stable Embedded Rust, and what you can do as a crate maintainer to help with the effort! -* The Tock-OS project posted about their [MMIO Registers], contrasting them to crates generated by `svd2rust` -* There were a couple of great posts about developing with Rust on Embedded targets from [219 Design] and [nercury] -* If Game Boy Advance development with Rust sounds interesting to you, make sure you check out the [rusty-TONC] and [stdgba] projects - -[path forward]: https://users.rust-lang.org/t/cortex-m-library-development-now-possible-on-beta-and-the-path-towards-stable-embedded-rust/17420 -[MMIO Registers]: https://www.tockos.org/blog/2018/mmio-registers/ - -[219 Design]: https://www.219design.com/rust-on-the-stmicro-nucleo/ -[nercury]: https://nercury.github.io/rust/embedded/experiments/2018/04/29/rust-embedded-01-discovery-vl-flipping-bits.html - -[rusty-TONC]: https://github.com/tbelaire/rusty-TONC -[stdgba]: https://github.com/jkarns275/stdgba - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* [Kjetil Kjeka] shared their crate [uX] pronounced as "unsigned X" for working with non standard integer types (like `u7`, `u63`, etc) which act like the built in unsigned integer types -* [Adam Greig] shared two crates: - * [stm32-rs], a tool for cleaning up Chip Support Crates for STM32 microcontrollers and making it easier to work between multiple devices - * [blethrs], an ethernet bootloader for STM32F4 chips, using the [smoltcp] networking stack -* [James Waples] released a driver for [ssd1306] based OLED displays, read the [announcement blog] for more info -* [John Scarrott] released a Chip Support Crate for the [nRF52840] chip from Nordic Semiconductor -* [Kerem] posted a new Chip Support Crate for the Nordic Semiconductor nRF51, and joined development of the existing [nrf51-hal] HAL Impl Crate -* [Teo Röijezon] released a combo of a [stm32f0x0] Chip Support Crate, as well as a [stm32f0x0-hal] HAL Impl Crate -* [Rahul Thakoor] shipped a driver crate for [mma7660fc] based 3-axis accelerometers. Check out the [mma7660fc blog] announcement -* [whitequark] shared their [log_buffer] crate for storing UTF-8 text in a ring buffer, and accessing it as `&str`s -* [Michael] shared [proptest], a tool for performing Property Based Testing, which now has no_std support thanks to a PR from [Zack Pierce] -* [theJPster] has been working on [Monotron] - a small 8-bit style home computer with a ROM written in Rust - ready for his talk at [RustFest]. For this, he's been working on crates for [generating VGA video], [decoding PS/2 keyboard scancodes] and [interactive text-based menu systems]. - -[Kjetil Kjeka]: https://github.com/kjetilkjeka -[uX]: https://crates.io/crates/ux - -[Adam Greig]: https://github.com/adamgreig -[stm32-rs]: https://github.com/adamgreig/stm32-rs -[blethrs]: https://github.com/AirborneEngineering/blethrs -[smoltcp]: https://github.com/m-labs/smoltcp - -[James Waples]: https://github.com/jamwaffles -[ssd1306]: https://crates.io/crates/ssd1306 -[announcement blog]: https://wapl.es/electronics/rust/2018/04/30/ssd1306-driver.html - -[John Scarrott]: https://github.com/jscarrott -[nRF52840]: https://crates.io/crates/nrf52840 - -[Kerem]: https://github.com/krk -[nrf51-hal]: https://crates.io/crates/nrf51-hal - -[Teo Röijezon]: https://github.com/teozkr -[stm32f0x0]: https://crates.io/crates/stm32f0x0 -[stm32f0x0-hal]: https://crates.io/crates/stm32f0x0-hal - -[Rahul Thakoor]: https://github.com/rahul-thakoor -[mma7660fc]: https://crates.io/crates/mma7660fc -[mma7660fc blog]: https://rahul-thakoor.github.io/an-i2c-rust-driver-for-mma7660fc-based-3-axis-digital-accelerometer/ - -[whitequark]: https://github.com/whitequark -[log_buffer]: https://github.com/whitequark/rust-log_buffer - -[Michael]: https://github.com/memoryruins -[proptest]: https://github.com/AltSysrq/proptest -[Zack Pierce]: https://github.com/ZackPierce - -[theJPster]: https://github.com/thejpster -[Monotron]: https://github.com/thejpster/monotron -[RustFest]: https://paris.rustfest.eu/ -[generating VGA video]: https://github.com/thejpster/vga-framebuffer-rs -[decoding PS/2 keyboard scancodes]: https://github.com/thejpster/pc-keyboard -[interactive text-based menu systems]: https://github.com/thejpster/menu - - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | -| :--- | :----- | :---- | -| [Device Crates] | released | 12 | -| [HAL Impl Crates] | released | 10 | -| [Board Support Crates] | released | 6 | -| [Driver Crates Released] | released | 9 | -| [Driver Crates WIP] | WIP | 29 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-lang-nursery/embedded-wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip - -## Help Wanted - -* Make sure to check out the [path forward] post, and report any issues you find! -* Raspberry Fields is a festival of digital making, centered around the Raspberry Pi. It's taking place on Saturday 30 June and Sunday 1 July, in Cambridge, England. [theJPster] would love to set up a Rust stall, to talk to everyone about the advantages Rust offers and how they can get in to Rust on the Raspberry Pi. But to make that work, he needs your help! If you're interested, contact [@therealjpster] on Twitter or email . -* Some members of the embedded WG will attend the [RustFest] impl days in two weeks. If you want to make Rust awesome for embedded development come help us! We have [tasks with mentors and some hardware to give away!][impl-days]. Let us know if you are interested in helping out by commenting on that issue. - -[@therealjpster]: https://twitter.com/therealjpster -[impl-days]: https://github.com/rust-lang-nursery/embedded-wg/issues/90#issuecomment-389321129 diff --git a/content/2018-05-28-newsletter-6.md b/content/2018-05-28-newsletter-6.md deleted file mode 100644 index d4fcdb4..0000000 --- a/content/2018-05-28-newsletter-6.md +++ /dev/null @@ -1,116 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 6" -date = 2018-07-01 -draft = false -in_search_index = true -template = "page.html" -aliases = ["2018-07-01/"] -+++ - -This is the sixth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - - - -This newsletter covers the past ~6 weeks. - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-lang-nursery/embedded-wg/issues/103 -[Embedded WG]: https://github.com/rust-lang-nursery/embedded-wg - -## Highlights - -* [Jacob Creedon] gave an introduction talk about using Rust with embedded systems at the [Teardown Conference] in Portland, check out [Jacob's Slides] or the [Video of Jacob's Talk] -* The [Embedded WG]'s own [theJPster] talked about the [Monotron] at [RustFest Paris], you can see [JP's Slides], or check out the [Video of JP's Talk] -* [Jorge Aparicio], [Vadzim Dambrouski] and [Hanno Braun] from the embedded WG also attended RustFest Paris and the following impl days. They worked towards embedded Rust on stable, better embedded Rust tooling and better MSP430 support; gave away some hardware; and chatted with lots of people interested in embedded Rust. -* The `#[panic_implementation]` feature has [landed][panic-impl-pr] and has been proposed for stabilization ([FCP merge][panic-impl-fcp]). This feature lets you define the behavior of `panic!` in `#[no_std]` context and it's the final piece for making embedded Rust development possible on the stable channel. :tada: -* The [Discovery] book has been updated to work with the [preview of stable embedded Rust]. -* A new [`llvm-tools` rustup component] is now available on recent nightly releases. It contains LLVM tools to inspect Rust binaries regardless of their target architecture. One set of tools for ARM Cortex-M, MSP430, x86_64 and other architectures! - -[theJPster]: https://github.com/thejpster -[Monotron]: https://github.com/thejpster/monotron -[RustFest Paris]: https://paris.rustfest.eu/ -[JP's Slides]: http://railwayelectronics.blogspot.co.uk/2018/05/talking-about-monotron-at-rustfest.html -[Video of JP's Talk]: https://media.ccc.de/v/rustfest18-11-monotron_making_a_80s_style_computer_with_a_20_dev_kit - -[Jacob Creedon]: https://github.com/jcreedon -[Jacob's Slides]: http://github.jcreedon.com/static/EmbeddedWithRustSlidesTeardown2018.pdf -[Video of Jacob's Talk]: http://youtu.be/g25xsK3HKkE -[Teardown Conference]: https://www.crowdsupply.com/teardown/portland-2018 - -[Jorge Aparicio]: https://github.com/japaric -[Vadzim Dambrouski]: https://github.com/pftbest -[Hanno Braun]: https://github.com/hannobraun - -[panic-impl-pr]: https://github.com/rust-lang/rust/pull/50338 -[panic-impl-fcp]: https://github.com/rust-lang/rust/issues/44489#issuecomment-398965878 - -[Discovery]: https://github.com/japaric/discovery -[preview of stable embedded Rust]: https://users.rust-lang.org/t/cortex-m-library-development-now-possible-on-beta-and-the-path-towards-stable-embedded-rust/17420 - -[`llvm-tools` rustup component]: https://internals.rust-lang.org/t/llvm-tools-a-new-rustup-component-for-binary-inspection-objdump-nm-size-and-profiling-prota/7830 - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* [rudihorn] shared [light-cli], a lightweight, no_std, and heapless CLI tool -* [Paolo Teti] shared [ti-hercules-bsp], a board support package for Texas Instruments TMS570 MCUs, used by safety critical industries such as automotive and aerospace -* [Marcel Buesing] posted their driver crate for the [bme680] environmental sensor -* [Roy Smeding] is working on support for the [stm32f334] chip from STMicro -* The [Embedded WG]'s own [Jonathan Soo] announced his project, [Bobbin SDK], a set of tools to make it easier to share code between different chips from the same or different vendors -* [Eitan Mosenkis] did [a major update] of their [esp-rs] script which produces a project to compile Rust code for the ESP8266 via the [mrustc] Rust to C compiler. -* [Hanno Braun] released v0.2 of [lpc82x-hal], which includes a radical simplification of the API, allowing for stronger compile-time state guarantees. Check out the [lpc82x-hal announcement] for more info! - -[rudihorn]: https://github.com/rudihorn -[light-cli]: https://github.com/rudihorn/light-cli - -[Paolo Teti]: https://github.com/paoloteti -[ti-hercules-bsp]: https://github.com/paoloteti/ti-hercules-bsp - -[Marcel Buesing]: https://github.com/marcelbuesing -[bme680]: https://github.com/marcelbuesing/bme680 - -[Jonathan Soo]: https://github.com/jcsoo -[Bobbin SDK]: http://www.bobbin.io/blog/post/bobbin_sdk_richer_hardware/ - -[Roy Smeding]: https://github.com/roysmeding -[stm32f334]: https://github.com/roysmeding/stm32f334/ - -[Eitan Mosenkis]: https://github.com/emosenkis -[a major update]: https://users.rust-lang.org/t/rust-on-esp8266/12933/8 -[esp-rs]: https://github.com/emosenkis/esp-rs -[mrustc]: https://github.com/thepowersgang/mrustc - -[lpc82x-hal]: https://github.com/braun-robotics/rust-lpc82x-hal -[lpc82x-hal announcement]: https://users.rust-lang.org/t/lpc82x-hal-0-2-rust-on-lpc82x-microcontrollers/18144 - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | -| :--- | :----- | :---- | -| [Device Crates] | released | 14 | -| [HAL Impl Crates] | released | 11 | -| [Board Support Crates] | released | 6 | -| [Driver Crates Released] | released | 9 | -| [Driver Crates WIP] | WIP | 30 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-lang-nursery/embedded-wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip - -## Help Wanted - -* We are seeking [input about the user interface] the [`cargo-binutils`] subcommands should expose. These subcommands provide access to the LLVM tools provided by the `llvm-tools` rustup component mentioned above. -* Are you using embedded Rust in production? We are [collecting commercial testimonials] about embedded Rust for the webpage the embedded WG will have on the revamped rust-lang.org website. Even if you can't give details about the product you are building we would still love to hear from you! - -[input about the user interface]: https://github.com/japaric/cargo-binutils/issues -[`cargo-binutils`]: https://github.com/japaric/cargo-binutils - -[collecting commercial testimonials]: https://github.com/rust-lang-nursery/embedded-wg/issues/108 diff --git a/content/2018-07-15-newsletter-7.md b/content/2018-07-15-newsletter-7.md deleted file mode 100644 index 1b4263d..0000000 --- a/content/2018-07-15-newsletter-7.md +++ /dev/null @@ -1,83 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 7" -date = 2018-07-15 -draft = false -in_search_index = true -template = "page.html" -aliases = ["2018-07-15/"] -+++ - -This is the seventh newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-lang-nursery/embedded-wg/issues/121 -[Embedded WG]: https://github.com/rust-lang-nursery/embedded-wg - -## Highlights - -* We have launched the [Embedded WG Twitter]! We'll be publishing things like our newsletter here, so go ahead and follow to stay up to date. If you have something you're working on and want to share, feel free to @ us so we can retweet it! -* Work started on [porting] MUSL's `libm` (for math functions like `sin`, `cos`, etc.) has started, and already has [26 of 32 functions] ported! This crate will hopefully be included in the `core` of Rust, so it can be used by `no_std` targets such as embedded or wasm. -* The Atomic\*.{load,store} API is [now available] for the thumbv6m and msp430 targets. - -[Embedded WG Twitter]: https://twitter.com/rustembedded -[26 of 32 functions]: https://github.com/japaric/libm/issues?q=is%3Aopen+is%3Aissue+milestone%3Awasm -[porting]: https://github.com/japaric/libm -[now available]: https://github.com/rust-lang/rust/pull/51953 - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* This week we have two Multirotor Flight Controller projects starting in Rust! They are both based on the [stm32f3] family of chips from STMicro. - * [Emil Fresk] posted [on Twitter] about his project [TrustFlight], which is an open source, Rust based software library for controlling the [TrustFlight HW] he designed. - * [Josh Mcguigan] announced in his [Blog Post] that he is planning to develop a firmware package for the [BetaFPV F3], which is an off the shelf flight controller -* We also have two projects aiming to make use of Rust on the Raspberry Pi a little easier: - * [Adam Gausmann] shared his [Rustberry] project [on Reddit], which includes register maps and an I/O library for the Raspberry Pi - * [Rahul Thakoor] shared his [rust_gpiozero] crate [on Medium], which is based on the Python library of similar name. He has also started writing [a series of tutorials] for developers new to working with physical hardware. - - -[stm32f3]: https://github.com/japaric/stm32f30x-hal -[Emil Fresk]: https://github.com/korken89 -[on Twitter]: https://twitter.com/korken89/status/1016975023930830848 -[TrustFlight]: https://github.com/korken89/trustflight_firmware -[TrustFlight HW]: https://github.com/korken89/trustflight_hardware -[Josh Mcguigan]: https://github.com/JoshMcguigan -[Blog Post]: https://www.joshmcguigan.com/blog/betafpv-drone-flight-controller-hello-rust/ -[BetaFPV F3]: https://betafpv.com/products/beta75-bnf-tiny-whoop-quadcopter - -[Adam Gausmann]: https://gitlab.com/AGausmann -[Rustberry]: https://gitlab.com/AGausmann/rustberry -[on Reddit]: https://www.reddit.com/r/rust/comments/8x1ayd/calling_all_raspberry_pi_owners_rustberry_010_has/ -[Rahul Thakoor]: https://github.com/rahul-thakoor -[rust_gpiozero]: https://github.com/rahul-thakoor/rust_gpiozero -[on Medium]: https://medium.com/@rahulthakoor/physical-computing-with-rust-on-raspberry-pi-a7b6f34261a6 -[a series of tutorials]: https://rahul-thakoor.github.io/physical-computing-rust/ - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Device Crates] | released | 14 | 0 | -| [HAL Impl Crates] | released | 11 | 0 | -| [Board Support Crates] | released | 6 | 0 | -| [Driver Crates Released] | released | 9 | 0 | -| [Driver Crates WIP] | WIP | 30 | 0 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-lang-nursery/embedded-wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip - -## Help Wanted - -* Help contribute to development of [Rust's libm] to get math functions built in to `core` for `no_std` targets! - -[Rust's libm]: https://github.com/japaric/libm diff --git a/content/2018-07-29-newsletter-8.md b/content/2018-07-29-newsletter-8.md deleted file mode 100644 index d8e40af..0000000 --- a/content/2018-07-29-newsletter-8.md +++ /dev/null @@ -1,108 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 8" -date = 2018-07-29 -draft = false -in_search_index = true -template = "page.html" -aliases = ["2018-07-29/"] -+++ - -This is the eighth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-lang-nursery/embedded-wg/issues/134 -[Embedded WG]: https://github.com/rust-lang-nursery/embedded-wg - -## Highlights - -* [libm], the `no_std` port of MUSL's math library led by [japaric] has finished its' first release! It can now be used by embedded (or `wasm`!) targets that need support for math functions. -* [droogmic] is working on [microrust], a port of [japaric]'s Discovery book for the BBC MicroBit, based on the Nordic nRF51 -* [Hideki Sekine] and [Vaishali Thakkar] have landed initial support for an [Embedded CI Harness] in the [`rust-lang/rust`] repo as part of the [Increasing Rust's Reach] project. This opens the door for tests that will help prevent regressions in `rustc` and `cargo` for ARM Cortex-M targets -* [CMSIS intrinsics] for ARM Cortex processors have landed in [stdsimd]. Check out the [the docs] in nightly soon for info, thanks to [Paolo Teti] and [japaric]! -* [Ashley Williams] released [cargo-generate], a CLI tool for generating Cargo projects from a template, reducing the need to manually write boilerplate code. If you write some embedded templates, [let us know]! - -†: The CMSIS intrinsics will show up in the docs after the next successful nightly build (after 2018-07-30) - -[japaric]: https://github.com/japaric -[libm]: https://github.com/japaric/libm#libm - -[droogmic]: https://github.com/droogmic -[microrust]: https://droogmic.github.io/microrust - -[Embedded CI Harness]: https://github.com/rust-lang/rust/pull/52465 -[Increasing Rust's Reach]: http://reach.rust-lang.org/ -[Hideki Sekine]: https://github.com/sekineh -[Vaishali Thakkar]: https://github.com/nerdyvaishali -[`rust-lang/rust`]: https://github.com/rust-lang/rust - -[Ashley Williams]: https://github.com/ashleygwilliams -[cargo-generate]: https://crates.io/crates/cargo-generate -[her tweet]: https://twitter.com/ag_dubs/status/1022191996293865472 -[let us know]: https://twitter.com/rustembedded - -[CMSIS intrinsics]: https://github.com/rust-lang-nursery/stdsimd/pull/518 -[stdsimd]: https://github.com/rust-lang-nursery/stdsimd -[the docs]: https://doc.rust-lang.org/nightly/core/arch/arm/index.html -[Paolo Teti]: https://github.com/paoloteti - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* [David McGillicuddy] has released his crate, [eight-segment], an `embedded-hal` driver for displaying digits on 8 segment displays like the HDSP H-101 -* [James Waples] announced the newest release of his [embedded-graphics] library [in a tweet]. This version fixes some small issues, as well as provides functionality to save memory -* [Mart Roosmaa] released [bolos-rs], a 3rd party Rust SDK for the Ledger Nano cryptocurrency wallet. Check out his [Medium post] for more info! -* The [cc1101] crate can now recieve radio packets! Check out [the reddit post] by [Daniel Svensson], as well as [his blog post] for more info - -[cc1101]: https://crates.io/crates/cc1101 -[the reddit post]: https://www.reddit.com/r/rust/comments/8zk03w/cc1101_crate_can_now_receive_radio_packets/ -[Daniel Svensson]: https://github.com/dsvensson -[his blog post]: https://dsvensson.github.io/posts/2018-07-13-Electrosmog-trapping-with-CC1101.html#article - -[David McGillicuddy]: https://github.com/djmcgill -[eight-segment]: https://crates.io/crates/eight-segment - -[James Waples]: https://github.com/jamwaffles -[in a tweet]: https://twitter.com/jam_waffles/status/1022837939041132545 -[embedded-graphics]: https://crates.io/crates/embedded-graphics - -[Mart Roosmaa]: https://github.com/roosmaa -[Medium post]: https://medium.com/@roosmaa/bringing-rust-to-ledger-hardware-wallet-ccf1356a7de1 -[bolos-rs]: https://github.com/roosmaa/bolos-rs - - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Device Crates] | released | 14 | 0 | -| [HAL Impl Crates] | released | 11 | 0 | -| [Board Support Crates] | released | 8 | +2 | -| [Driver Crates Released] | released | 11 | +2 | -| [Driver Crates WIP] | WIP | 35 | +5 | -| [no-std crates] | released | 12 | +12 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-lang-nursery/embedded-wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates - -## Help Wanted - -* The Embedded-WG is looking for someone to write an [RFC for ARM Intrinsics] to get them stabilized -* [Jonathan Pallant] is looking for ideas to implement for the Monotron project. Check out the [monotron blog post] for more details! -* The [libm] project is looking for help with [refactoring] in order to better support chips without hardware double-floating-point support - -[Jonathan Pallant]: https://github.com/thejpster -[RFC for ARM Intrinsics]: https://github.com/rust-lang-nursery/embedded-wg/issues/63#issuecomment-408509178 -[monotron blog post]: http://railwayelectronics.blogspot.com/2018/07/where-next-for-monotron.html -[refactoring]: https://github.com/japaric/libm/milestone/3 \ No newline at end of file diff --git a/content/2018-08-12-newsletter-9.md b/content/2018-08-12-newsletter-9.md deleted file mode 100644 index 73e52ce..0000000 --- a/content/2018-08-12-newsletter-9.md +++ /dev/null @@ -1,67 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 9" -date = 2018-08-12 -draft = false -in_search_index = true -template = "page.html" -aliases = ["2018-08-12/"] -+++ - -This is the ninth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-embedded/wg/issues/164 -[Embedded WG]: https://github.com/rust-embedded/wg - -## Highlights - -* The Embedded Working Group has moved! You can find our new coordination repo at [rust-embedded/wg] on GitHub, and crates maintained by the working group in the [rust-embedded] organization -* The Embedded Working Group has grown! We are now 18 people grouped in the following 6 teams to allow for better focus on these topics: - * The **Cortex-M** team develops and maintains the core of the Cortex-M crate ecosystem - * The **HAL team** develops and maintains crates that ease the development of Hardware Abstraction Layers, Board Support Crates and drivers - * The **MS430 team** develops and maintains the core of the MSP430 crate ecosystem - * The **RISCV team** develops and maintains the core of the RISCV crate ecosystem - * The **Resources team** develops, maintains and curates resources on embedded Rust - * The **Tools team** maintains and develops core embedded tools - -[rust-embedded/wg]: https://github.com/rust-embedded/wg -[rust-embedded]: https://github.com/rust-embedded - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* [rust-lang/rust#52787] has landed, adding support in `nightly` for the RISC-V architecture as a bare-metal target! - -[rust-lang/rust#52787]: https://github.com/rust-lang/rust/pull/52787 - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Device Crates] | released | 14 | 0 | -| [HAL Impl Crates] | released | 11 | 0 | -| [Board Support Crates] | released | 9 | +1 | -| [Driver Crates Released] | released | 11 | 0 | -| [Driver Crates WIP] | WIP | 38 | +3 | -| [no-std crates] | released | 12 | 0 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-lang-nursery/embedded-wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates - -## Help Wanted - -* We're considering changing to LLD as the default linker for `thumb` targets. Check out the RFC at [rust-embedded/wg#160], and let us know what you think - -[rust-embedded/wg#160]: https://github.com/rust-embedded/wg/issues/160 diff --git a/content/2018-08-28-newsletter-10.md b/content/2018-08-28-newsletter-10.md deleted file mode 100644 index 6a0ca50..0000000 --- a/content/2018-08-28-newsletter-10.md +++ /dev/null @@ -1,72 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 10" -date = 2018-08-28 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the tenth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [internals.rust-lang.org], [on twitter], or [on reddit]! - -[internals.rust-lang.org]: https://internals.rust-lang.org/t/the-10th-embedded-wg-newsletter-and-a-new-blog/8326 -[on twitter]: https://twitter.com/rustembedded/status/1034765727423717376 -[on reddit]: https://www.reddit.com/r/rust/comments/9b8gry/the_10th_embedded_wg_newsletter_and_a_new_blog/ - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-embedded/blog/issues/6 - -## Highlights - -* We have [a blog]! We'll be posting newsletters, notices for upcoming changes, and embedded related articles there in the upcoming future. Use RSS? It has an [RSS feed]! Check out the [blog on github] to make any corrections or to contribute an article -* Nightly Rust has [switched to `lld`] for Cortex-M targets as a default. See the blog post for how to handle this change -* There have been updates to [`cortex-m`], [`cortex-m-rt`], and [`cortex-m-quickstart`]! Check out the linked changelogs to see what is new. Also, the latest release of each of these no longer require `arm-none-eabi-gcc`! - -[a blog]: https://rust-embedded.github.io/blog/ -[RSS feed]: https://rust-embedded.github.io/blog/rss.xml -[blog on github]: https://github.com/rust-embedded/blog -[switched to `lld`]: https://rust-embedded.github.io/blog/2018-08-2x-psa-cortex-m-breakage/ -[landed upstream]: https://github.com/rust-lang/rust/commit/898950caf1a7bc9b6c41e74bbfac9591724f307c -[`cortex-m`]: https://github.com/rust-embedded/cortex-m/blob/master/CHANGELOG.md#v056---2018-08-27 -[`cortex-m-rt`]: https://github.com/rust-embedded/cortex-m-rt/blob/master/CHANGELOG.md#v053---2018-08-27 -[`cortex-m-quickstart`]: https://github.com/rust-embedded/cortex-m-quickstart/blob/master/CHANGELOG.md#v034---2018-08-27 - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* Support for `aarch64-unknown-none` has [landed upstream]! It is now possible to write bare-metal Rust code for 64-bit ARM architectures - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Device Crates] | released | 14 | 0 | -| [HAL Impl Crates] | released | 12 | +1 | -| [Board Support Crates] | released | 9 | 0 | -| [Driver Crates Released] | released | 11 | 0 | -| [Driver Crates WIP] | WIP | 39 | +1 | -| [no-std crates] | released | 13 | +1 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates - -## Help Wanted - -* Take a minute to check out the [wg help wanted issues] as labeled on our issue tracker! - -[wg help wanted issues]: https://github.com/search?q=org%3Arust-embedded+is%3Aissue+is%3Aopen+milestone%3Arc1+label%3A%22help+wanted%22&type=Issues diff --git a/content/2018-08-2x-psa-cortex-m-breakage.md b/content/2018-08-2x-psa-cortex-m-breakage.md deleted file mode 100644 index cd82180..0000000 --- a/content/2018-08-2x-psa-cortex-m-breakage.md +++ /dev/null @@ -1,154 +0,0 @@ -+++ -title = "PSA: Cortex-M Breakage (LLD as the default linker)" -date = 2018-08-28 -draft = false -in_search_index = true -template = "page.html" -+++ - -The default linker for the 4 ARM Cortex-M targets listed below has changed from -`arm-none-eabi-gcc` to `rust-lld` in the latest nightly. - -- `thumbv6m-none-eabi` -- `thumbv7m-none-eabi` -- `thumbv7em-none-eabi` -- `thumbv7em-none-eabihf` - -This will break the builds of *binaries* and *cdylibs* that were using the -old default linker (`arm-none-eabi-gcc`) *and* additionally pass extra flags to -the linker using any of these rustc flags: `-C link-arg`, `-C link-args`, `-Z -pre-link-arg` or `-Z pre-link-args`. Building libraries (`rlib`s and -`staticlib`s) is not affected by this change. - - - -This change won't affect stable users when it reaches the 1.30 release because, -as of 1.28, it's not possible to build binaries or cdylibs for those targets on -the stable channel. Building libraries for those targets is possible on stable -but it's not affected by this change. - -### Rationale - -This breaking change was intentional. - -We, the [embedded WG], wanted to reduce the number of external tools required to -build embedded programs for the ARM Cortex-M architecture. By switching the -default linker to the LLD linker that's shipped with the Rust toolchain the user -no longer needs to install an ARM linker (like `arm-none-eabi-gcc` or -`arm-none-eabi-ld`) to build Rust programs. - -[embedded WG]: https://github.com/rust-embedded/wg - -Before landing this change we first [consulted] with the community if they -thought this breaking change was worth it. We received over 20 positive responses -representing the Cortex-M team (part of the embedded WG), the Tock OS project, -the embed-rs organization and independent developers. - -The consensus was that it was worth to make the default configuration more self -contained and that if we were to make the change it had to be made before it -became possible to build binaries on stable otherwise it wouldn't be possible -to make this change without breaking stable builds. - -[consulted]: https://github.com/rust-embedded/wg/issues/160 - -### How to fix your build - -If you are affected by this change you'll observe a linker error with a message -similar to one shown below: - -``` console -$ # these are the custom linker flags of the project -$ cat .cargo/config -``` - -``` toml -[target.thumbv7m-none-eabi] -runner = 'arm-none-eabi-gdb' -rustflags = [ - "-C", "link-arg=-Wl,-Tlink.x", - "-C", "link-arg=-nostartfiles", -] - -[build] -target = "thumbv7m-none-eabi" -``` - -``` -$ cargo build -error: linking with `rust-lld` failed: exit code: 1 - | - = note: "rust-lld" "-flavor" "gnu" (..) - = note: rust-lld: error: unknown argument: -Wl,-Tlink.x - rust-lld: error: unknown argument: -nostartfiles -``` - -There are two ways to fix the problem. - -#### Option A: switch back to GCC - -The easiest way is to switch back to using `arm-none-eabi-gcc` as the linker. To -do so pass the flag `-C linker=arm-none-eabi-gcc` to rustc. In the above example -you can do that in the `.cargo/config` file. - -``` console -$ # these are the custom linker flags of the project -$ cat .cargo/config -``` - -``` toml -[target.thumbv7m-none-eabi] -runner = 'arm-none-eabi-gdb' -rustflags = [ - "-C", "linker=arm-none-eabi-gcc", # ADDED - "-C", "link-arg=-Wl,-Tlink.x", - "-C", "link-arg=-nostartfiles", -] - -[build] -target = "thumbv7m-none-eabi" -``` - -``` -$ cargo build && echo It works now -It works now -``` - -#### Option B: tweak the additional linker arguments - -The other option is to tweak the additional linker arguments so they'll be -accepted by LLD. In the above example the `-nostartfiles` flag can be dropped -because that's the default behavior of LLD, and the flags prefixed by `-Wl,` -will have to lose their prefix. - -``` console -$ # these are the custom linker flags of the project -$ cat .cargo/config -``` - -``` toml -[target.thumbv7m-none-eabi] -runner = 'arm-none-eabi-gdb' -rustflags = [ - "-C", "link-arg=-Tlink.x", # CHANGED -# "-C", "link-arg=-nostartfiles", # REMOVED -] - -[build] -target = "thumbv7m-none-eabi" -``` - -``` console -$ cargo build && echo It works now -It works now -``` - -With this approach your build will no longer depend on an external linker. - -#### Should I prefer option A or B? - -If you are linking to a system installed C library like `newlib-arm-none-eabi` -then you should continue to use GCC. The default library search path of -`arm-none-eabi-gcc` includes the path to those libraries. - -If you are not linking to any C code then you should prefer LLD then you won't -need to install the `arm-none-eabi` toolchain. diff --git a/content/2018-09-09-newsletter-11.md b/content/2018-09-09-newsletter-11.md deleted file mode 100644 index 54e5366..0000000 --- a/content/2018-09-09-newsletter-11.md +++ /dev/null @@ -1,85 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 11" -date = 2018-09-09 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the eleventh newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [internals.rust-lang.org], [on twitter], or [on reddit]! - -[internals.rust-lang.org]: https://internals.rust-lang.org/t/the-embedded-working-group-newsletter-11/8377 -[on twitter]: https://twitter.com/rustembedded/status/1039055481946492928 -[on reddit]: https://www.reddit.com/r/rust/comments/9eku70/rust_embedded_working_group_newsletter_11_cortexr/ - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-embedded/blog/issues/12 - -## Highlights - -* `rustc` now supports 4 **Cortex-R** targets thanks to the work of [paoloteti] in the Cortex-R space! You can build programs for these targets using nothing but the Rust toolchain -* [James Munns] gave a talk [at RustConf 2018], covering the basics of embedded systems, and how Rust's Zero Cost Abstractions are a perfect match for bare metal systems - -[paoloteti]: https://github.com/paoloteti - -[at RustConf 2018]: https://www.youtube.com/watch?v=t99L3JHhLc0 -[James Munns]: https://github.com/jamesmunns - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* Support for the Arduino MKRZERO board [has landed] in the [atsamd21-rs] repository! This is a Board Support Crate for various development board based on the Atmel/Microchip samd21 Cortex-M microcontroller -* [Branan Riley] is working on the [fourth chapter] of his [Exploring Rust on Teensy] series, which will focus on using `futures-rs` to represent DMA transfers -* [Emil Fresk] shared some shots of his next [Visual Inertial PCB], which includes an STM32 running control algorithms written in Rust! -* [Jonathan Pallant] added a bare-metal [four-channel synthesizer] for his Monotron project, and even included a short [demo audio clip]! - -[fourth chapter]: https://twitter.com/branan/status/1038222375790161920 -[Exploring Rust on Teensy]: https://branan.github.io/teensy/ -[Branan Riley]: https://github.com/branan - -[Visual Inertial PCB]: https://twitter.com/korken89/status/1038494310830952449 -[Emil Fresk]: https://github.com/korken89 - -[four-channel synthesizer]: https://twitter.com/therealjpster/status/1036298070022086656 -[Jonathan Pallant]: https://github.com/thejpster -[demo audio clip]: https://www.youtube.com/watch?v=NvfyFhFK11g - -[has landed]: https://twitter.com/gonadic_io/status/1035916949287575552 -[atsamd21-rs]: https://github.com/wez/atsamd21-rs - - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Device Crates] | released | 16 | +2 | -| [HAL Impl Crates] | released | 12 | 0 | -| [Board Support Crates] | released | 9 | 0 | -| [Driver Crates Released] | released | 11 | 0 | -| [Driver Crates WIP] | WIP | 41 | +2 | -| [no-std crates] | released | 13 | 0 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates - -## Help Wanted - -* Take a minute to check out the [wg help wanted issues] as labeled on our issue tracker! - -[wg help wanted issues]: https://github.com/search?q=org%3Arust-embedded+is%3Aissue+is%3Aopen+milestone%3Arc1+label%3A%22help+wanted%22&type=Issues diff --git a/content/2018-09-25-newsletter-12.md b/content/2018-09-25-newsletter-12.md deleted file mode 100644 index 851a3a0..0000000 --- a/content/2018-09-25-newsletter-12.md +++ /dev/null @@ -1,81 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 12" -date = 2018-09-25 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the twelfth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! - -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-12/20749 -[on twitter]: https://twitter.com/rustembedded/status/1044930201925439490 -[on reddit]: https://www.reddit.com/r/rust/comments/9j2620/the_embedded_working_group_newsletter_12/ - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-embedded/blog/issues/15 - -## Highlights - -* We now have a category for Embedded on the [users.rust-lang.org forum]! This is a great place to ask larger questions, or to share more details about your projects! -* You can now build embedded [binaries on stable] with the `1.30-beta` release of Rust! Check it out and [open an issue] if you run in to any issues with your projects! - -[users.rust-lang.org forum]: https://users.rust-lang.org/c/embedded - -[binaries on stable]: https://twitter.com/japaricious/status/1042440110418153473 -[open an issue]: https://github.com/rust-embedded/wg/issues - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* [Diego Barrios Romero] has released his [eeprom24x] crate, an `embedded-hal` compatible driver for EEPROM memory chips such as the Microchip/Atmel `AT24C32`, `24AA32A`, `AT24C256`, or STMicroelectronics' `M24C32` -* [Trangar] managed to drive [56 ArtNet Torches] using Rust, based on his [ArtNet Protocol] crate -* The `no_std` synthesizer from the last newsletter has been implemented on-hardware by [Jonathan Pallant], giving the [Monotron] a [PWM audio driver]! - -[Diego Barrios Romero]: https://github.com/eldruin -[eeprom24x]: https://blog.eldruin.com/24x-serial-eeprom-driver-in-rust/ - -[Trangar]: https://github.com/trangar/ -[ArtNet Protocol]: https://github.com/Trangar/artnet_protocol -[56 ArtNet Torches]: https://twitter.com/victorkoenders/status/1042786930335903745 - -[Jonathan Pallant]: https://github.com/thejpster -[Monotron]: https://github.com/thejpster/monotron -[PWM audio driver]: https://twitter.com/therealjpster/status/1043942194015555584 - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Device Crates] | released | 16 | 0 | -| [HAL Impl Crates] | released | 12 | 0 | -| [Board Support Crates] | released | 9 | 0 | -| [Driver Crates Released] | released | 12 | +1 | -| [Driver Crates WIP] | WIP | 40 | -1 | -| [no-std crates] | released | 13 | 0 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates - -## Help Wanted - -* Interested in implementing a new target for Embedded Rust? Nuvoton has a [development board] for the Cortex-M23. Check out the [thumbv8m tracking issue] if you want to help! - -[development board]: https://direct.nuvoton.com/de/numaker-pfm-m2351 -[thumbv8m tracking issue]: https://github.com/rust-embedded/wg/issues/88 \ No newline at end of file diff --git a/content/2018-10-09-newsletter-13.md b/content/2018-10-09-newsletter-13.md deleted file mode 100644 index 80791b6..0000000 --- a/content/2018-10-09-newsletter-13.md +++ /dev/null @@ -1,87 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 13" -date = 2018-10-09 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the thirteenth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! - -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-13/21137 -[on twitter]: https://twitter.com/rustembedded/status/1049739952601395201 -[on reddit]: https://www.reddit.com/r/rust/comments/9ms5jk/embedded_wg_newsletter_13_industrial_io_bluetooth/ - - - -If you want to mention something in [the next newsletter], make sure to leave a comment on the issue. - -[the next newsletter]: https://github.com/rust-embedded/blog/issues/17 - -## Highlights - -* The `min_const_fn` feature [has landed], allowing for stable use of `const fn` functions in an embedded context in the upcoming 1.31 release of Rust! -* [Frank Pagliughi] has kicked off [`rust-industrial-io`], a crate providing an interface to `libiio` on linux, which is used for communication with industrial sensors and actuators -* [gregokent] has started development on [`cortex-r-rt`], a runtime crate for Cortex-R processors -* The HAL Impl crate for the Texas Instruments TM4C123 now [works on 1.30-beta]! **Now is a great time to ensure that your embedded crates will work flawlessly with the 2018 Edition of Rust!** - -[has landed]: https://github.com/rust-lang/rust/pull/54835 - -[Frank Pagliughi]: https://github.com/fpagliughi -[`rust-industrial-io`]: https://github.com/fpagliughi/rust-industrial-io - -[gregokent]: https://github.com/gregokent -[`cortex-r-rt`]: https://github.com/gregokent/cortex-r-rt - -[works on 1.30-beta]: https://twitter.com/therealjpster/status/1047872901628792832 - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for [the next newsletter], we would love to show it off! - -* [e-matteson] has released their [`keypad` driver], which can be used with keypad matrix circuits. Check out more [details on reddit] -* [Daniel Gallagher] has recently released two handy Bluetooth crates in an [intro blog] post: - * [`bluenrg`], an embedded-hal crate used to interface with STMicro's series of microcontrollers - * [Bluetooth HCI], a helper crate for interfacing with the Bluetooth Host-Controller interface - -[`keypad` driver]: https://github.com/e-matteson/keypad -[details on reddit]: https://www.reddit.com/r/rust/comments/9j42o9/weekly_driver_keypad_matrix_circuits/ -[e-matteson]: https://github.com/e-matteson - -[Daniel Gallagher]: https://github.com/danielgallagher0 -[`bluenrg`]: https://crates.io/crates/bluenrg -[Bluetooth HCI]: https://crates.io/crates/bluetooth-hci -[intro blog]: https://219design.com/bluetooth-low-energy-with-rust/ - -### `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Device Crates] | released | 16 | 0 | -| [HAL Impl Crates] | released | 13 | +1 | -| [Board Support Crates] | released | 11 | +2 | -| [Driver Crates Released] | released | 15 | +3 | -| [Driver Crates WIP] | WIP | 40 | 0 | -| [no-std crates] | released | 14 | +1 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates - -## Help Wanted - -* Interested in implementing a new target for Embedded Rust? Nuvoton has a [development board] for the Cortex-M23. Check out the [thumbv8m tracking issue] if you want to help! - -[development board]: https://direct.nuvoton.com/de/numaker-pfm-m2351 -[thumbv8m tracking issue]: https://github.com/rust-embedded/wg/issues/88 diff --git a/content/2018-10-28-newsletter-14.md b/content/2018-10-28-newsletter-14.md deleted file mode 100644 index 996006e..0000000 --- a/content/2018-10-28-newsletter-14.md +++ /dev/null @@ -1,145 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 14" -date = 2018-10-28 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the fourteenth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -This is a special "spotlight" edition of the newsletter, where we look at a few topics in a bit more detail. Let us know what you think of the new format, and if there is anything you'd like to see included in [the next newsletter]! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! - -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-14/21795 -[on twitter]: https://twitter.com/rustembedded/status/1057222850787053568 -[on reddit]: https://www.reddit.com/r/rust/comments/9smq6f/embedded_wg_newsletter_14_spotlight_edition/ -[the next newsletter]: https://github.com/rust-embedded/blog/issues/22 - - - -## Embedded Rust Applications on Stable! - -
- -

Rust 1.30 is here! Proc macros, no_std binaries, and a progress bar for cargo! 🎊🎉🦀 https://t.co/IXm5xFYlhU

— Rust Language (@rustlang) October 25, 2018
- - -Now that `#[panic_handler]` is stabilized in [1.30], you can write Cortex-M bare-metal applications with the stable compiler. All our Rust Embedded crates, such as `cortex-m`, `cortex-m-rt` and `embedded-hal` should be ready to use on stable, but please note our two tutorial books [Discovery] and [The Embedded Rust Book] still require 1.30 beta or 1.31 beta as they use 2018 edition syntax (which isn't stabilized until the 1.31 release). - -[1.30]: https://blog.rust-lang.org/2018/10/25/Rust-1.30.0.html -[Discovery]: https://rust-embedded.github.io/discovery/ -[The Embedded Rust Book]: https://rust-embedded.github.io/book/ - -If you are able to trial 1.31 beta, you can help us test: - -* Minimal `const` functions (useful for initializing static variables) -* 2018 edition syntax (including changes to `use` and `extern crate`) - -## The Newest Embedded WG Team: Cortex-A! - -
- -![Screenshot of Cortex-A RFC][cortex-a-screenshot] - -[cortex-a-screenshot]: ../screenshot-cortex-a.png - -The Embedded Working Group has launched a Cortex-A team, to focus on supporting developers working on bare-metal, micro kernel, and other low-level tasks using ARM's Cortex-A series of microprocessors. - -The team kicked off with four members: [@andre-richter], [@parched], [@raw-bin], and [@wizofe], and have already started assembling initial [goals for their team]. - -[goals for their team]: https://github.com/rust-embedded/wg/milestone/5 -[@andre-richter]: https://github.com/andre-richter -[@parched]: https://github.com/parched -[@raw-bin]: https://github.com/raw-bin -[@wizofe]: https://github.com/wizofe - - -## The Monotron Visits Rust Belt Rust - -
- -

Astonishing. Smashed my high score! pic.twitter.com/WG9FXc8Kao

— Jonathan Pallant (@therealjpster) October 20, 2018
- - -[@thejpster]'s project, the [monotron], travelled to Ann Arbor Michigan for [Rust Belt Rust 2018]. Since its [last conference appearance], it has gained a whole new [list of features], including a serial application loader, a 3 channel wave table synthesizer, Atari Joystick support, and more! - -Check out the video above for a demo of Snake on the monotron hardware. - -[Rust Belt Rust 2018]: https://rust-belt-rust.com/ -[@thejpster]: https://github.com/thejpster -[monotron]: https://github.com/thejpster/monotron -[last conference appearance]: https://www.youtube.com/watch?v=pTEYqpcQ6lg -[list of features]: https://twitter.com/therealjpster/status/1055187256091332608 - -## Peripheral Ownership Woes? Not With `shared-bus`! - -
- -```rust -extern crate shared_bus; - -// Create your bus peripheral as usual: -// let i2c = I2c::i2c1(dp.I2C1, (scl, sda), 90.khz(), clocks, &mut rcc.apb1); - -let manager = shared_bus::CortexMBusManager::new(i2c); - -// You can now acquire bus handles: -let mut handle = manager.acquire(); -// handle implements `i2c::{Read, Write, WriteRead}`, depending on the -// implementations of the underlying peripheral - -// Now, this works! :+1: -let port_a = Pcf8574(manager.acquire(), 0x39).unwrap(); -let port_b = Pcf8574(manager.acquire(), 0x38).unwrap(); -``` - -In most `embedded-hal` compatible drivers, the driver takes either ownership or a mutable reference to the peripheral used to interact with a component, such as I2C or SPI. For some protocols, such as I2C, which might have multiple devices connected to the same peripheral, managing ownership can be difficult (see [embedded-hal/35] for discussion). - -To address this, [@Rahix] developed [shared-bus], a crate which provides safe shared access to these peripherals through the use of a mutex. This allows for access of the underlying peripheral in as many drivers as you need! Check out the [release blog post] for more details, and for examples on how to use this for your projects. - - -[@Rahix]: https://github.com/Rahix -[embedded-hal/35]: https://github.com/rust-embedded/embedded-hal/issues/35 -[shared-bus]: https://github.com/Rahix/shared-bus -[release blog post]: https://blog.rahix.de/001-shared-bus/ - -## The Embedded Rust Community is Growing! - -
- -

Happy Tuesday! Quick poll: What are you using #embedded @rustlang for right now?

RTs appreciated!

— Rust Embedded Working Group (@rustembedded) October 16, 2018
- - -As we get closer to our goal of stable embedded development with Rust for the 2018 edition launch, the embedded community is ramping up. We did a quick twitter poll which received hundreds of responses, and heard from developers using or evaluating embedded rust for personal and work projects. - -The [Embedded WG] has also grown, starting off this year with 8 developers on a single team, to a group of **27 developers** across **11 teams**, each with their own area of focus within the embedded rust space. - -Now is a great time to start working with Embedded Rust, and we can't wait to see what the next year brings! - -## `embedded-hal` Ecosystem Crates - -
- -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Device Crates] | released | 16 | 0 | -| [HAL Impl Crates] | released | 13 | 0 | -| [Board Support Crates] | released | 11 | 0 | -| [Driver Crates Released] | released | 16 | +1 | -| [Driver Crates WIP] | WIP | 46 | +6 | -| [no-std crates] | released | 17 | +3 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates diff --git a/content/2018-11-14-this-year-in-embedded-rust.md b/content/2018-11-14-this-year-in-embedded-rust.md deleted file mode 100644 index 881d747..0000000 --- a/content/2018-11-14-this-year-in-embedded-rust.md +++ /dev/null @@ -1,148 +0,0 @@ -+++ -title = "This Year in Embedded Rust" -date = 2018-11-14 -draft = false -in_search_index = true -template = "page.html" -+++ - -This year the [Embedded WG] set out to build the solid foundation that the -embedded Rust ecosystem requires to thrive. As we approach the date of the 2018 -edition release we reflect on our progress and share our achievements with you -in this post. - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! - -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-wg-this-year-in-embedded-rust/22263 -[on twitter]: https://twitter.com/rustembedded/status/1062664608538918913 -[on reddit]: https://www.reddit.com/r/rust/comments/9wz716/the_embedded_wg_this_year_in_embedded_rust/ - - - -## Embedded Rust on stable - -Stability -- AKA "my crate should not break when moving to a newer toolchain" -- -was the single most requested feature by the embedded community during the 2018 -roadmap planning phase. - -Embedded development has been tied to the nightly -channel since its very beginning, and the people that have been doing embedded -development for a while have endured many breaking changes. Thankfully, those -days are over: Rust 1.30 marks the first stable release where you can build -fully working embedded programs without relying on unstable features. - -Furthermore, we now have some [unit][] [tests] that check embedded code in the -compiler test suite so unintentional breakage will be caught before it makes its -way into the nightly channel. - -[unit]: https://github.com/rust-lang/rust/pull/53996 -[tests]: https://github.com/rust-lang/rust/pull/53190 - -## A smooth starting point - -"How do I get started with embedded Rust?" has been a common question on IRC for -a long time. It has not been an easy question to answer, though: maintaining -documentation that relies on unstable features for a long period of time has -been an uphill battle so newcomers have often run into outdated docs. - -But now that stable embedded Rust is here we have put together an authoritative -resource for getting started with embedded Rust: [The Embedded Rust Book]. We -have put a lot of effort in making the first experience as frictionless as -possible with the help of [templates] and [tooling]. - -[The Embedded Rust Book]: https://docs.rust-embedded.org/book -[templates]: https://github.com/rust-embedded/cortex-m-quickstart -[tooling]: https://github.com/rust-embedded/cargo-binutils - -The embedded Rust book is not just a getting started guide; it's also meant -to be the document that teaches you how to effectively use the language to write -correct embedded software. We are currently amassing all our hard earned -experience into patterns and tips that we are adding to this book. - -## Resources for everyone - -The Embedded Rust Book is aimed at people that have some experience with -embedded development, but we recognize that Rust has great potential for -becoming people's first choice for getting their feet wet with embedded -development so we have updated and will continue to work on resources, like [the -Discovery book], that are aimed at that demographic. - -[the Discovery book]: https://docs.rust-embedded.org/discovery - -We also recognize that the target audience for embedded Rust has different -levels of expertise with embedded systems and a varied set of interests -so we are also building advances resources like [the embedonomicon] -and collecting more targeted resources, like crates, in the -[awesome-embedded-rust] list. You can find these and other of our resources in -our [docs webpage][docs]. - -[the embedonomicon]: https://docs.rust-embedded.org/embedonomicon -[awesome-embedded-rust]: https://github.com/rust-embedded/awesome-embedded-rust -[docs]: https://docs.rust-embedded.org - -## An organized community effort - -All this has been accomplished with the hard work of many volunteers, both [WG -members] and other community members. The WG members, in particular, are -committed to maintaining the [core crates] and [documentation] that the -ecosystem relies on. All these resources have been taken under the umbrella of -the [rust-embedded] organization. - -[WG members]: https://github.com/rust-embedded/wg#organization -[rust-embedded]: https://github.com/rust-embedded -[core crates]: https://github.com/rust-embedded/wg#projects-1 -[documentation]: https://github.com/rust-embedded/wg#projects-8 - -## WG teams - -The embedded space is huge: there are several architectures used in -this space, many application areas, and embedded developers work with different -sets of constraints: real-time constraints, memory constraints, energy / power -constraints, etc. - -For this reason we have been creating and growing specialized teams within the -WG by adding members with different areas of expertise. This ensures that we -have different perspectives when making API design decisions in core crates and -when communicating the needs of the embedded community to the other Rust teams. -Having specialized teams also means that the crates developed by the org can be -assigned to the people with the right technical background. - -## On the upcoming 2018 edition - -In this last sprint towards the 2018 edition we are focusing our efforts in -our [documentation][docs]! - -You can help us by proofreading our docs, reporting errors, giving feedback on -the existing content, requesting new topics and writing about topics that have -not yet been covered. Every little bit of help is greatly appreciated! - -One important note: our documentation makes use of the 2018 edition which -requires you to use the beta channel until 1.31 is released in early December. -We suggest that you use the beta channel until then to get the best experience. - -## Beyond 2018 - -Our work doesn't stop the day Rust 1.31 comes out; the 2018 edition is just the -starting line of embedded Rust. As we continue to learn how to effectively use -Rust for embedded development we'll continue to refine and expand our -documentation as well as the core crates we maintain and develop. - -Also, at this point in time ARM Cortex-M is our most mature target architecture -and the majority of crates on crates.io target this architecture, but we have -laid the groundwork for supporting other targets like bare metal ARM Cortex-A, -ARM Cortex-R, MSP430 and RISCV. We'll continue to work on getting these -targets on parity with the ARM Cortex-M target during the next year. - -Finally, we'd love to hear what **you** would like to see happen in the embedded -space in 2019. We are collecting a ["wishlist"] of things the embedded community -would like to see get done, fixed and / or stabilized in 2019. Need some API in -core to be stabilized? Would like to get some Cargo bug / papercut fixed? Let us -know and we'll look into making it happen! We'll use this data to set out an -embedded Rust roadmap for 2019. - -["wishlist"]: https://github.com/rust-embedded/wg/issues/256 - -Here's to a 2019 with *more* embedded Rust success stories (yes, "more"; wait -for the upcoming revamped rust-lang website ;-)). Happy embedded hacking! diff --git a/content/2019-02-20-newsletter-15.md b/content/2019-02-20-newsletter-15.md deleted file mode 100644 index 66c6ee2..0000000 --- a/content/2019-02-20-newsletter-15.md +++ /dev/null @@ -1,197 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 15" -date = 2019-02-20 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the fifteenth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! - -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-15/25481 -[on twitter]: https://twitter.com/rustembedded/status/1098218372469268480 -[on reddit]: https://www.reddit.com/r/rust/comments/asohul/embedded_wg_newsletter_15_ewg_all_hands_the/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2019-03-06-newsletter-16.md - -## Embedded at Rust All Hands 2019 - -Some members of the Embedded Working Group attended the Rust All Hands two weeks ago. There they had the chance to discuss the needs of the embedded community (as identified in [this survey]) with the different Rust teams and other WGs. Here's a summary of what was discussed: - -[this survey]: https://github.com/rust-embedded/wg/issues/256 - -- "const generics" - -The ability to parameterize over values, for example you could use this feature to write a fixed capacity `Vec`: `struct Vec { buffer: [T; N], len: usize }`. There are a few compiler refactors going on that are required to land this in nightly so the status is "WIP". We'll have future meetings with the compiler team to try to identify and prioritize the parts of the feature that embedded developers need. - -- `const fn` with trait bounds on stable. - -For example, `impl Struct where T: Trait { pub const fn new() -> Self { .. } }`. A lengthy [pre-RFC discussion][const-eval#8] has concluded and a [proper RFC has been proposed][rfc2632]. - -[const-eval#8]: https://github.com/rust-rfcs/const-eval/pull/8 -[rfc2632]: https://github.com/rust-lang/rfcs/pull/2632 - -- `core::mem::MaybeUninit` on stable. - -The plan is to stabilize a [minimal, uncontroversial subset of the API][maybe_uninit] to make this available on stable ASAP. - -[maybe_uninit]: https://github.com/rust-lang/rust/issues/53491#issuecomment-463753719 - -- `std::io` in `core` / `alloc`. - -It's not possible to move `std::io::{Read,Write}` into `alloc` or `core` because the API depends on OS specific bits (e.g. `last_os_error`). An option may be to add a new set of `Read` / `Write` traits to `core`, maybe with associated error types, and then try to bridge these to `std::io::{Read,Write}` using blanket implementations / super traits, but this needs more research. - -- fix [rust-lang/cargo#5730] - -This bug breaks `no_std` builds that use build scripts unless the authors of the build dependencies are aware of the issue and actively work around it. The Cargo team is well aware of the problem. Unfortunately, it's hard to fix and the fix will likely be opt-in because it changes the current semantics. - -[rust-lang/cargo#5730]: https://github.com/rust-lang/cargo/issues/5730 - -- Stabilize RFC 2282 - ["Cargo profile dependencies"] - -This feature lets you optimize dependencies when using the `dev` profile; useful to keep `dev` binaries small enough to fit in Flash without sacrificing all debuggability. A new [`build` profile][profile.build] will be added to cover the configuration of proc macros, build scripts, compiler plugins and their dependencies. The new profile solves the remaining unresolved question around RFC 2282. - -["Cargo profile dependencies"]: https://github.com/rust-lang/rust/issues/48683 -[profile.build]: https://github.com/rust-lang/cargo/pull/6577 - -- Stabilize `core::arch::arm` - -This module contains functions for instructions like `wfi` and `nop`, and SIMD instructions; stabilizing this removes the pressure for stable inline assembly (`asm!`). A member of the libs team is interested in this and will help us push it towards the finish line. [A PR in this space][stdsimd#557] has recently landed. - -[stdsimd#557]: https://github.com/rust-lang-nursery/stdsimd/pull/557 - -- Asserts in `const fn` context become compiler errors. - -We understood that there are still several design / implementation issues that need to be discussed before this is stabilized, but in the meantime you can use the perma-unstable `-Z unleash-the-miri-inside-of-you` flag to do all sort of stuff in const context. - -- std-aware Cargo. - -[@jamesmunns] has written a [pre-rfc] for an incremental implementation of this feature based on our discussions with people from the libs and Cargo teams and the WASM WG. - -[@jamesmunns]: https://github.com/jamesmunns -[pre-rfc]: https://github.com/jamesmunns/rfcs/pull/1 - -- Improve searching for `no_std` crates on crates.io. - -The backend supports searching within a category (like the `no_std` category) but there's no UI for it right now. This and fixing a bug where searches only return items found until a exact match was found (instead of returning all relevant matches) are in the crates.io team TODO list. - -- Fix: infinite loops (e.g. `loop {}`) are lowered to an abort instruction. - -Ideally, this should be fixed in LLVM proper but it's hard to fix. It's possible to fix this in rustc but the fix is likely to regress the performance of `loop`s. The compiler team will follow up with two unstable flags to evaluate the (performance) impact of fixing this. The first flag applies the fix to only `loop`s in return position of divergent function and the second flag applies the fix to all `loop`s. - -- Math support in core - -That is `0f32.sin()` should "Just Work" in `no_std` crates. There are a few questions about how to best implement this without degrading performance of applications that link to `std` (we want those to use the arch optimized routines in e.g. glibc's libm instead of the generic Rust implementation) and we need a champion to do the research. - -- Cargo build hooks - -This refers to the ability to run custom code after `cargo build`. We covered use cases, their requirements and discussed the trade-offs of a more general Cargo tasks (e.g. `cargo $task`) mechanism vs a more targeted post-build script (e.g. `post-build.rs`) mechanism. Expect more news (a (pre-)RFC) from the WASM WG on this front. - -- Slimmer `core::fmt`. - -The current implementation of `core::fmt` uses trait objects and function pointers to make all uses of `core::fmt` fast to compile but this makes `core::fmt` impossible to inline which makes `no_std` programs that use formatting large in (binary) size. It might be possible to leverage std-aware Cargo to fix this: we could add a Cargo feature to `core` to replace the current implementation with one that's fully inlineable but as featureful as the current one -- this should produce smaller binaries. - -For a bit more of detail you can check the [logs] and [minutes] from two meetings ago; they include our notes from the All Hands - -[logs]: https://github.com/rust-embedded/wg/blob/master/minutes/2019-02-12.irc.log -[minutes]: https://github.com/rust-embedded/wg/blob/master/minutes/2019-02-12.md#notes-from-rust-all-hands - -## Highlights - -- The Embedded WG has started receiving [submissions] for [the embedded showcase][showcase]! We are looking for cool embedded Rust projects with visuals (pictures or videos) that can serve as examples of what can be done in Rust. - -[submissions]: https://github.com/rust-embedded/showcase#submit-your-project -[showcase]: https://github.com/rust-embedded/showcase - -- The [stm32-rs] organization has emerged to collate work on STM32 crates. - -[stm32-rs]: https://github.com/stm32-rs - -- Similarly, the [lpc-rs] organization has emerged to work on LPC microcontrollers by NXP. - -[lpc-rs]: https://github.com/lpc-rs - -- Also, the [nrf-rs] organization has emerged to focus on the nRF family of microcontrollers by Nordic Semiconductors. - -[nrf-rs]: https://github.com/nrf-rs - -- [@adamgreig] has released an experimental PAC (Peripheral Access Crate) alternative for STM32 microcontrollers: [stm32ral] that compiles in about 3 seconds. (PACs are known for compile times in the order of hundreds of seconds.) - -[@adamgreig]: https://github.com/adamgreig -[stm32ral]: https://github.com/adamgreig/stm32ral - -- As of `nightly-2019-02-05` the [embedded Rust Book][book] is included as part of the docs shipped with the Rust toolchain! [This is the online version](https://doc.rust-lang.org/nightly/#embedded-systems). - -[book]: https://docs.rust-embedded.org/book/index.html - -- The Rust compiler now has [cross compilation support for 64-bit RISCV][rust#58406]. Install the bare metal targets with `rustup target` (see `rustup target list`). - -[rust#58406]: https://github.com/rust-lang/rust/pull/58406 - -- The Rust compiler also gained [compilation support for x86_64 UEFI][rust#56769] in the form of the `x86_64-unknown-uefi` target. - -[rust#56769]: https://github.com/rust-lang/rust/pull/56769 - -- Formatting numbers with `core::fmt` has [become slimmer][rust#58272]. Some users have reported binary size reductions of up to 26% (800B) in ARMv6-M binaries. - -[rust#58272]: https://github.com/rust-lang/rust/pull/58272 - -- The [copterust org][copterust] has [shared a bunch of driver crates][aer#142] for interfacing sensors commonly found in flight controllers (drones). - -[copterust]: https://github.com/copterust/ -[aer#142]: https://github.com/rust-embedded/awesome-embedded-rust/pull/142 - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -- Version v0.4.1 of [Real Time For the Masses][rtfm] (RTFM), a concurrency framework for building real time systems, has been released! This version [fixes a soundness hole][rtfm#140] and includes a [Russian translation] of the RTFM book. - -[rtfm]: https://crates.io/crates/cortex-m-rtfm -[rtfm#140]: https://github.com/japaric/cortex-m-rtfm/pull/140 -[Russian translation]: https://japaric.github.io/cortex-m-rtfm/book/ru/index.html - -- [@jamwaffles] has [published](https://mobile.twitter.com/jam_waffles/status/1095784282189189121) a driver crate for the SH1106, an OLED display, and an [introduction blog post](https://wapl.es/electronics/rust/2019/02/13/sh1106-driver.html) for their crate. - -[@jamwaffles]: https://github.com/jamwaffles - -- [@thejpster] has [released](https://www.reddit.com/r/rust/comments/ascvls/introducing_embeddedsdmmc_a_purerust_no_std_sd/) [`embedded-sdmmc`], a pure-Rust #[no_std] SD card and FAT16/FAT32 library - -[@thejpster]: https://github.com/thejpster -[`embedded-sdmmc`]: https://crates.io/crates/embedded-sdmmc - -- [@hannobraun] has published two crates: [`ieee802154`], a partial implementation of the IEEE 802.15.4 standard, and [`dw1000`], an embedded-hal driver for the Decawave DW1000 wireless transceiver chip. - -[@hannobraun]: https://github.com/hannobraun -[`ieee802154`]: https://crates.io/crates/ieee802154 -[`dw1000`]: https://crates.io/crates/dw1000 - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Device Crates] | released | 16 | 0 | -| [HAL Impl Crates] | released | 15 | +2 | -| [Board Support Crates] | released | 13 | +2 | -| [Driver Crates Released] | released | 19 | +3 | -| [Driver Crates WIP] | WIP | 59 | +13 | -| [no-std crates] | released | 23 | +6 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Device Crates]: https://github.com/rust-embedded/awesome-embedded-rust#device-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates diff --git a/content/2019-03-06-newsletter-16.md b/content/2019-03-06-newsletter-16.md deleted file mode 100644 index c77e1c4..0000000 --- a/content/2019-03-06-newsletter-16.md +++ /dev/null @@ -1,97 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 16" -date = 2019-03-06 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the sixteenth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! - -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-16/25987 -[on twitter]: https://twitter.com/rustembedded/status/1103416332786302977 -[on reddit]: https://www.reddit.com/r/rust/comments/ay4js3/embedded_wg_newsletter_16_not_yet_awesome/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2019-03-20-newsletter-17.md - -## Highlights - -- Know of something that isn't awesome in embedded Rust yet? Let us know by adding it to the [Not *Yet* Awesome Embedded Rust List][nyaer]! - -[nyaer]: https://github.com/rust-embedded/not-yet-awesome-embedded-rust - -- The Embedded WG continues to receive [submissions] for [the embedded showcase][showcase]. We are looking for cool embedded Rust projects (applications, not libraries or tools) with visuals (pictures or videos) that can serve as examples of what can be done in Rust. - -[submissions]: https://github.com/rust-embedded/showcase#submit-your-project -[showcase]: https://github.com/rust-embedded/showcase - -- [42 Technology](https://www.42technology.com) [announced](https://twitter.com/42Technology/status/1099009843967471617) that they have got Rust running on the new Cortex-M33 powered [Nordic nRF9160 LTE SiP](https://www.nordicsemi.com/Products/Low-power-cellular-IoT/nRF9160). - -- [James Munns](https://twitter.com/bitshiftmask) has posted the [first video](https://www.youtube.com/watch?v=S0VI70nY6Vo) of a [series of streams](https://www.youtube.com/playlist?list=PLX44HkctSkTewrL9frlUz0yeKLKecebT1) developing a home wireless sensor node network. The stream focuses on teaching embedded, Rust, and IoT topics. - -## Embedded Projects - -- [@hannobraun](https://github.com/hannobraun) published [`dwm1001`](https://crates.io/crates/dwm1001), a board support crate for the Decawave DWM1001 module, which features a Nordic nRF52832 microcontroller and a Decawave DW1000 radio transceiver. - -- The RTFM (Real Time For the Masses) team has released [`cortex-m-rtfm`][rtfm] [v0.4.2][rtfm-changelog]; the most important new feature in this release are reproducible builds. They are also looking for user input on several open [RFCs][rtfm-rfcs]. - -[rtfm]: https://crates.io/crates/cortex-m-rtfm -[rtfm-changelog]: https://github.com/japaric/cortex-m-rtfm/blob/master/CHANGELOG.md#v042---2019-02-27 -[rtfm-rfcs]: https://github.com/japaric/cortex-m-rtfm/issues?q=is%3Aissue+is%3Aopen+label%3ARFC - -- [@japaric] has [released][call-stack-twitter] [`cargo-call-stack`][call-stack-crates-io] [v0.1.1]. `cargo-call-stack` is a static, whole program stack analysis tool; this version ships many new improvements: filtering, cleaner graphs, support for programs that use recursion, dynamic dispatch or function pointer calls, plus numerous bug fixes. - -[@japaric]: https://github.com/japaric/ -[call-stack-twitter]: https://mobile.twitter.com/japaricious/status/1102275637606338562 -[call-stack-crates-io]: https://crates.io/crates/cargo-call-stack -[v0.1.1]: https://github.com/japaric/cargo-call-stack/blob/master/CHANGELOG.md#v011---2019-03-03 - -- [@jamwaffles] has published version v0.4.7 of the [`embedded-graphics`][eg-crates-io] crate. This version ships with BMP support! For more details read [the announcement blog post][eg-blog]. - -[@jamwaffles]: https://github.com/jamwaffles -[eg-crates-io]: https://crates.io/crates/embedded-graphics/0.4.7 -[eg-blog]: https://wapl.es/rust/2019/03/04/embedded-graphics-0.4.7-bmp-support.html - -- [@tarcieri] extracted the [`micromath`][micromath-crates-io] crate out of the [`accelerometer`][accelerometer-crates-io] crate. It provides a fast, embedded-friendly arithmetic library (utilizing approximations which trade precision for improved performance and reduced code size), 2D/3D vector types, and statistical analysis functions. - -[@tarcieri]: https://github.com/tarcieri -[micromath-crates-io]: https://crates.io/crates/micromath -[accelerometer-crates-io]: https://crates.io/crates/accelerometer - -- [@shella] created [`pyportal`][pyportal-pr], a board support crate for the [Adafruit PyPortal], which features an ILI9341 LCD touchscreen and ESP32 Wifi controller. - -[@shella]: https://github.com/shella -[pyportal-pr]: https://github.com/atsamd-rs/atsamd/pull/55 -[Adafruit PyPortal]: https://www.adafruit.com/product/4116 - -If you have an embedded project or blog post you would like to have featured in the next Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 19 | +3 | -| [HAL Impl Crates] | released | 18 | +3 | -| [Board Support Crates] | released | 13 | ~ | -| [Driver Crates Released] | released | 20 | +1 | -| [Driver Crates WIP] | WIP | 61 | +2 | -| [no-std crates] | released | 24 | +1 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates diff --git a/content/2019-03-20-newsletter-17.md b/content/2019-03-20-newsletter-17.md deleted file mode 100644 index 789c8f3..0000000 --- a/content/2019-03-20-newsletter-17.md +++ /dev/null @@ -1,95 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 17" -date = 2019-03-22 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the seventeenth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! - -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-17/26551 -[on twitter]: https://twitter.com/rustembedded/status/1109141455510097922 -[on reddit]: https://www.reddit.com/r/rust/comments/b47pl7/embedded_wg_newsletter_17_the_embedded_rust/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2019-04-05.md - -## Highlights - -- The [embedded showcase] gained its first entry! The [rusty clock] project, an alarm clock that features pressure, temperature and humidity on an e-paper display and 5 programmable alarms. We are still looking for cool embedded projects to serve that can serve as examples of what can be done in Rust. Don't hesitate to [submit] yours! -- [OxidizeConf], the first embedded Rust conference, has announced speakers! Check out [the lineup here]! -- [Antoine van Gelder] wrote about using Peripheral Access Crates to [program interrupts] on the STM32F3 Discovery board -- [James Munns] gave a talk at Rust Berlin about what happens [before `main()`] in embedded Rust projects - -[embedded showcase]: https://rust-embedded.github.io/showcase/ -[rusty clock]: https://github.com/TeXitoi/rusty-clock -[submit]: https://github.com/rust-embedded/showcase#submit-your-project - -[OxidizeConf]: https://oxidizeconf.com -[the lineup here]: https://oxidizeconf.com/schedule/ - -[Antoine van Gelder]: https://twitter.com/antvangelder -[program interrupts]: https://flowdsp.io/blog/stm32f3-01-interrupts/ - -[James Munns]: https://github.com/jamesmunns -[before `main()`]: https://www.youtube.com/watch?v=RIHVoNDxNuk - -## Embedded Projects - -- [@jjkt](https://github.com/jjkt) is working on [`zmu`](https://github.com/jjkt/zmu), an emulator for microcontroller based systems. Zmu is work in progress but can already emulate substantial parts of Cortex M - based MCUs core architecture features. - -- [@japaric][] [released][call-stack-twitter] [v0.1.2][call-stack-changelog] of [`cargo-call-stack`][call-stack-crates-io], a static stack usage analyzer, and published a [blog post][call-stack-blog-post] with details about its implementation. - -- [Wesley Moore] wrote [a blog post] about getting Rust running on the TI SensorTag, see the [project on sourcehut]! - -- [@tarcieri][] [released][trellis-twitter] a board support crate for the [Adafruit NeoTrellis M4][trellis-info] along with a platform-independent driver for its [adxl343] accelerometer and support for using the accelerometer to detect the [device's orientation][trellis-orientation]. - -[@tarcieri]: https://github.com/tarcieri -[trellis-twitter]: https://twitter.com/bascule/status/1105455019959058433 -[trellis-info]: https://github.com/rust-embedded/wg/issues/286 -[adxl343]: https://github.com/atsamd-rs/atsamd/pull/47 -[trellis-orientation]: https://github.com/atsamd-rs/atsamd/pull/48 - -[Wesley Moore]: https://twitter.com/wezm -[a blog post]: https://www.wezm.net/technical/2019/03/sensortag-embedded-rust-coding-retreat/ -[project on sourcehut]: https://git.sr.ht/~wezm/sensortag - -[@japaric]: https://github.com/japaric -[call-stack-twitter]: https://twitter.com/japaricious/status/1105368938018267136 -[call-stack-changelog]: https://github.com/japaric/cargo-call-stack/blob/master/CHANGELOG.md#v012---2019-03-12 -[call-stack-crates-io]: https://crates.io/crates/cargo-call-stack/0.1.2 -[call-stack-blog-post]: https://blog.japaric.io/stack-analysis/ - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - - - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 18 | ~ | -| [HAL Impl Crates] | released | 19 | ~ | -| [Board Support Crates] | released | 13 | ~ | -| [Driver Crates Released] | released | 21 | +1 | -| [Driver Crates WIP] | WIP | 63 | +2 | -| [no-std crates] | released | 25 | +1 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates diff --git a/content/2019-05-07-embedded-rust-in-2019.md b/content/2019-05-07-embedded-rust-in-2019.md deleted file mode 100644 index 8df340d..0000000 --- a/content/2019-05-07-embedded-rust-in-2019.md +++ /dev/null @@ -1,31 +0,0 @@ -+++ -title = "Embedded Rust in 2019" -date = 2019-05-07 -draft = false -in_search_index = true -template = "page.html" -+++ - -It's been a busy year for many of the members of the Embedded-WG this year, and we had a chance to catch up at OxidizeConf a few weeks ago. We discussed two main things, Moving off of Mozilla IRC, and our goals for (part of) 2019. - - - -## Goals for 2019 - -In 2018, the Embedded WG pushed hard to get the Cortex-M targets supported as stable targets in the upstream Rust project. Since then, due to work and life responsibilities, a number of us have been particularly busy in 2019. - -At Oxidize, we discussed what our 2019 goals should be. There were suggestions to get some the foundational level crates like `cortex-m`, `cortex-m-rt`, and tools like `svd2rust` to a "1.0 state". However, while there were a number of improvements we could think of, we couldn't draw any clear lines of what it would take for us to be comfortable cutting a 1.0 release of these projects. - -Based on the two points above, we discussed a slightly different plan: **Focusing on building out the ecosystem in 2019**, by building more "fun" stuff, like example projects, cool applications, and extracting and publishing reusable components from these projects to fill in the embedded Rust ecosystem. - -By focusing on building out, instead of trying to perfect what we already have, we hope to find out the things we don't know we are missing, and inspire other members of the community to begin working and building with Embedded Rust. We'll keep this as a focus through the summer (until September or October 2019). This can be thought of as a parallel to the upstream ["Libs Blitz"](https://blog.rust-lang.org/2017/05/05/libz-blitz.html) that the Rust project successfully completed in 2017. - -Our weekly meetings will likely relax a bit, and will generally change focus to quickly discuss any high priority issues, then open up to a more informal "show and tell", where people can discuss the things they have been building and would like to share. We hope you'll all join us to share the wonderful things you build this summer in embedded Rust! - -## Moving off Mozilla IRC - -At the end of April, Mozilla announced that they would be shutting down `irc.mozilla.org`. The Rust project as a whole will generally be moving on to other platforms such as Discord and Zulip. - -The Embedded Working Group is actually one of the few (if not only) working groups that still primarily rely on IRC. We have a few hundred people who idle in the room, and tend to have fairly active discussions there, including our weekly status meetings. We have discussed moving to other platforms previously, but have been unable to get any sort of consensus on what to move to instead. Those discussions lead to a fruitful evaluation of alternatives and led to a pre-selection of suitable services. - -To move things forward [RFC 0351 Chat Vote](https://github.com/rust-embedded/wg/blob/master/rfcs/0351-chat-vote.md) has been proposed and accepted by the WG which was subsequently implemented by opening [voting issue](https://github.com/rust-embedded/wg/issues/357) to poll the public opinion on this matter. Anyone with a GitHub account is invited to cast vote(s) until **23:59 CEST on Sunday, 2019-06-23**, the detailed rules are explained in the issue and fair discussion is very welcome. diff --git a/content/2019-07-02-newsletter-18.md b/content/2019-07-02-newsletter-18.md deleted file mode 100644 index 8156b2a..0000000 --- a/content/2019-07-02-newsletter-18.md +++ /dev/null @@ -1,92 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 18" -date = 2019-07-02 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the eighteenth newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - - - - - - - - - - - - - - - -## The winner of the Chat Vote: Matrix - -About a month ago, due to Mozilla's plans to discontinue Mozilla IRC, we released [RFC 0351: Chat Vote] and started a [public vote] on which chat platform to use for the Rust Embedded Working Group in the future. - -The winner of that vote was __Matrix__, with 160 votes, followed by IRC with 103 votes and Discord with 74 votes. As Matrix has won by more than 3 votes, it will become the new official chat platform for Rust Embedded! The name of our new channel is [`#rust-embedded:matrix.org`](https://matrix.to/#/#rust-embedded:matrix.org), and you can join it right now using a client like [Riot](https://about.riot.im/). - -We will be trialling the new Matrix channel for the next two weeks, using it as our primary and official communication channel. After the trial period, we will evaluate any issues that came up during it, and decide how to proceed. More details about the organization of the channel can be found in the [operational notes]. - -Since IRC ended in second place, and it's our current platform, we'll also be establishing a bridge between the Matrix channel and IRC during the trial. This way, users have the option to continue using IRC if they so desire. - -To avoid the administrative overhead of having to switch bridged channels later, we will soon bridge directly to the `#rust-embedded` channel on Freenode, *not* to the Mozilla IRC channel. The bridge will be activated once we've worked out the Freenode channel registration. - -While Matrix is a federated protocol, we are not planning on running our own infrastructure for now - instead, we will be using the `matrix.org` IRC bridge, and users are free to register on `matrix.org` or any other homeserver of their choosing. If this turns out to be a problem during the trial period, we may reconsider this decision. - -We're also looking into a static log viewer, that would allow us to publish search-engine-indexable channel logs for public reading, similar to the public logs that we currently have. This may require us to self-host a static log generator such as [matrix-static]. Suggestions for other solutions are welcome! - -[RFC 0351: Chat Vote]: https://github.com/rust-embedded/wg/blob/master/rfcs/0351-chat-vote.md -[public vote]: https://github.com/rust-embedded/wg/issues/357 -[operational notes]: https://github.com/rust-embedded/wg/blob/matrix/ops/matrix.md -[matrix-static]: https://github.com/matrix-org/matrix-static - -## Highlights - -- We've had a bunch of Embedded Rust related events over the past couple of months. EWG member @thejpster was at ACCU 2019 (the Association of C and C++ Users Annual Conference), in Bristol, UK, on 12 April, delivering a talk on Embeddded Rust and the Monotron. Jonathan was then speaking at the Centre for Computing History in Cambridge, UK on 18 April, followed by hosting Oxidize at the end of April! Next up, Monotron is visiting Rust Conf in Portland, USA in late August. Don't forget, if you've been giving or attending Embedded Rust talks, drop us a line for the next newsletter! - -- [The embedded showcase](https://rust-embedded.github.io/showcase/) gained 3 new entries! We are still looking for cool embedded projects to serve that can serve as examples of what can be done in Rust. Don't hesitate to [submit yours](https://github.com/rust-embedded/showcase#submit-your-project)! - -## Embedded Projects - -- [@laanwj], [@Disasm] and [@burrbull] are working on [Rust support for the Kendryte K210 RISC-V chips](https://github.com/riscv-rust/k210-crates). - -- [@Disasm] and [@almindor] updated [riscv-rust-quickstart]: now you can run Rust on the HiFive1 Rev B board. - -- [@Disasm] released [stm32-usbd]: a fork of [stm32f103xx-usb] adopted for multiple STM32 device families. - -[@almindor]: https://github.com/almindor -[@burrbull]: https://github.com/burrbull -[@Disasm]: https://github.com/Disasm -[@laanwj]: https://github.com/laanwj -[riscv-rust-quickstart]: https://github.com/riscv-rust/riscv-rust-quickstart -[stm32-usbd]: https://crates.io/crates/stm32-usbd -[stm32f103xx-usb]: https://github.com/mvirkkunen/stm32f103xx-usb - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - - - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 22 | +4 | -| [HAL Impl Crates] | released | 25 | +6 | -| [Board Support Crates] | released | 18 | +5 | -| [Driver Crates Released] | released | 25 | +4 | -| [Driver Crates WIP] | WIP | 67 | +4 | -| [no-std crates] | released | 26 | +1 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates diff --git a/content/2019-10-03-newsletter-19.md b/content/2019-10-03-newsletter-19.md deleted file mode 100644 index 19d8033..0000000 --- a/content/2019-10-03-newsletter-19.md +++ /dev/null @@ -1,63 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 19" -date = 2019-10-03 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the 19th newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! - -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-19/33253 -[on twitter]: https://twitter.com/rustembedded/status/1179902902116241410 -[on reddit]: https://www.reddit.com/r/rust/comments/dcz96x/the_embedded_working_group_newsletter_19/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2019-10-31-newsletter-20.md - -## Embedded Projects - -- Google is working on a [Coreboot](https://www.coreboot.org/) replacement called [Oreboot](https://github.com/oreboot/oreboot), i.e. Coreboot minus the 'C'. Slides for a talk [about oreboot](https://osfc.io/uploads/talk/paper/23/Oreboot.pdf) are also available. - -- [@eldruin] released a platform-agnostic [driver for the VEML6075][veml6075-driver] UVA and UVB light sensor (so you can optimize your suntan) and published a [blog post][veml6075-blog-post] with some pictures of the device in action. - -- [@therealprof] wrote a [blog post][digital::v2 blog post] about porting an [Embedded HAL][embedded-hal] impl of the digital::v1 traits for GPIOs to digital::v2. - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -[@eldruin]: https://github.com/eldruin -[veml6075-driver]: https://crates.io/crates/veml6075 -[veml6075-blog-post]: https://blog.eldruin.com/veml6075-uva-uvb-uv-index-light-sensor-driver-in-rust/ -[@therealprof]: https://github.com/therealprof -[embedded-hal]: https://github.com/rust-embedded/embedded-hal/ -[digital::v2 blog post]: https://therealprof.github.io/blog/digital-v1-to-digital-v2/ - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 30 | +8 | -| [HAL Impl Crates] | released | 26 | +1 | -| [Board Support Crates] | released | 19 | +1 | -| [Driver Crates Released] | released | 27 | +2 | -| [Driver Crates WIP] | WIP | 68 | +1 | -| [no-std crates] | released | 28 | +2 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates diff --git a/content/2019-11-05-newsletter-20.md b/content/2019-11-05-newsletter-20.md deleted file mode 100644 index a66dfc7..0000000 --- a/content/2019-11-05-newsletter-20.md +++ /dev/null @@ -1,83 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 20" -date = 2019-11-05 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the 20th newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! - -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-20/34341 -[on twitter]: https://twitter.com/rustembedded/status/1191816369798561793 -[on reddit]: https://www.reddit.com/r/rust/comments/ds55s6/the_20th_embedded_rust_working_group_newsletter/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2019-11-28-newsletter-21.md - -## Embedded Projects - - -* [Jens Reimann] has assembled a [docker image] for developing Rust on the ESP8266 and ESP32 series of devices, including stable `alloc` support! - -[Jens Reimann]: https://github.com/ctron/ -[docker image]: https://github.com/ctron/rust-esp-container/ - -* [Lucas Brendel] working on peripheral access crates as well as a shared embedded HAL for the Infineon XMC4 series of microcontrollers in the [xmc-rs organization]. Peripheral access crates are available and the HAL is in the very early stages of development. - -[Lucas Brendel]: http://github.com/lucasbrendel/ -[xmc-rs organization]: https://github.com/xmc-rs/ - -* [42 Technology] have published the source code for their Nordic [nRF9160 demonstration application], along with a Rust crate which wraps up Nordic's proprietary C driver library. They also have a piece comparing Embedded Rust and Embedded C published in the German language magazine [IOT Design] this month. - -[42 Technology]: https://www.42technology.com -[nRF9160 demonstration application]: https://github.com/42-technology-ltd -[IOT Design]: https://www.iot-design.de/allgemein/robuste-entwicklung-mit-rust/ - -* [theJPster]'s [Monotron] got a write-up in [Hackaday]. Moves are also afoot for a next-generation Monotron - codename [Neotron 1000] - complete with a book! Check it out if you're interested developing a modern-day version of CP/M, written in Rust. - -[theJPster]: https://github.com/thejpster -[Monotron]: https://github.com/thejpster/monotron -[Hackaday]: https://hackaday.com/2019/10/05/the-monotron-a-rusty-retrocomputer/ -[Neotron 1000]: https://github.com/Neotron-Compute/Neotron-Book/blob/master/src/SUMMARY.md - -* [probe-rs] finally has released on crates.io. The library enables you to inspect, debug and flash ARM cores. Flash the ARM core your future embedded Rust project with [cargo-flash], fully integrated into cargo. Flashing works for the **nRF51822, nRF52832, nRF52840, STMF042 and STMF429xI** using a **DAPLink** or an **ST-Link**. -The upcomming 0.3.0 release will also enable your to flash any ARM core (provided an an ARM CMSIS-Pack exists in a known registry). - -[probe-rs]: https://github.com/probe-rs/probe-rs -[cargo-flash]: https://github.com/probe-rs/probe-rs/tree/master/cargo-flash - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - - - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 31 | +1 | -| [HAL Impl Crates] | released | 28 | +2 | -| [Board Support Crates] | released | 19 | 0 | -| [Driver Crates Released] | released | 28 | +1 | -| [Driver Crates WIP] | WIP | 70 | +2 | -| [no-std crates] | released | 28 | 0 | -| [no-std crates WIP] | WIP | 3 | +3 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates -[no-std crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip-1 diff --git a/content/2019-11-28-newsletter-21.md b/content/2019-11-28-newsletter-21.md deleted file mode 100644 index 212ba91..0000000 --- a/content/2019-11-28-newsletter-21.md +++ /dev/null @@ -1,91 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 21" -date = 2019-11-30 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the 21st newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - - -Discuss on [#rust-embedded:matrix.org], [users.rust-lang.org], [on twitter], or [on reddit]! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-21/35191 -[on twitter]: https://twitter.com/rustembedded/status/1200762672117166081 -[on reddit]: https://www.reddit.com/r/rust/comments/e3w3bz/the_21st_embedded_working_group_newsletter/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2019-12-26-newsletter-22.md - -## Highlights - -- Don't forget to join our [Community Chat on Matrix], with more than 250 Embedded Rustaceans! -- [@andre-richter] added two new tutorials for the `Operating System development tutorials in Rust on the Raspberry Pi` series: - - Tutorial 11: [Virtual Memory](https://github.com/rust-embedded/rust-raspi3-OS-tutorials/tree/master/11_virtual_memory) - - Tutorial 12: [CPU Exceptions: Part 1](https://github.com/rust-embedded/rust-raspi3-OS-tutorials/tree/master/12_cpu_exceptions_part1) -- [@jamesmunns] streamed some work on developing interrupt and panic code [on youtube] - -[Community Chat on Matrix]: https://matrix.to/#/#rust-embedded:matrix.org -[@andre-richter]: https://github.com/andre-richter -[@jamesmunns]: https://github.com/jamesmunns -[on youtube]: https://www.youtube.com/watch?v=KT6VnwuouPY - -## Embedded Projects - -- [@eldruin] released a platform-agnostic [driver for the OPT300x][opt300x-driver] family of ambient light sensors and published a [blog post][opt300x-blog-post] with a picture of the device taking lux measurements. -- @mciantyre published a custom runtime and peripheral access crates to support development on the Teensy 4. Check out [the repo][teensy4-rs] to see how it works, discuss the approach, and try it out. -- [@japaric] released version v0.1.0 of [`ufmt`], a smaller (6-40x) and faster (2-9x) alternative to `core::fmt` that's free of dynamic dispatch, recursion (where possible) and panicking branches. `ufmt` is *not* a drop-in replacement for `core::fmt` but it provides `uDebug` and `uDisplay` traits and a family of `uwrite!` macros. In this release the `uwrite!` macros, and the rest of the crate, work on the stable channel. -- [@jamesmunns] released two embedded crates: - - [`panic-persist`]: A panic handler crate inspired by `panic-ramdump` that logs panic messages to a region of RAM defined by the user, allowing for discovery of panic messages post-mortem using normal program control flow. - - [`cmim`], or Cortex-M Interrupt Move: A crate for Cortex-M devices to move data to interrupt context, without needing a critical section to access the data within an interrupt, and to remove the need for the "mutex dance" -- [@tarcieri] released [`aead`] v0.2, providing generic traits for Authenticated Encryption with Associated Data (AEAD) ciphers, which now supports [ergonomic `alloc`-free operation][aead-heapless] via an integration with the [`heapless`] crate. This trait is now implemented by [several crates providing pure Rust implementations of AEAD modes][aead-crates] which may be interesting to embedded users seeking to encrypt/data data in `heapless` buffers, including the [`chacha20poly1305`] and [`aes-siv`] crates (and forthcoming support in the [`aes-ccm`] crate). - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -[@eldruin]: https://github.com/eldruin -[opt300x-driver]: https://crates.io/crates/opt300x -[opt300x-blog-post]: https://blog.eldruin.com/opt300x-ambient-light-sensor-driver-in-rust/ -[teensy4-rs]: https://github.com/mciantyre/teensy4-rs -[@japaric]: https://github.com/japaric -[`ufmt`]: https://crates.io/crates/ufmt/0.1.0 -[@tarcieri]: https://github.com/tarcieri -[`aead`]: https://docs.rs/aead -[`heapless`]: https://docs.rs/heapless -[aead-heapless]: https://docs.rs/chacha20poly1305/0.3.0/chacha20poly1305/#in-place-usage-eliminates-alloc-requirement -[`panic-persist`]: https://crates.io/crates/panic-persist -[`cmim`]: https://crates.io/crates/cmim -[aead-crates]: https://github.com/rustcrypto/aeads#crates -[`chacha20poly1305`]: https://docs.rs/chacha20poly1305/ -[`aes-siv`]: https://docs.rs/aes-siv/ -[`aes-ccm`]: https://github.com/martindisch/aes-ccm/issues/2 - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 32 | +1 | -| [HAL Impl Crates] | released | 29 | +1 | -| [Board Support Crates] | released | 19 | 0 | -| [Driver Crates Released] | released | 30 | +1 | -| [Driver Crates WIP] | WIP | 69 | -1 | -| [no-std crates] | released | 30 | +2 | -| [no-std crates WIP] | WIP | 3 | 0 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates -[no-std crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip-1 diff --git a/content/2020-01-01-newsletter-22.md b/content/2020-01-01-newsletter-22.md deleted file mode 100644 index d26bd39..0000000 --- a/content/2020-01-01-newsletter-22.md +++ /dev/null @@ -1,123 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 22" -date = 2020-01-01 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the 22nd newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [#rust-embedded:matrix.org], [users.rust-lang.org], [on twitter], or [on reddit]! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-22/36377 -[on twitter]: https://twitter.com/rustembedded/status/1212379226231492614 -[on reddit]: https://www.reddit.com/r/rust/comments/eiisk9/the_22nd_embedded_working_group_newsletter/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2020-01-30-newsletter-23.md - -## Highlights - - -- [@andre-richter] added a new tutorial for the `Operating System development tutorials in Rust on the Raspberry Pi` series: - - Tutorial 13: [Integrated Testing](https://github.com/rust-embedded/rust-raspi3-OS-tutorials/tree/master/13_integrated_testing) - Kernel `Unit tests`, `Integration tests` and `Console tests` using `QEMU`. -- [@jamesmunns] sketched out a few introductory notes about foundational Embedded Rust Crates like `r0`, `cortex-m`, `PAC`s, and `HAL`s. See [part 1] and [part 2] on Twitter! -- [@jamesmunns] wrote about the cost of [Formatting in Embedded Rust] as part of the [#rust2020] effort, and how to reduce code size while maintaining panic debug-ability -- [Craig Bishop] wrote an overview of [Getting Started on the STM32L0], which contains an excellent breakdown of what makes up an Embedded Rust project - -[@jamesmunns]: https://twitter.com/bitshiftmask -[part 1]: https://twitter.com/bitshiftmask/status/1210714309124186112 -[part 2]: https://twitter.com/bitshiftmask/status/1211031300531986432 -[Formatting in Embedded Rust]: https://jamesmunns.com/blog/fmt-unreasonably-expensive/ -[#rust2020]: https://twitter.com/hashtag/rust2020 -[Craig Bishop]: https://github.com/craigjb -[Getting Started on the STM32L0]: https://craigjb.com/2019/12/31/stm32l0-rust/ - -## Embedded Projects - -- [@andre-richter] released v0.1.0 of [`qemu-exit`]. This library provides functions to gracefully exit a running QEMU session from within your Rust binary with an user-defined exit code. This can be used for unit or integration tests that run inside QEMU. Currently supports `aarch64` and `x86_64` architectures. - -- [@eldruin] released a platform-agnostic [driver for the Si4703][si4703-driver] FM radio turner (receiver) and published a [blog post][si4703-blog-post] including a picture of an example setup. - -- [@eldruin] released a platform-agnostic [driver for the PCA9685][pca9685-driver] PWM LED/Servo controller driver and published a [blog post][pca9685-blog-post] including a video of the device controlling RGB LEDs and several Servo motors simultaneously. - -- [@eldruin] released a platform-agnostic [driver for Vishay's VEML6030 and VEML7700][veml6030-driver] ambient light sensors and published a [blog post][veml6030-blog-post] about it. - -- [@nickray] released `salty` ([API][salty-api], [book][salty-book], [code][salty-code]), a library for fast Ed25519 signatures on Cortex-M4 and Cortex-M33 microcontrollers. It presents the `ed25519-dalek` API, but is self-contained and uses the fastest currently published field operations implementation, due to Bjoern Haase, based on the `UMAAL` DSP instruction `(a: u32, b: u32, c: u32, d: u32) -> (a * b + c + d): u64`. Testing is done on the `musca-b1` Cortex-M33 microcontroller, simulated in QEMU v4. Additionally, a C API is included. - -- [@nickray] released `littlefs2` ([API][littlefs2-api], [code][littlefs2-code]), an idiomatic Rust API for the [`littlefs`][littlefs-upstream] filesystem for microcontrollers, modeled after `std::fs`. The upstream library claims to be resilient against power-loss, and supports features like dynamic wear-leveling with bad block detection, inline files for efficient use of storage, and custom user attributes on files and directories. - -- [@nickray] released `nisty` ([API][nisty-api], [code][nisty-code]), a companion library to `salty` with similar API, but for NIST P-256 signatures on Cortex-M4 and Cortex-M33 microcontrollers. It offers deterministic signatures, idiomatic conversions, and uses [`micro-ecc`][micro-ecc] as backend implementation, which also has `UMAAL` DSP instruction optimizations. - -- [probe-rs] has finally released 0.3.0 on crates.io. Its `cargo-flash` extension has improved by a large margin! Flashing speed has increased 10x and it is possible to virtually flash any ARM core thanks to the use of CMSIS-Pack flash algorithms. - - You can create your own target description from a CMSIS-Pack with the use of [target-gen] - - Built in algorithms support the **nRF51xxx, nRF91xxx, nRF52xxx, STM32F1xx, LPC8xx and LPC55S66 and LPC55S69** series using a **DAPLink** or an **ST-Link**. - - Please file a [PR][probe-rs-pr] if you extracted an algorithm for your chip and tested it! - - We are looking for contributors. We have lots of non-ARM-specific stuff to do as well, such as improving erroring, useability and documentation including a webpage on the newly acquired [probe.rs] domain. - - Join us on [#probe-rs:matrix.org] - - 0.4.0 will finally feature GDB support :) Stay tuned! - -[@andre-richter]: https://github.com/andre-richter -[`qemu-exit`]: https://crates.io/crates/qemu-exit - -[@eldruin]: https://github.com/eldruin -[si4703-driver]: https://crates.io/crates/si4703 -[si4703-blog-post]: https://blog.eldruin.com/si4703-fm-radio-receiver-driver-in-rust/ - -[pca9685-driver]: https://crates.io/crates/pwm-pca9685 -[pca9685-blog-post]: https://blog.eldruin.com/pca9685-pwm-led-servo-controller-driver-in-rust/ - -[veml6030-driver]: https://crates.io/crates/veml6030 -[veml6030-blog-post]: https://blog.eldruin.com/veml6030-ambient-light-sensor-driver-in-rust/ - -[@nickray]: https://github.com/nickray -[salty-api]: https://api.salty.rs -[salty-book]: https://book.salty.rs -[salty-code]: https://code.salty.rs -[fe25519]: https://github.com/BjoernMHaase/fe25519 -[littlefs2-api]: https://docs.rs/littlefs2 -[littlefs2-code]: https://github.com/nickray/littlefs2 -[littlefs-upstream]: https://github.com/ARMmbed/littlefs -[nisty-api]: https://docs.rs/nisty -[nisty-code]: https://github.com/nickray/nisty -[micro-ecc]: https://github.com/kmackay/micro-ecc - -[probe-rs]: https://github.com/probe-rs/probe-rs -[cargo-flash]: https://github.com/probe-rs/probe-rs/tree/master/cargo-flash -[target-gen]: https://github.com/probe-rs/target-gen -[probe-rs-pr]: https://github.com/probe-rs/probe-rs/pulls -[#probe-rs:matrix.org]: https://matrix.to/#/#probe-rs:matrix.org -[probe.rs]: https://probe.rs - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 39 | +7 | -| [HAL Impl Crates] | released | 31 | +2 | -| [Board Support Crates] | released | 19 | 0 | -| [Driver Crates Released] | released | 33 | +3 | -| [Driver Crates WIP] | WIP | 67 | -2 | -| [no-std crates] | released | 32 | +2 | -| [no-std crates WIP] | WIP | 3 | 0 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates -[no-std crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip-1 diff --git a/content/2020-02-01-newsletter-23.md b/content/2020-02-01-newsletter-23.md deleted file mode 100644 index 6ec8c5d..0000000 --- a/content/2020-02-01-newsletter-23.md +++ /dev/null @@ -1,117 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 23" -date = 2020-02-01 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the 23rd newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [#rust-embedded:matrix.org], [users.rust-lang.org], [on twitter], or [on reddit]! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-23/37708 -[on twitter]: https://twitter.com/rustembedded/status/1223606976527114240 -[on reddit]: https://www.reddit.com/r/rust/comments/ex6ike/the_23rd_embedded_working_group_newsletter/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2020-02-29-newsletter-24.md - -## Highlights - -- [@lupyuen] has been doing very cool things with Rust and the PineTime smart watch - see [Porting druid Rust Widgets to PineTime Smart Watch] and [Optimising PineTime’s Display Driver with Rust and Mynewt]. -- [The Raspberry Pi OS dev tutorial] got a new chapter on Kernel Unit, Integration and Console tests using QEMU -- Google announced [OpenSK], an open source security key based on [TockOS] in Embedded Rust -- [Ferrous Systems] announced the second iteration of [Oxidize], an embedded Rust conference in Berlin Germany, will take place in July of 2020. Read the [Announcement Blog Post] for more details -- [PLCnext] shared a [Sample Rust Runtime] and a how-to guide for running deterministic real-time Rust - on an industrial Linux device - -## Embedded Projects - -- [@almindor] released a platform-agnostic [driver for the MAX7219][max7219-driver] segmented display and published a [blog post][max7219-blog-post] including a picture of an example setup. -- [embedded-hal-mock] has released 0.7.1 on crates.io with [support for error expectations]. This means that you can now unit test the error handling logic of your embedded-hal driver crates. -- [@rubberduck203][@rubberduck203] added VS Code configurations to the [cortex-m-quickstart][cortex-m-quickstart] and published a [blog post][vscode-blog]. Debugging Cortex-M projects in editor with VS Code now works out of the box. -- [@rubberduck203][@rubberduck203] released a [quickstart template for the STM32F3DISCOVERY board][stm32f3-quickstart] with pre-configured linker script & build targets. -- [@jkristell] released version 0.6 of the [Infrared][infrared] crate and published a [blog post][infrared-blog] on how to add remote control support to an embedded Rust project. -- Steven Walter gave a talk at [Rust Belt Rust][rust-belt-rust] about [introducing Rust into an existing embedded Linux project][introducing-rust-into-legacy]. -- [@arosspope] released an implementation of [the game snake for the stm32f3 discovery board] using RTFM. -- Rust firmware for [Stabilizer] has been released. [Stabilizer][stabilizer-wiki] is an open hardware, high speed, multi channel, STM32H743 based feedback controller for Quantum Physics applications. The firmware features [RTFM v0.5] and [smoltcp]. Support for several analog front end mezzanines like current stabilization or Pound-Drever-Hall locks is being developed. -- [@42technology] announced they have ported Cloudflare's Rust-language [QUIC] library (known as '[quiche]') to the Nordic nRF9160, producing possibly the world's first QUIC demonstration on that platform. -- [atsamd-hal] 0.8.2 released, which includes work by [@twitchyliquid64] and [@jacobrosenthal] implementing USB support for SAMD21 and SAMD51 devices. -- [@Disasm] released [longan-nano] and [seedstudio-gd32v] board support crates with examples for the corresponding RISC-V boards. - - - -[@42technology]: https://twitter.com/42technology -[@almindor]: https://github.com/almindor -[@arosspope]: https://github.com/arosspope -[@Disasm]: https://github.com/Disasm -[@jacobrosenthal]: https://github.com/jacobrosenthal -[@jkristell]: https://github.com/jkristell -[@lupyuen]: https://github.com/lupyuen -[@rubberduck203]: https://twitter.com/Rubberduck203 -[@twitchyliquid64]: https://github.com/twitchyliquid64 -[Ferrous Systems]: https://ferrous-systems.com -[PLCnext]: https://github.com/PLCnext/ - -[Announcement Blog Post]: https://ferrous-systems.com/blog/oxidize-2020/ -[atsamd-hal]: https://github.com/atsamd-rs/atsamd -[cortex-m-quickstart]: https://github.com/rust-embedded/cortex-m-quickstart -[embedded-hal-mock]: https://github.com/dbrgn/embedded-hal-mock/ -[infrared-blog]: https://jott.se/blog/infrared -[infrared]: https://github.com/jkristell/infrared -[introducing-rust-into-legacy]: https://www.youtube.com/watch?v=EoV94cg_Tug -[longan-nano]: https://github.com/riscv-rust/longan-nano/ -[max7219-blog-post]: https://blog.katona.me/2019/12/22/MAX7219-segmented-display-driver-in-Rust/ -[max7219-driver]: https://crates.io/crates/max7219 -[OpenSK]: https://security.googleblog.com/2020/01/say-hello-to-opensk-fully-open-source.html -[Optimising PineTime’s Display Driver with Rust and Mynewt]: https://medium.com/@ly.lee/optimising-pinetimes-display-driver-with-rust-and-mynewt-3ba269ea2f5c -[Oxidize]: https://oxidizeconf.com -[Porting druid Rust Widgets to PineTime Smart Watch]: https://medium.com/@ly.lee/porting-druid-rust-widgets-to-pinetime-smart-watch-7e1d5a5d977a -[QUIC]: https://en.wikipedia.org/wiki/QUIC -[quiche]: https://github.com/cloudflare/quiche -[RTFM v0.5]: https://github.com/rtfm-rs/cortex-m-rtfm -[rust-belt-rust]: http://www.rust-belt-rust.com/ -[Sample Rust Runtime]: https://github.com/PLCnext/rust-sample-runtime -[seedstudio-gd32v]: https://github.com/riscv-rust/seedstudio-gd32v -[smoltcp]: https://github.com/m-labs/smoltcp -[stabilizer-wiki]: https://github.com/sinara-hw/Stabilizer/wiki -[Stabilizer]: https://github.com/quartiq/stabilizer -[stm32f3-quickstart]: https://github.com/rubberduck203/stm32f3-discovery-quickstart -[support for error expectations]: https://docs.rs/embedded-hal-mock/0.7.1/embedded_hal_mock/i2c/index.html#testing-error-handling -[the game snake for the stm32f3 discovery board]: https://github.com/arosspope/usnake -[The Raspberry Pi OS dev tutorial]: https://github.com/rust-embedded/rust-raspi3-OS-tutorials/tree/master/13_integrated_testing -[TockOS]: https://www.tockos.org/ -[vscode-blog]: https://christopherjmcclellan.wordpress.com/2019/12/31/debugging-rust-cortex-m-with-vs-code-take-2/ - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 42 | +3 | -| [HAL Impl Crates] | released | 32 | +1 | -| [Board Support Crates] | released | 21 | +2 | -| [Driver Crates Released] | released | 36 | +3 | -| [Driver Crates WIP] | WIP | 71 | +4 | -| [no-std crates] | released | 34 | +2 | -| [no-std crates WIP] | WIP | 3 | 0 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates -[no-std crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip-1 diff --git a/content/2020-08-17-newsletter-24.md b/content/2020-08-17-newsletter-24.md deleted file mode 100644 index 9b513f6..0000000 --- a/content/2020-08-17-newsletter-24.md +++ /dev/null @@ -1,159 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 24" -date = 2020-08-17 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the 24th newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -We've been on an unscheduled hiatus for the past six months or so, but it's time for us to return! Today we're doing a quick fast-forward of all of the great things that have been released while we've been on break. - -For the next few weeks, we'll be doing a special "catch-up" schedule, meaning we'll be releasing articles weekly until we've caught up with all of the recent changes. Once we've wrapped that up, we'll go back to a regular monthly cadence. - -We've also added a few new folks to the [resources team](https://github.com/rust-embedded/wg#the-resources-team) say hello to [@hargoniX](https://github.com/hargonix/), [@eldruin](https://github.com/eldruin) and [@kalkyl](https://github.com/kalkyl) who will be helping out with the newsletter! - -Want to have your project mentioned? Make sure you [let us know][the next newsletter] so we can include it! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [#rust-embedded:matrix.org], [users.rust-lang.org], [on twitter], or [on reddit]! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-24/47405 -[on twitter]: https://twitter.com/rustembedded/status/1295330780688809986 -[on reddit]: https://www.reddit.com/r/rust/comments/ibcvnz/the_embedded_working_group_newsletter_24/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2020-08-24-newsletter-25.md - -## The Great Catch-Up! - -Here's a whirlwind overview of some of the things that have been released and changed over the past six months or so! -We'll cover some of these updates in more detail over the coming weeks! - -### Renames - -* The RTFM framework has been renamed to RTIC - Real Time Interrupt-driven Concurrency! - -### Resources - -* We've added [phil's OS blog](https://os.phil-opp.com/) to our list of resources -* [@hargoniX](https://github.com/hargonix) has added a blog post on [embedded driver writing](https://hboeving.dev/blog/rust-2c-driver-p1/) - -### Tooling - -* the [probe-rs organization](https://probe.rs) has added a lot of wonderful new tooling, including [cargo-flash](https://crates.io/crates/cargo-flash) and [cargo-embed](https://crates.io/crates/cargo-embed) -* [cargo-hf2](https://crates.io/crates/cargo-hf2) for "A small cargo subcommand to download cargo builds to Microsoft UF2 bootloaders via HID USB" -* The [Knurling-rs](https://github.com/knurling-rs/meta) project for embedded tooling has kicked off by releasing [probe-run](https://github.com/knurling-rs/probe-run) - -### Bindings - -* [FreeRTOS-rust](https://crates.io/crates/freertos-rust) as RTOS bindings (not to be confused with [FreeRTOS.rs](https://crates.io/crates/freertos_rs) ) - -### New Possibilities - -* It is [now possible](https://ferrous-systems.com/blog/stable-async-on-embedded/) to run [async/await on embedded](https://blog.rust-lang.org/2020/06/04/Rust-1.44.0.html)! -* Applications can now be compiled for [AVR in mainline Rust nightly builds](https://github.com/rust-lang/rust/issues/44052#issuecomment-663394401)! - -### PACs - -* [msp430fr2355 PAC](https://crates.io/crates/msp430fr2355) has been added -* [ambiq-apollo1-pac](https://crates.io/crates/ambiq-apollo1-pac), [ambiq-apollo2-pac](https://crates.io/crates/ambiq-apollo2-pac) and [ambiq-apollo3p-pac](https://crates.io/crates/ambiq-apollo3p-pac) have been added - -### HALs - -* [msp430fr2x5x-hal](https://crates.io/crates/msp430fr2x5x-hal) has been added - -### BSPs - -* a [BSP for the onebitsy](https://crates.io/crates/onebitsy) -* Several Adafruit BSPs: - * [metro_m0](https://crates.io/crates/metro_m0) - * [pygamer](https://crates.io/crates/pygamer) - * [feather-f405](https://crates.io/crates/feather-f405) - * [feather_m0](https://crates.io/crates/feather_m0) - * [feather_m4](https://crates.io/crates/feather_m4) - * [circuit_playground_express](https://crates.io/crates/circuit_playground_express) - * [edgebadge](https://crates.io/crates/edgebadge) - * [gemma_m0](https://crates.io/crates/gemma_m0) - * [itsybitsy_m0](https://crates.io/crates/itsybitsy_m0) - * [itsybitsy_m4](https://crates.io/crates/itsybitsy_m4) - * [trinket_m0](https://crates.io/crates/trinket_m0) -* Several arduino BSPs: - * [arduino_mkrvidor4000](https://crates.io/crates/arduino_mkrvidor4000) - * [arduino_mkrzero](https://crates.io/crates/arduino_mkrzero) - * [arduino_nano33iot](https://crates.io/crates/arduino_nano33iot) -* The [samd21_mini BSP](https://crates.io/crates/samd21_mini) -* The [xiao_m0 BSP](https://crates.io/crates/xiao_m0) - -### General abstraction crates - -* The [atat crate](https://github.com/BlackbirdHQ/atat) for parsing AT commands - -### Drivers - -* [ADXL313](https://crates.io/crates/adxl313) -* [AnyLeaf](https://crates.io/crates/anyleaf) -* [dht-sensor](https://crates.io/crates/dht-sensor) -* [MAX6955](https://crates.io/crates/max6955) -* [MCP25LCXX](https://crates.io/crates/microchip-eeprom-25lcxx) -* [TC72](https://crates.io/crates/microchip-tc72r-rs) -* [ST7789](http://crates.io/crates/st7789) -* [DW1000](https://crates.io/crates/dw1000) -* [Adafruit-7segment](https://crates.io/crates/adafruit-7segment) - -### WIP Drivers - -* [BMI160](https://crates.io/crates/bmi160) -* [epd-waveshare](https://crates.io/crates/epd-waveshare) -* [HRS3300](https://crates.io/crates/hrs3300) -* [HDC20xx](https://crates.io/crates/hdc20xx) -* [ISL29125](https://crates.io/crates/isl29125) -* [LSM9DS1](https://crates.io/crates/lsm9ds1) -* [ltr-559](https://crates.io/crates/ltr-559) -* [lvgl](https://github.com/rafaelcaricio/lvgl-rs) -* [MAX170xx](https://github.com/eldruin/max170xx-rs) -* [MAX3010x](https://crates.io/crates/max3010x) -* [MCP4725](https://crates.io/crates/mcp4725) -* [MLX9061x](https://crates.io/crates/mlx9061x) -* [ublox-cellular-rs](https://github.com/BlackbirdHQ/ublox-cellular-rs) - -### no_std crates - -* [debouncr](https://crates.io/crates/debouncr) -* [embedded-crc-macros](https://crates.io/crates/embedded-crc-macros) -* [embedded-websocket](https://crates.io/crates/embedded-websocket) -* [endian_codec](https://crates.io/crates/endian_codec) -* [gdbstub](https://crates.io/crates/gdbstub) -* [microfft](https://crates.io/crates/microfft) -* [smbus-pec](https://crates.io/crates/smbus-pec) - - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 46 | +4 | -| [HAL Impl Crates] | released | 33 | +1 | -| [Board Support Crates] | released | 38 | +17 | -| [Driver Crates Released] | released | 45 | +9 | -| [Driver Crates WIP] | WIP | 84 | +13 | -| [no-std crates] | released | 41 | +7 | -| [no-std crates WIP] | WIP | 3 | +0 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates -[no-std crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip-1 diff --git a/content/2020-08-24-newsletter-25.md b/content/2020-08-24-newsletter-25.md deleted file mode 100644 index 12149b6..0000000 --- a/content/2020-08-24-newsletter-25.md +++ /dev/null @@ -1,109 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 25" -date = 2020-08-24 -draft = false -in_search_index = true -template = "page.html" -+++ - -This is the 25th newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -As a note, some of these stories have happened over the past months. We're still working on catching up, but wanted to share them with you! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [#rust-embedded:matrix.org], [users.rust-lang.org], [on twitter], or [on reddit]! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org -[users.rust-lang.org]: https://users.rust-lang.org/t/the-embedded-working-group-newsletter-25/47744 -[on twitter]: https://twitter.com/rustembedded/status/1298004492475150338 -[on reddit]: https://www.reddit.com/r/rust/comments/ifxv2h/the_embedded_working_group_newsletter_25/ - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2020-08-31-newsletter-26.md - -## Highlights - -- [@hannobraun][@braun-embedded] wrote an [article about his DW1000 driver][dw1000]. -- [@andre-richter] added a new tutorial to the [Operating System development tutorials in Rust on the Raspberry Pi] series: - - [Tutorial 14: Exceptions Part 2: Peripheral IRQs] - Including drivers for the BCM and GICv2 interrupt controllers. -- In recent nightlies,`rust-std` support for the two `bare-metal` `aarch64` targets [has landed][aarch64-rust-std]. - - Add them using `rustup target add aarch64-unknown-none-softfloat` or `rustup target add aarch64-unknown-none`. - - [See it in action here][os-dev-rust-std] for building a kernel without the need for third-party tools like `xbuild` or `xargo`. -- [@therealprof][@therealprof] wrote an [introduction article about the "USB-C pill"][USB-C pill]. -- [@bobmcwhirter][@bobmcwhirter] wrote an article about using an [ESP8266 as a WiFi offload with an STM32F401RE][wifi-offload] -- [Ferrous Systems] released [defmt], a highly efficient Rust logging framework for embedded devices - -## Embedded Projects - -- [@rubberduck203][@rubberduck203] released the experimental [switch-hal crate][switch-hal], which provides a zero-cost abstraction over Active High/Active Low GPIO, allowing application developers to more clearly express their intent and for drivers to avoid making runtime decisions about driving a line high or low based on the pin's active level. -- [@rubberduck203][@rubberduck203] has also released the [stm32f3-discovery board support crate][stm32f3-discovery] as an alternative to the unmaintained `f3` crate. -- The [stm32f3-discovery-quickstart][stm32f3-discovery-quickstart] template has been updated to utilize both the [stm32f3-discovery board support crate][stm32f3-discovery] and the [switch-hal crate][switch-hal]. It also now includes VS Code tasks for cleaning, building examples, and building in release mode. -- [@proman21][@proman21] has released a beta version of [samd-timer][samd-timer], an abstraction for the Timer peripherals present on Atmel SAM microcontrollers. This library provides lower-level control over these timers than [atsamd-hal][atsamd-hal], while remaining compatible with the HAL clock system. -- [@dbrgn][@dbrgn] and [@rnestler][@rnestler] released a first version of the [shtcx](https://docs.rs/shtcx/) embedded-hal driver for Sensirion SHTCx series humidity/temperature sensors. The driver is feature-complete, but currently supports only a blocking API. The crate will be updated with an alternative non-blocking API soon. -- [@ra-kete][@ra-kete] released the [microfft crate][microfft], a library for computing fast fourier transforms on embedded devices. -- [@dajamante][@dajamante] added an [obstacle avoiding robot](https://github.com/Dajamante/avr-car) with more [details in this article](https://github.com/Dajamante/avr-car/blob/master/article.md). -- [@therealprof][@therealprof] released the [display-interface crate][display-interface], an abstraction over the different possibilities to drive a display. -- [@bugadani][@bugadani] released the [embedded-text crate][embedded-text], a text rendering library built on top of [embedded-graphics][embedded-graphics]. -- [@bobmcwhirter][@bobmcwhirter] released the [drogue-esp8266][drogue-esp8266], a WiFi-offload embedded-nal implementation crate. - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -[@rubberduck203]: https://twitter.com/Rubberduck203 -[@proman21]: https://github.com/proman21 -[@dbrgn]: https://github.com/dbrgn -[@rnestler]: https://github.com/rnestler -[@ra-kete]: https://github.com/ra-kete -[@braun-embedded]: http://github.com/braun-embedded -[@andre-richter]: https://github.com/andre-richter -[@dajamante]:https://github.com/dajamante -[@therealprof]:https://github.com/therealprof -[@bugadani]: https://github.com/bugadani -[@bobmcwhirter]: https://github.com/bobmcwhirter -[Ferrous Systems]: https://ferrous-systems.com - -[switch-hal]: https://crates.io/crates/switch-hal -[stm32f3-discovery]: https://crates.io/crates/stm32f3-discovery -[stm32f3-discovery-quickstart]: https://github.com/rubberduck203/stm32f3-discovery-quickstart/ -[samd-timer]: https://github.com/proman21/samd-timer/ -[atsamd-hal]: https://github.com/atsamd-rs/atsamd/ -[microfft]: https://crates.io/crates/microfft -[dw1000]: https://braun-embedded.com/dw1000/ -[Operating System development tutorials in Rust on the Raspberry Pi]: https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials -[Tutorial 14: Exceptions Part 2: Peripheral IRQs]: https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/14_exceptions_part2_peripheral_IRQs -[aarch64-rust-std]: https://github.com/rust-lang/rust/pull/68334 -[os-dev-rust-std]: https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/commit/c4f9432e131f6aa6dd58b9ba795d67ec3bfd3c7f -[display-interface]: https://crates.io/crates/display-interface -[embedded-graphics]: https://github.com/jamwaffles/embedded-graphics -[embedded-text]: https://github.com/bugadani/embedded-text -[USB-C pill]: https://therealprof.github.io/blog/usb-c-pill-part1/ -[wifi-offload]: https://blog.drogue.io/wifi-offload/ -[drogue-esp8266]: https://crates.io/crates/drogue-esp8266 -[defmt]: https://ferrous-systems.com/blog/defmt/ - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. Here is a current snapshot of what is available there: - -| Type | Status | Count | Diff | -| :--- | :----- | :---- | :--- | -| [Peripheral Access Crates] | released | 47 | +1 | -| [HAL Impl Crates] | released | 33 | 0 | -| [Board Support Crates] | released | 38 | 0 | -| [Driver Crates Released] | released | 52 | +7 | -| [Driver Crates WIP] | WIP | 85 | +1 | -| [no-std crates] | released | 41 | 0 | -| [no-std crates WIP] | WIP | 3 | 0 | - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 -[Peripheral Access Crates]: https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates -[HAL Impl Crates]: https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates -[Board Support Crates]: https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates -[Driver Crates Released]: https://github.com/rust-embedded/awesome-embedded-rust#driver-crates -[Driver Crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip -[no-std crates]: https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates -[no-std crates WIP]: https://github.com/rust-embedded/awesome-embedded-rust#wip-1 diff --git a/content/2021-02-16-newsletter-26.md b/content/2021-02-16-newsletter-26.md deleted file mode 100644 index 38e90b4..0000000 --- a/content/2021-02-16-newsletter-26.md +++ /dev/null @@ -1,75 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 26" -date = 2021-02-16 -draft = false -in_search_index = true -template = "page.html" -+++ - -## Highlights - -- [@cecton] wrote a blog post targeted to experienced developers but embedded development beginners: [Rust, Arduino and Embedded Development as a Beginner: Part 1] - -- [@brainstorm] and [@joshajohnson] Created a RTIC example for an HID mouse with a blackberry trackball [bbtrackball-rs]. - -- The [knurling-rs] tooling initiative by [Ferrous Systems] has grown: after [`defmt`], the project has publicly released three new tools: - * [`flip-link`], a linker wrapper that adds zero-cost stack overflow protection to your project - * [`probe-run`], a Cargo runner that seamlessly runs embedded programs on your target device as if they were native ones - * [`defmt-test`], a proc-macro to write and run unit tests on embedded devices - -- The Rust Embedded Working Group's MSRV (Minimum Supported Rust Version) - policy has been updated and now only requires that crates build on the - latest stable Rust release. See [msrv] for more details. - - - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -- [@eldruin] released a platform-agnostic [driver for the CCS811][ccs811-driver] indoor air quality sensor and published a [blog post][ccs811-blog-post] including example setups. -- [@diondokter] released a first version of [device-driver] which can aid driver developers in developing device drivers. For now only register interfaces are supported as is laid out in [this twitter thread][device-driver-thread]. -- [@dbrgn] released version 0.2 of the [debouncr] crate. It now supports stateful debouncing, meaning that the user can now choose whether every bouncing→stable transition should be detected as an edge, or only high↔︎low transitions. - - - -[@cecton]: https://twitter.com/CecileTonglet -[@brainstorm]: https://twitter.com/braincode -[@joshajohnson]: https://twitter.com/_joshajohnson -[Rust, Arduino and Embedded Development as a Beginner: Part 1]: https://blog.cecton.com/posts/rust-and-arduino-part1/ -[bbtrackball-rs]: https://github.com/brainstorm/bbtrackball-rs - -[Ferrous Systems]: https://ferrous-systems.com -[knurling-rs]: https://github.com/knurling-rs/meta -[`defmt`]: https://ferrous-systems.com/blog/defmt/ -[`flip-link`]: https://github.com/knurling-rs/flip-link -[`probe-run`]: https://github.com/knurling-rs/probe-run -[`defmt-test`]: https://github.com/knurling-rs/defmt-test - -[@eldruin]: https://github.com/eldruin -[ccs811-driver]: https://crates.io/crates/embedded-ccs811 -[ccs811-blog-post]: https://blog.eldruin.com/ccs811-indoor-air-quality-sensor-driver-in-rust/ - -[@diondokter]: https://github.com/diondokter -[device-driver]: https://crates.io/crates/device-driver -[device-driver-thread]: https://twitter.com/Geoxion/status/1303849776665026561 - -[@dbrgn]: https://twitter.com/dbrgn/ - -[msrv]: https://github.com/rust-embedded/wg/pull/523 - -[debouncr]: https://docs.rs/debouncr/ - -## Get Involved - -This is the 26th newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [#rust-embedded:matrix.org]! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2021-03-16-newsletter-27.md diff --git a/content/2021-03-16-newsletter-27.md b/content/2021-03-16-newsletter-27.md deleted file mode 100644 index 39efd2c..0000000 --- a/content/2021-03-16-newsletter-27.md +++ /dev/null @@ -1,66 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 27" -date = 2021-03-16 -draft = false -in_search_index = true -template = "page.html" -+++ - -## Highlights - -- [@hannobraun](https://github.com/hannobraun) published [Last Month in Flott - March 2021](https://flott-motion.org/news/last-month-in-flott-march-2021/), the monthly newsletter for Flott. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers). - -- The [cortex-m crate](https://github.com/rust-embedded/cortex-m) has been - updated to 0.7, including a recent release of 0.7.2, please update your - dependencies and let us know if you encounter any issues! - -- The Embedded Rust documentation and books have moved URLs, and are now all - available from https://docs.rust-embedded.org. - -- This blog has also moved URLs, and is now available at - https://blog.rust-embedded.org - -- Our weekly meetings continue at 8PM Berlin Time on our Matrix channel, - [#rust-embedded:matrix.org]. Join us to catch up on the latest developments - in the Embedded Rust ecosystem! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org - - - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -- [@hannobraun](https://github.com/hannobraun) released [RampMaker 0.2](https://flott-motion.org/news/ramp-maker-0-2/), a library for generating stepper motor acceleration profiles, and [Stepper 0.5](https://flott-motion.org/news/stepper-0-5/), the universal stepper motor interface. Both libraries are part of the [Flott](https://flott-motion.org/) motion control toolkit. -- [embassy](https://github.com/embassy-rs/embassy), an async/await executor - designed for embedded usage and currently supporting nRF and STM32F4 devices, - is nearing its first crates.io release. Feedback and testing would be welcome! - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 - -## Get Involved - -This is the 27th newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - - - - - - - - - - -If you want to mention something in [the next newsletter], send us a pull request! - - - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2021-04-16-newsletter-28.md diff --git a/content/2021-04-20-newsletter-28.md b/content/2021-04-20-newsletter-28.md deleted file mode 100644 index 6f3a447..0000000 --- a/content/2021-04-20-newsletter-28.md +++ /dev/null @@ -1,57 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 28" -date = 2021-04-20 -draft = false -in_search_index = true -template = "page.html" -+++ - -## Highlights - -- [Last Month in Flott](https://flott-motion.org/news/last-month-in-flott-april-2021/), the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers). - - - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -- Crate [device-driver] has released version 0.2.0! -(Since 0.1.0, added customizable bit ordering and more pac-like write and modify interface) -- After almost a year [stm32f4xx-hal] has released version 0.9.0! Get it while it's hot. 🔥🌶️ -- [embedded-graphics 0.7.0-beta.1 released] as the first stable step towards the long awaited 0.7.0! - There should be no major/breaking changes after this release as we work mostly on documentation, bugfixes and polish. See the release notes [here](https://github.com/embedded-graphics/embedded-graphics/releases/tag/embedded-graphics-v0.7.0-beta.1). -- [svd2rust 0.18.0] was released, bringing a number of changes to PAC - generation; if you maintain a PAC please try it out! -- [shared-bus 0.2.1] was released, with support for concurrency frameworks like RTIC. Check the [relevant documentation](https://docs.rs/shared-bus/latest/shared_bus/type.BusManagerAtomicCheck.html) for more details. - - -[device-driver]: https://crates.io/crates/device-driver -[stm32f4xx-hal]: https://crates.io/crates/stm32f4xx-hal -[embedded-foo 1.0.0 released]: https://example.com/blog/... -[embedded-graphics 0.7.0-beta.1 released]: https://crates.io/crates/embedded-graphics/0.7.0-beta.1 -[svd2rust 0.18.0]: https://crates.io/crates/svd2rust -[shared-bus 0.2.1]: https://crates.io/crates/shared-bus - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 - -## Get Involved - -This is the 28th newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [#rust-embedded:matrix.org]! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org - -If you want to mention something in [the next newsletter], send us a pull request! - - - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2021-05-07-newsletter-29.md diff --git a/content/2021-07-27-newsletter-29.md b/content/2021-07-27-newsletter-29.md deleted file mode 100644 index 6221ede..0000000 --- a/content/2021-07-27-newsletter-29.md +++ /dev/null @@ -1,46 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 29" -date = 2021-07-27 -draft = false -in_search_index = true -template = "page.html" -+++ - -## Highlights - -- [Last Month in Flott](https://flott-motion.org/news/last-month-in-flott-may-2021/), the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers). - -- The [microbit crate](https://crates.io/crates/microbit) has released v0.9.0, moved under the [nrf-rs](https://github.com/nrf-rs/microbit) organisational umbrella, **and** gained [micro:bit v2](https://github.com/nrf-rs/microbit/pull/44) support. 🎉 -- The [switch-hal crate](https://crates.io/crates/switch-hal) released v0.4.0, adding [StatefulOutputSwitch](https://docs.rs/switch-hal/0.4.0/switch_hal/trait.StatefulOutputSwitch.html) for platforms that support `StatefulOutputPin`. -- The [probe-rs](https://probe.rs) project, which provides debugging and flash programming for a variety of embedded targets, released version [v0.11.0](https://probe.rs/blog/release-0-11-0/), with a number of performance and functionality improvements. -- [cortex-m](https://crates.io/crates/cortex-m) released version 0.7.3, improving ease-of-use for the `Delay` implementation and fixing native builds on non-x86 hosts. -- [cortex-m-rt](https://crates.io/crates/cortex-m-rt) released version 0.6.15, backporting various fixes to the linker script and helping prepare for a new 0.7 release soon. -- [cross](https://github.com/rust-embedded/cross) has posted a [call for help](https://github.com/rust-embedded/cross/issues/574) looking for new maintainers: if you use cross and would like to help out, please check it out! - - - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -- [Windfisch] published their [Midikraken], an extensible up-to-16-port MIDI-USB-Interface that also will support standalone operation (e.g. MIDI routing) soon. The project uses Rust's RTIC framework to drive a STM32F103 microcontroller board (a.k.a. "Blue Pill") and is open-source and open-hardware. The firmware is in active development and lots of cool new features are down the way! Kits for self-assembly will likely be sold some day in the future. - -[Windfisch]: https://windfis.ch -[MidiKraken]: https://github.com/Windfisch/midikraken - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 - -This is the 29th newsletter of the [Embedded WG] where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -## Get Involved - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/2021-08-24-newsletter-30.md diff --git a/content/2021-11-16-newsletter-30.md b/content/2021-11-16-newsletter-30.md deleted file mode 100644 index d0e40e5..0000000 --- a/content/2021-11-16-newsletter-30.md +++ /dev/null @@ -1,71 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 30" -date = 2021-11-16 -draft = false -in_search_index = true -template = "page.html" -+++ - - - -## Highlights - -- [@dkhayes117] joined the embedded working group's RISC-V team -- Rust std support [added for the ESP32](https://github.com/rust-lang/rust/pull/87666) -- [Rust on Espressif chips update](https://mabez.dev/blog/posts/esp-rust-18-10-2021/) -- [State of LoRaWAN support](https://blog.drogue.io/lorawan-update/) - - - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -- [cortex-m-rt] v0.7.0 was released, with a number of bug fixes. -- [embedded-hal] 0.2.6 released with some backports from the upcoming 1.0 - release: the new Transactional SPI and I2C interface, 10-bit I2C addressing - mode, `set_state` method for `OutputPin`, and new `IoPin` trait. -- [embedded-hal] 1.0.0-alpha.5 released, with a number of new features and - changes as we work towards the final 1.0 release. -- [linux-embedded-hal] 0.3.1 and 0.3.2 released with some backports and updates including - an implementation of the Transactional SPI and I2C interface and a bugfix - for active-low output pins. -- [linux-embedded-hal] 0.4.0-alpha.1 released adapted to the `embedded-hal` 1.0.0-alpha.5 - release and a bugfix for active-low output pins. -- [gpio-cdev] 0.5.0 released with some updates, including updating to `tokio` 1.0. -- [sysfs-gpio] 0.6.0 released with some updates, including updating to `tokio` 1.0. -- [i2cdev] 0.5.0 released with some updates. -- [spidev] 0.5.0 released with some updates. -- [drogue-tls] 0.3.0 released with some updates. - - -[@dkhayes117]: https://github.com/dkhayes117 -[cortex-m-rt]: https://crates.io/crates/cortex-m-rt -[embedded-hal]: https://crates.io/crates/embedded-hal -[linux-embedded-hal]: https://crates.io/crates/linux-embedded-hal -[gpio-cdev]: https://crates.io/crates/gpio-cdev -[sysfs-gpio]: https://crates.io/crates/sysfs-gpio -[i2cdev]: https://crates.io/crates/i2cdev -[spidev]: https://crates.io/crates/spidev -[drogue-tls]: https://crates.io/crates/drogue-tls - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 - -## Get Involved - -This [Embedded WG] blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [#rust-embedded:matrix.org]! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/newsletter-next.md \ No newline at end of file diff --git a/content/2021-12-28-this-year-in-embedded-rust-2021.md b/content/2021-12-28-this-year-in-embedded-rust-2021.md deleted file mode 100644 index 6153f6a..0000000 --- a/content/2021-12-28-this-year-in-embedded-rust-2021.md +++ /dev/null @@ -1,83 +0,0 @@ -+++ -title = "This Year in Embedded Rust: 2021" -date = 2021-12-28 -draft = false -in_search_index = true -template = "page.html" -+++ - -As 2021 draws to a close, we thought we'd take a look back at what's happened -over the last year in Embedded Rust, both within the working group and in the -larger community. - - - -## Meetings - -We continued our weekly Rust Embedded Working Group meetings on [our Matrix channel](#rust-embedded:matrix.org). They take place at 8pm Berlin time every Tuesday, and are open to the public. You can find all the [minutes on Github]. - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org -[minutes on Github]: https://github.com/rust-embedded/wg/tree/master/minutes - -## Newsletters - -The [blog] saw five new newsletters posted, keeping everyone up to date with what's hot in Embedded Rust. Make sure you bookmark or subscribe with your favourite RSS reader so you never miss an update! Please do also keep your contributions coming, as we love hearing about what everyone gets up to in Embedded Rust outside of the official Rust Embedded Working Group projects. - -[blog]: https://blog.rust-embedded.org/ - -## Platform Support - -Outside of the working group, platform support communities provide vendor-specific support for particular microcontrollers and development boards. - -2021 saw a brand-new microcontroller vendor hit the scene - Raspberry Pi! Their debut RP2040 microcontroller has two Cortex-M0 cores, and certainly made us all think about how we can try to make our software safe to use on multi-core systems. A new [rp-rs] community sprang up and continues to make good progress supporting all areas of the RP2040 with good quality examples. - -[rp-rs]: https://github.com/rp-rs - -This year also saw Espressif officially adopt Rust and [they hired @mabez] from the [esp-rs] community to help out! - -[they hired @mabez]: https://mabez.dev/blog/posts/esp-rust-espressif/ -[esp-rs]: https://github.com/esp-rs - -Other platform support communities continued to develop this year: - -* [atsamd-rs](https://github.com/atsamd-rs) for Atmel ARM SAM-D and SAM-E microcontrollers ([Matrix chat](https://matrix.to/#/#atsamd-rs_community:gitter.im)) -* [avr-rust](https://github.com/avr-rust) for Atmel AVR microcontrollers ([Matrix chat](https://matrix.to/#/#avr-rust_Lobby:gitter.im)) -* [esp-rs](https://github.com/esp-rs) for Espressif ESP8266 and ESP32 Wi-Fi chips ([Matrix chat](https://matrix.to/#/#esp-rs:matrix.org)) -* [imxrt-rs](https://github.com/imxrt-rs) for NXP ARM iMX.RT microcontrollers -* [lpc55](https://github.com/lpc55) for NXP ARM LPC55xx microcontrollers ([Matrix chat](https://matrix.to/#/#lpc55:matrix.org)) -* [nrf-rs](https://github.com/nrf-rs) for Nordic ARM nRF51, 52 and 9160 Bluetooth/LTE devices ([Matrix chat](https://matrix.to/#/#nrf-rs:matrix.org)) -* [riscv-rust](https://github.com/riscv-rust) for all kinds of RISC-V devices -* [rp-rs](https://github.com/rp-rs) for Raspberry Pi's RP2040 microcontroller ([Matrix chat](https://matrix.to/#/#rp-rs:matrix.org)) -* [stm32-rs](https://github.com/stm32-rs) for all of ST Micro's 32-bit ARM microcontrollers ([Matrix chat](https://matrix.to/#/#stm32-rs:matrix.org)) - -If you're a platform support community not on the list please get in touch, we'd love to hear from you! - -## Other Embedded Projects - -While not officially part of the Embedded Working Group, the following projects all continued to develop over 2021: - -* The concurrency framework [RTIC](https://rtic.rs) ([GitHub](https://github.com/rtic-rs), [Matrix](https://matrix.to/#/#rtic:matrix.org)) hit version 1.0! -* The async framework [Embassy](https://embassy.dev) ([GitHub](https://github.com/embassy-rs), [Matrix](https://matrix.to/#/#embassy-rs:matrix.org)) has been under heavy development and now supports STM32, nRF and RP2040 platforms. -* The debug and programming library and tools from [probe-rs](https://probe.rs) ([GitHub](https://github.com/probe-rs), [Matrix](https://matrix.to/#/#probe-rs:matrix.org)) released v0.11 and v0.12 of their library and tools including [cargo-embed](https://github.com/probe-rs/cargo-embed). -* The [Knurling](https://knurling.ferrous-systems.com/) project ([GitHub](https://github.com/knurling-rs)) has had several releases of their tools such as [probe-run](https://github.com/knurling-rs/probe-run). -* The [smoltcp](https://github.com/smoltcp-rs/smoltcp) embedded TCP/IP stack released v0.7 and v0.8, with many improvements including to the DHCP client and adding IEEE 802.15.4 support. -* [embedded-graphics](https://github.com/embedded-graphics) ([Matrix](https://matrix.to/#/#rust-embedded-graphics:matrix.org)), a graphics library for embedded applications, had a major new v0.7 release (see the [migration notes](https://github.com/embedded-graphics/embedded-graphics/blob/master/MIGRATING-0.6-0.7.md)). -* The [Hubris](https://oxidecomputer.github.io/hubris/) RTOS and its companion debugger Humility, by [Oxide Computer](https://oxide.computer/), had their first release. - -## Our Repositories - -We continued to work on and maintain a number of key Embedded Rust repositories. The following repos all had commits during 2021: - -* [embedded-hal](https://github.com/rust-embedded/embedded-hal): The Embedded Hardware Abstraction Layer is a set of traits for describing common peripherals in a hardware-independent way. It continues its march towards 1.0 status, with a series of 1.0-alpha releases. It should hit 1.0 milestone some time in 2022! 120 commits over 27 files this year. -* [discovery](https://github.com/rust-embedded/discovery): This book on Discovering Embedded Programming using Rust had a re-write this year - it's now based around the BBC micro:Bit! 251 commits over 187 files this year. -* [book](https://github.com/rust-embedded/book): Our guide to all things Embedded Rust continues to be updated and improved, with 39 commits this year. -* [embedonomicon](https://github.com/rust-embedded/embedonomicon): Our guide to all the low-down details on how to bring-up a new `#[no_std]` platform with Rust saw 15 commits this year. -* [svd2rust](https://github.com/rust-embedded/svd2rust): This tool generates our 'Peripheral Access Crates' from a [System View Description](https://www.keil.com/pack/doc/CMSIS/SVD/html/index.html) file of the chip provided by the manufacturer. 122 commits over 17 files this year. -* [svd](https://github.com/rust-embedded/svd): The core libraries used by svd2rust and other tools to manipulate SVD files had 103 commits over 39 files this year. -* [awesome-embedded-rust](https://github.com/rust-embedded/awesome-embedded-rust): Our list of the very best in Embedded Rust keeps growing with 97 commits this year. -* [cortex-m](https://github.com/rust-embedded/cortex-m), [cortex-m-rt](https://github.com/rust-embedded/cortex-m-rt), and [cortex-m-quickstart](https://github.com/rust-embedded/cortex-m-quickstart): Our platform support crates for the Arm Cortex-M architecture saw continued development, with 93 and 54 commits respectively, and a new v0.7 of cortex-m-rt released this year. -* [cortex-a](https://github.com/rust-embedded/cortex-a): Our platform support crate for the Arm Cortex-A architecture saw 25 commits this year. -* [riscv](https://github.com/rust-embedded/riscv) and [riscv-rt](https://github.com/rust-embedded/riscv-rt): Our platform support crates for the RISC-V architecture saw 74 and 12 commits respectively this year, with a v0.7 release of riscv. -* [msp430](https://github.com/rust-embedded/msp430) and [msp430-rt](https://github.com/rust-embedded/msp430): Our platform support crates for the MSP430 architecture. -* [gpio-cdev](https://github.com/rust-embedded/gpio-cdev), [rust-spidev](https://github.com/rust-embedded/rust-spidev), [rust-sysfs-gpio](https://github.com/rust-embedded/rust-sysfs-gpio), [rust-i2cdev](https://github.com/rust-embedded/rust-i2cdev), and [linux-embedded-hal](https://github.com/rust-embedded/linux-embedded-hal): Support for embedded Linux continued with 177 commits across these projects. -* [r0](https://github.com/rust-embedded/r0) was a cross-platform initialisation library, but we deprecated it this year to move such initialisation into platform-specific libraries such as cortex-m-rt. diff --git a/content/2022-03-22-newsletter-31.md b/content/2022-03-22-newsletter-31.md deleted file mode 100644 index d3a89d2..0000000 --- a/content/2022-03-22-newsletter-31.md +++ /dev/null @@ -1,82 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 31" -date = 2022-03-22 -draft = false -in_search_index = true -template = "page.html" -+++ - -## Highlights - -- AdaCore and Ferrous Systems have joined forces to support Rust in safety- and mission-critical environments. - - [Announcement from AdaCore](https://blog.adacore.com/adacore-and-ferrous-systems-joining-forces-to-support-rust) - - [Announcement from Ferrous Systems](https://ferrous-systems.com/blog/ferrous-systems-adacore-joining-forces/) -- AUTOSAR announces [new Working Group for Programming Language Rust in Automotive Software context](https://www.autosar.org/news-events/details/autosar-announces-new-working-group-for-programming-language-rust-in-automotive-software-context-202/). - - - -## Embedded Projects - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -- [svd2rust](https://crates.io/crates/svd2rust) released v0.20.0. -- The new version of the [Discovery book](https://docs.rust-embedded.org/discovery) - targeting the micro:bit development board was released. -- [embedded-hal] 1.0.0-alpha.6 and 1.0.0-alpha.7 released, with a number of new features and - changes as we work towards the final 1.0 release. Most notably, - CAN (Controller Area Network) traits were added and some traits - with unconstrained associated types were removed. -- [embedded-hal] 0.2.7 released, including CAN (Controller Area Network) traits which were backported. -- [embedded-dma] 0.2.0 released, including const generics support and resolves some confusion around `'static`. -- A project to develop asynchronous versions of the `embedded-hal` traits has been started. - See the current [roadmap](https://github.com/rust-embedded/embedded-hal/issues/356) and please join the effort! -- [linux-embedded-hal] 0.4.0-alpha.2 released updating `embedded-hal` to version 1.0.0-alpha.7. -- New Rust Embedded ecosystem for the radiation-hardened Vorago VA108xx family of devices: - [va108xx](https://egit.irs.uni-stuttgart.de/rust/va108xx) PAC, - [va108xx-hal](https://egit.irs.uni-stuttgart.de/rust/va108xx-hal) HAL - and [vorago-reb1](https://egit.irs.uni-stuttgart.de/rust/vorago-reb1) BSP - with [blogpost](https://robamu.github.io/post/rust-ecosystem/) -- New [device driver crate](https://egit.irs.uni-stuttgart.de/rust/max116xx-10bit) for the MAX116xx - 10-bit ADC devices with [blogpost](https://robamu.github.io/post/max11619-driver-rust/) -- The RIOT operating system now [has upstream support for Rust applications](https://doc.riot-os.org/using-rust.html). - - This encompasses support in the build system, - high-level [wrappers](https://crates.io/crates/riot-wrappers) that make the OS's C mechanisms safe and idiomatic to use, - and [additional examples](https://gitlab.com/etonomy/riot-examples) maintained externally. - The wrappers implement high-level traits (e.g. from [embedded-hal](https://crates.io/crates/embedded-hal), [embedded-nal](https://crates.io/crates/embedded-nal) and [mutex-traits](https://crates.io/crates/mutex-traits)) where practical. -- A [blog post by Tweede Golf](https://tweedegolf.nl/en/blog/65/async-rust-vs-rtos-showdown) about comparing Embassy with FreeRTOS. -- [eeprom24x] I2C EEPROM driver 0.5.0 released, adding support for STM M24C01 and M24C02 devices as well as implementing the [`embedded-storage`](https://github.com/rust-embedded-community/embedded-storage) traits. -- [measurements] 0.10.4 and 0.11.0 released, most notably adding support for humidity and density. -- [9names] released a platform-agnostic [driver for Wii Extension Controllers][wii-ext] and published a [blog post][wii-ext-post]. This driver supports Nunchuk controllers as well as the many variants of the Classic Controller (Original/Pro/NES/SNES). -- Drogue Device now features an [async Bluetooth Mesh stack](https://blog.drogue.io/bluetooth-mesh/). - -[9names]: https://github.com/9names - -[embedded-hal]: https://crates.io/crates/embedded-hal -[linux-embedded-hal]: https://crates.io/crates/linux-embedded-hal -[embedded-dma]: https://crates.io/crates/embedded-dma -[eeprom24x]: https://crates.io/crates/eeprom24x -[measurements]: https://crates.io/crates/measurements -[wii-ext]: https://crates.io/crates/wii-ext -[wii-ext-post]: https://9names.github.io/driver/embedded/rust/2022/02/14/wii-ext-rs.html - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 - -## Get Involved - -This [Embedded WG] blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - -Discuss on [#rust-embedded:matrix.org]! - -[#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/newsletter-next.md diff --git a/content/2024-01-09-embedded-hal-v1.md b/content/2024-01-09-embedded-hal-v1.md deleted file mode 100644 index b4a1738..0000000 --- a/content/2024-01-09-embedded-hal-v1.md +++ /dev/null @@ -1,80 +0,0 @@ -+++ -title = "embedded-hal v1.0 now released!" -date = 2024-01-09 -draft = false -in_search_index = true -template = "page.html" -+++ - -The Rust Embedded Working Group is proud to announce the release of `embedded-hal` version 1.0 together with the -companion crates `embedded-hal-bus`, `embedded-hal-async` and `embedded-hal-nb`. - -Check out the [repository](https://github.com/rust-embedded/embedded-hal), the [API documentation](https://github.com/rust-embedded/embedded-hal#crates) and the [migration guide](https://github.com/rust-embedded/embedded-hal/blob/master/docs/migrating-from-0.2-to-1.0.md). - -The `embedded-hal` crates provide traits (interfaces) for using peripherals commonly available in microcontrollers -such as GPIO, UART, SPI or I2C. They allow writing drivers (for sensors, displays, actuators, network adapters, etc.) in -a generic way, so they work on any microcontroller with an `embedded-hal` implementation without -modifying them. It's a central piece of the Embedded Rust ecosystem, ensuring interoperability throughout. - -The 1.0 release has been in the works since 2020. Now that it's out, we consider all -traits in it to be *stable*. The plan is to extend `embedded-hal` with more traits in future 1.x releases, -not doing more breaking changes (i.e. there are no plans for a 2.0 release). This will provide a stable -base for building HALs and drivers. - -So, what's new in `embedded-hal` 1.0? - - - -![Ferris soldering embedded stuff](../embedded-ferris-soldering.png) -*Ferris with a soldering iron by [Barnaby Walters](https://waterpigs.co.uk/notes/5UrMgn/).* - -## Focus on drivers - -Previous versions of `embedded-hal` had a dual goal of standardizing HAL APIs for end users, and allowing writing generic drivers. -Experience has shown that these goals sometimes conflict with each other. As the latter brings much more value, 1.0 focuses on that. - -We've simplified some traits and merged others to remove interoperability gotchas. - -We've removed traits that were found to not be usable for generic drivers (most notably timers). The plan is to add -them back in the future, with a better design. See the [migration guide](https://github.com/rust-embedded/embedded-hal/blob/master/docs/migrating-from-0.2-to-1.0.md) for details and links to the tracking issues. - -## Async - -A new addition is the `embedded-hal-async` crate, containing async versions of the traits. With the Rust 1.75 release, -async traits are available on Rust stable. They can be used without heap allocations or dynamic -dispatch (unlike previous macro-based polyfills like the `async-trait` crate), so they are a great fit for bare-metal embedded usage. - -Most `embedded-hal-async` traits are async versions of their blocking counterparts. - -However, one highlight is the [`digital::Wait`](https://docs.rs/embedded-hal-async/1.0.0/embedded_hal_async/digital/trait.Wait.html) trait, with methods like `wait_for_high()` and `wait_for_low()`. This trait adds support for using "IRQ" GPIO pins typically used by SPI and I2C devices to send an interrupt to the microcontroller. This frequently-requested feature turned out to be hard to abstract with traits, but is now feasible in an ergonomic way with async. - -## SPI bus sharing - -![SPI bus/device diagram](../spi-shared-bus.svg) - -The [`SpiDevice`](https://docs.rs/embedded-hal/1.0.0/embedded_hal/spi/index.html) trait now allows sharing a SPI bus between multiple devices, each selected with its own CS pin. The design allows for unrelated drivers to talk to different devices in the same bus without conflicts and without being aware of each other. - -The trait is agnostic about the kind of mutex/locking mechanism. The [`embedded-hal-bus`](https://docs.rs/embedded-hal-bus/0.1.0/embedded_hal_bus/spi/index.html) crate provides implementations for commonly used mutexes, but it is possible to write your own for e.g. the mutex of your favourite RTOS. - -## Error handling - -Generic drivers can now inspect errors, thanks to them being required to implement an `Error` trait -that allows querying the error "kind" out of a pre-selected set. HAL implementations can still use custom error types, -and map errors that don't fit in these categories to the `Other` kind. - -All error types are also required to implement `Debug`, so `.unwrap()` and similar are now always available in generic drivers. - -## embedded-io - -The `embedded-hal` project also hosts the `embedded-io` crates. They provide traits for byte-oriented I/O streams. Since serial -ports (UART) are essentially byte streams, the serial-specific traits in `embedded-hal` have been removed in favor of `embedded-io`. - -`embedded-io` has not reached 1.0 yet, but we expect that to happen in 2024. - -## Thanks - -Thanks to the HAL team ([@therealprof](https://github.com/therealprof), [@ryankurte](https://github.com/ryankurte), [@eldruin](https://github.com/eldruin), [@dirbaio](https://github.com/Dirbaio), [@MabezDev](https://github.com/MabezDev)), and to everyone who helped with testing, feedback and contributions for making `embedded-hal` 1.0 possible. - -Thanks to the Rust Foundation for sponsoring Dario Nieuwenhuis ([@dirbaio](https://github.com/Dirbaio))'s work on `embedded-hal` through the [Fellowship grants program](https://foundation.rust-lang.org/news/announcing-the-rust-foundation-s-2023-fellows/). - -And lastly, thanks to all the people releasing and maintaining HAL implementations and drivers using `embedded-hal`. *You* are the ones who make `embedded-hal` actually useful in the real world! diff --git a/content/_index.md b/content/_index.md deleted file mode 100644 index 3eb9347..0000000 --- a/content/_index.md +++ /dev/null @@ -1,24 +0,0 @@ -+++ -# Whether to sort by "date", "order", "weight" or "none". More on that below -sort_by = "date" - -# Template to use to render this section page -template = "index.html" - -# How many pages to be displayed per paginated page. -# No pagination will happen if this isn't set or if the value is 0 -paginate_by = 5 - -# If set, will be the path used by paginated page and the page number will be appended after it. -# For example the default would be page/1 -paginate_path = "page" - -# Whether the section pages should be in the search index. This is only used if -# `build_search_index` is set to true in the config -in_search_index = true - -# Whether to render that section homepage or not. -# Useful when the section is only there to organize things but is not meant -# to be used directly -render = true -+++ diff --git a/content/newsletter-next.md b/content/newsletter-next.md deleted file mode 100644 index fb308b3..0000000 --- a/content/newsletter-next.md +++ /dev/null @@ -1,90 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - 32" -date = 2022-04-30 -draft = true -in_search_index = false -template = "page.html" -+++ - - - -## Highlights - - - -- TODO(remove, this is an example) "const generics" has landed in nightly! -- TODO(remove, this is an example) the Rust compiler has gained cross compilation support for the Xtensa architecture! - -* Drogue IoT article series on firmware updates: - * [Part 1 - Bootloader](https://blog.drogue.io/firmware-updates-part-1/) - * [Part 2 - Protocols](https://blog.drogue.io/firmware-updates-part-2/) - - - - -## Embedded Projects - - - -* [reqwless](https://crates.io/crates/reqwless) - an async HTTP client using embedded-io traits. -* [ector](https://crates.io/crates/ector) - no-alloc actor framework for embedded devices based on embassy. -* [embedded-update](https://crates.io/crates/embedded-update) - a pluggable firmware update protocol for embedded devices. - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -- TODO(remove, this is an example) Crate embedded-foo has released version 1.0.0! - - - - -[someusername]: https://github.com/... -[@sometwittername]: https://twitter.com/... - - - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 - -## Get Involved - -This [Embedded WG] blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - - - - - - - - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/newsletter-next.md diff --git a/elasticlunr.min.js b/elasticlunr.min.js new file mode 100644 index 0000000..79dad65 --- /dev/null +++ b/elasticlunr.min.js @@ -0,0 +1,10 @@ +/** + * elasticlunr - http://weixsong.github.io + * Lightweight full-text search engine in Javascript for browser search and offline search. - 0.9.6 + * + * Copyright (C) 2017 Oliver Nightingale + * Copyright (C) 2017 Wei Song + * MIT Licensed + * @license + */ +!function(){function e(e){if(null===e||"object"!=typeof e)return e;var t=e.constructor();for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t}var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.9.5",lunr=t,t.utils={},t.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),t.utils.toString=function(e){return void 0===e||null===e?"":e.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},t.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);-1!==n&&(this.events[e].splice(n,1),0==this.events[e].length&&delete this.events[e])}},t.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)},this)}},t.EventEmitter.prototype.hasHandler=function(e){return e in this.events},t.tokenizer=function(e){if(!arguments.length||null===e||void 0===e)return[];if(Array.isArray(e)){var n=e.filter(function(e){return null===e||void 0===e?!1:!0});n=n.map(function(e){return t.utils.toString(e).toLowerCase()});var i=[];return n.forEach(function(e){var n=e.split(t.tokenizer.seperator);i=i.concat(n)},this),i}return e.toString().trim().toLowerCase().split(t.tokenizer.seperator)},t.tokenizer.defaultSeperator=/[\s\-]+/,t.tokenizer.seperator=t.tokenizer.defaultSeperator,t.tokenizer.setSeperator=function(e){null!==e&&void 0!==e&&"object"==typeof e&&(t.tokenizer.seperator=e)},t.tokenizer.resetSeperator=function(){t.tokenizer.seperator=t.tokenizer.defaultSeperator},t.tokenizer.getSeperator=function(){return t.tokenizer.seperator},t.Pipeline=function(){this._queue=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in t.Pipeline.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[n]=e},t.Pipeline.getRegisteredFunction=function(e){return e in t.Pipeline.registeredFunctions!=!0?null:t.Pipeline.registeredFunctions[e]},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.getRegisteredFunction(e);if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._queue.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i+1,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._queue.indexOf(e);if(-1===i)throw new Error("Cannot find existingFn");this._queue.splice(i,0,n)},t.Pipeline.prototype.remove=function(e){var t=this._queue.indexOf(e);-1!==t&&this._queue.splice(t,1)},t.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._queue.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._queue[s](r,o,e),void 0!==r&&null!==r);s++);void 0!==r&&null!==r&&t.push(r)}return t},t.Pipeline.prototype.reset=function(){this._queue=[]},t.Pipeline.prototype.get=function(){return this._queue},t.Pipeline.prototype.toJSON=function(){return this._queue.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Index=function(){this._fields=[],this._ref="id",this.pipeline=new t.Pipeline,this.documentStore=new t.DocumentStore,this.index={},this.eventEmitter=new t.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},t.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},t.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},t.Index.load=function(e){e.version!==t.version&&t.utils.warn("version mismatch: current "+t.version+" importing "+e.version);var n=new this;n._fields=e.fields,n._ref=e.ref,n.documentStore=t.DocumentStore.load(e.documentStore),n.pipeline=t.Pipeline.load(e.pipeline),n.index={};for(var i in e.index)n.index[i]=t.InvertedIndex.load(e.index[i]);return n},t.Index.prototype.addField=function(e){return this._fields.push(e),this.index[e]=new t.InvertedIndex,this},t.Index.prototype.setRef=function(e){return this._ref=e,this},t.Index.prototype.saveDocument=function(e){return this.documentStore=new t.DocumentStore(e),this},t.Index.prototype.addDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.addDoc(i,e),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));this.documentStore.addFieldLength(i,n,o.length);var r={};o.forEach(function(e){e in r?r[e]+=1:r[e]=1},this);for(var s in r){var u=r[s];u=Math.sqrt(u),this.index[n].addToken(s,{ref:i,tf:u})}},this),n&&this.eventEmitter.emit("add",e,this)}},t.Index.prototype.removeDocByRef=function(e){if(e&&this.documentStore.isDocStored()!==!1&&this.documentStore.hasDoc(e)){var t=this.documentStore.getDoc(e);this.removeDoc(t,!1)}},t.Index.prototype.removeDoc=function(e,n){if(e){var n=void 0===n?!0:n,i=e[this._ref];this.documentStore.hasDoc(i)&&(this.documentStore.removeDoc(i),this._fields.forEach(function(n){var o=this.pipeline.run(t.tokenizer(e[n]));o.forEach(function(e){this.index[n].removeToken(e,i)},this)},this),n&&this.eventEmitter.emit("remove",e,this))}},t.Index.prototype.updateDoc=function(e,t){var t=void 0===t?!0:t;this.removeDocByRef(e[this._ref],!1),this.addDoc(e,!1),t&&this.eventEmitter.emit("update",e,this)},t.Index.prototype.idf=function(e,t){var n="@"+t+"/"+e;if(Object.prototype.hasOwnProperty.call(this._idfCache,n))return this._idfCache[n];var i=this.index[t].getDocFreq(e),o=1+Math.log(this.documentStore.length/(i+1));return this._idfCache[n]=o,o},t.Index.prototype.getFields=function(){return this._fields.slice()},t.Index.prototype.search=function(e,n){if(!e)return[];e="string"==typeof e?{any:e}:JSON.parse(JSON.stringify(e));var i=null;null!=n&&(i=JSON.stringify(n));for(var o=new t.Configuration(i,this.getFields()).get(),r={},s=Object.keys(e),u=0;u0&&t.push(e);for(var i in n)"docs"!==i&&"df"!==i&&this.expandToken(e+i,t,n[i]);return t},t.InvertedIndex.prototype.toJSON=function(){return{root:this.root}},t.Configuration=function(e,n){var e=e||"";if(void 0==n||null==n)throw new Error("fields should not be null");this.config={};var i;try{i=JSON.parse(e),this.buildUserConfig(i,n)}catch(o){t.utils.warn("user configuration parse failed, will use default configuration"),this.buildDefaultConfig(n)}},t.Configuration.prototype.buildDefaultConfig=function(e){this.reset(),e.forEach(function(e){this.config[e]={boost:1,bool:"OR",expand:!1}},this)},t.Configuration.prototype.buildUserConfig=function(e,n){var i="OR",o=!1;if(this.reset(),"bool"in e&&(i=e.bool||i),"expand"in e&&(o=e.expand||o),"fields"in e)for(var r in e.fields)if(n.indexOf(r)>-1){var s=e.fields[r],u=o;void 0!=s.expand&&(u=s.expand),this.config[r]={boost:s.boost||0===s.boost?s.boost:1,bool:s.bool||i,expand:u}}else t.utils.warn("field name in user configuration not found in index instance fields");else this.addAllFields2UserConfig(i,o,n)},t.Configuration.prototype.addAllFields2UserConfig=function(e,t,n){n.forEach(function(n){this.config[n]={boost:1,bool:e,expand:t}},this)},t.Configuration.prototype.get=function(){return this.config},t.Configuration.prototype.reset=function(){this.config={}},lunr.SortedSet=function(){this.length=0,this.elements=[]},lunr.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},lunr.SortedSet.prototype.add=function(){var e,t;for(e=0;e1;){if(r===e)return o;e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o]}return r===e?o:-1},lunr.SortedSet.prototype.locationFor=function(e){for(var t=0,n=this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];i>1;)e>r&&(t=o),r>e&&(n=o),i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return r>e?o:e>r?o+1:void 0},lunr.SortedSet.prototype.intersect=function(e){for(var t=new lunr.SortedSet,n=0,i=0,o=this.length,r=e.length,s=this.elements,u=e.elements;;){if(n>o-1||i>r-1)break;s[n]!==u[i]?s[n]u[i]&&i++:(t.add(s[n]),n++,i++)}return t},lunr.SortedSet.prototype.clone=function(){var e=new lunr.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},lunr.SortedSet.prototype.union=function(e){var t,n,i;this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone();for(var o=0,r=n.toArray();o + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

embedded-hal v1.0 now released!

+ +

The Rust Embedded Working Group is proud to announce the release of embedded-hal version 1.0 together with the +companion crates embedded-hal-bus, embedded-hal-async and embedded-hal-nb.

+

Check out the repository, the API documentation and the migration guide.

+

The embedded-hal crates provide traits (interfaces) for using peripherals commonly available in microcontrollers +such as GPIO, UART, SPI or I2C. They allow writing drivers (for sensors, displays, actuators, network adapters, etc.) in +a generic way, so they work on any microcontroller with an embedded-hal implementation without +modifying them. It's a central piece of the Embedded Rust ecosystem, ensuring interoperability throughout.

+

The 1.0 release has been in the works since 2020. Now that it's out, we consider all +traits in it to be stable. The plan is to extend embedded-hal with more traits in future 1.x releases, +not doing more breaking changes (i.e. there are no plans for a 2.0 release). This will provide a stable +base for building HALs and drivers.

+

So, what's new in embedded-hal 1.0?

+ +

Ferris soldering embedded stuff +Ferris with a soldering iron by Barnaby Walters.

+

Focus on drivers

+

Previous versions of embedded-hal had a dual goal of standardizing HAL APIs for end users, and allowing writing generic drivers. +Experience has shown that these goals sometimes conflict with each other. As the latter brings much more value, 1.0 focuses on that.

+

We've simplified some traits and merged others to remove interoperability gotchas.

+

We've removed traits that were found to not be usable for generic drivers (most notably timers). The plan is to add +them back in the future, with a better design. See the migration guide for details and links to the tracking issues.

+

Async

+

A new addition is the embedded-hal-async crate, containing async versions of the traits. With the Rust 1.75 release, +async traits are available on Rust stable. They can be used without heap allocations or dynamic +dispatch (unlike previous macro-based polyfills like the async-trait crate), so they are a great fit for bare-metal embedded usage.

+

Most embedded-hal-async traits are async versions of their blocking counterparts.

+

However, one highlight is the digital::Wait trait, with methods like wait_for_high() and wait_for_low(). This trait adds support for using "IRQ" GPIO pins typically used by SPI and I2C devices to send an interrupt to the microcontroller. This frequently-requested feature turned out to be hard to abstract with traits, but is now feasible in an ergonomic way with async.

+

SPI bus sharing

+

SPI bus/device diagram

+

The SpiDevice trait now allows sharing a SPI bus between multiple devices, each selected with its own CS pin. The design allows for unrelated drivers to talk to different devices in the same bus without conflicts and without being aware of each other.

+

The trait is agnostic about the kind of mutex/locking mechanism. The embedded-hal-bus crate provides implementations for commonly used mutexes, but it is possible to write your own for e.g. the mutex of your favourite RTOS.

+

Error handling

+

Generic drivers can now inspect errors, thanks to them being required to implement an Error trait +that allows querying the error "kind" out of a pre-selected set. HAL implementations can still use custom error types, +and map errors that don't fit in these categories to the Other kind.

+

All error types are also required to implement Debug, so .unwrap() and similar are now always available in generic drivers.

+

embedded-io

+

The embedded-hal project also hosts the embedded-io crates. They provide traits for byte-oriented I/O streams. Since serial +ports (UART) are essentially byte streams, the serial-specific traits in embedded-hal have been removed in favor of embedded-io.

+

embedded-io has not reached 1.0 yet, but we expect that to happen in 2024.

+

Thanks

+

Thanks to the HAL team (@therealprof, @ryankurte, @eldruin, @dirbaio, @MabezDev), and to everyone who helped with testing, feedback and contributions for making embedded-hal 1.0 possible.

+

Thanks to the Rust Foundation for sponsoring Dario Nieuwenhuis (@dirbaio)'s work on embedded-hal through the Fellowship grants program.

+

And lastly, thanks to all the people releasing and maintaining HAL implementations and drivers using embedded-hal. You are the ones who make embedded-hal actually useful in the real world!

+ +
+ +
+ + + + diff --git a/embedded-rust-in-2019/index.html b/embedded-rust-in-2019/index.html new file mode 100644 index 0000000..9746560 --- /dev/null +++ b/embedded-rust-in-2019/index.html @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

Embedded Rust in 2019

+ +

It's been a busy year for many of the members of the Embedded-WG this year, and we had a chance to catch up at OxidizeConf a few weeks ago. We discussed two main things, Moving off of Mozilla IRC, and our goals for (part of) 2019.

+

Goals for 2019

+

In 2018, the Embedded WG pushed hard to get the Cortex-M targets supported as stable targets in the upstream Rust project. Since then, due to work and life responsibilities, a number of us have been particularly busy in 2019.

+

At Oxidize, we discussed what our 2019 goals should be. There were suggestions to get some the foundational level crates like cortex-m, cortex-m-rt, and tools like svd2rust to a "1.0 state". However, while there were a number of improvements we could think of, we couldn't draw any clear lines of what it would take for us to be comfortable cutting a 1.0 release of these projects.

+

Based on the two points above, we discussed a slightly different plan: Focusing on building out the ecosystem in 2019, by building more "fun" stuff, like example projects, cool applications, and extracting and publishing reusable components from these projects to fill in the embedded Rust ecosystem.

+

By focusing on building out, instead of trying to perfect what we already have, we hope to find out the things we don't know we are missing, and inspire other members of the community to begin working and building with Embedded Rust. We'll keep this as a focus through the summer (until September or October 2019). This can be thought of as a parallel to the upstream "Libs Blitz" that the Rust project successfully completed in 2017.

+

Our weekly meetings will likely relax a bit, and will generally change focus to quickly discuss any high priority issues, then open up to a more informal "show and tell", where people can discuss the things they have been building and would like to share. We hope you'll all join us to share the wonderful things you build this summer in embedded Rust!

+

Moving off Mozilla IRC

+

At the end of April, Mozilla announced that they would be shutting down irc.mozilla.org. The Rust project as a whole will generally be moving on to other platforms such as Discord and Zulip.

+

The Embedded Working Group is actually one of the few (if not only) working groups that still primarily rely on IRC. We have a few hundred people who idle in the room, and tend to have fairly active discussions there, including our weekly status meetings. We have discussed moving to other platforms previously, but have been unable to get any sort of consensus on what to move to instead. Those discussions lead to a fruitful evaluation of alternatives and led to a pre-selection of suitable services.

+

To move things forward RFC 0351 Chat Vote has been proposed and accepted by the WG which was subsequently implemented by opening voting issue to poll the public opinion on this matter. Anyone with a GitHub account is invited to cast vote(s) until 23:59 CEST on Sunday, 2019-06-23, the detailed rules are explained in the issue and fair discussion is very welcome.

+ +
+ +
+ + + + diff --git a/static/ewg-logo-blue-white-on-transparent-256x256.png b/ewg-logo-blue-white-on-transparent-256x256.png similarity index 100% rename from static/ewg-logo-blue-white-on-transparent-256x256.png rename to ewg-logo-blue-white-on-transparent-256x256.png diff --git a/static/ewg-logo-blue-white-on-transparent.svg b/ewg-logo-blue-white-on-transparent.svg similarity index 100% rename from static/ewg-logo-blue-white-on-transparent.svg rename to ewg-logo-blue-white-on-transparent.svg diff --git a/hyde.css b/hyde.css new file mode 100644 index 0000000..d3c8b64 --- /dev/null +++ b/hyde.css @@ -0,0 +1 @@ +html{font-family:"PT Sans", Helvetica, Arial, sans-serif}@media (min-width: 48em){html{font-size:16px}}@media (min-width: 58em){html{font-size:20px}}.sidebar{text-align:center;padding:2rem 1rem;color:rgba(255,255,255,0.5);background-color:#202020}@media (min-width: 48em){.sidebar{position:fixed;top:0;left:0;bottom:0;width:18rem;text-align:left}}.sidebar a{color:#fff}.sidebar-about h1{color:#fff;margin-top:0;font-family:"Abril Fatface", serif;font-size:3.25rem}.sidebar-nav{padding-left:0;list-style:none}.sidebar-nav-item{display:block}a.sidebar-nav-item:hover,a.sidebar-nav-item:focus{text-decoration:underline}.sidebar-nav-item.active{font-weight:bold}@media (min-width: 48em){.sidebar-sticky{position:absolute;right:1rem;bottom:1rem;left:1rem}}.content{padding-top:4rem;padding-bottom:4rem}@media (min-width: 48em){.content{max-width:38rem;margin-left:20rem;margin-right:2rem}}@media (min-width: 64em){.content{margin-left:22rem;margin-right:4rem}}@media (min-width: 48em){.layout-reverse .sidebar{left:auto;right:0}.layout-reverse .content{margin-left:2rem;margin-right:20rem}}@media (min-width: 64em){.layout-reverse .content{margin-left:4rem;margin-right:22rem}}.theme-base-08 .sidebar{background-color:#ac4142}.theme-base-08 .content a,.theme-base-08 .related-posts li a:hover{color:#ac4142}.theme-base-09 .sidebar{background-color:#d28445}.theme-base-09 .content a,.theme-base-09 .related-posts li a:hover{color:#d28445}.theme-base-0a .sidebar{background-color:#f4bf75}.theme-base-0a .content a,.theme-base-0a .related-posts li a:hover{color:#f4bf75}.theme-base-0b .sidebar{background-color:#90a959}.theme-base-0b .content a,.theme-base-0b .related-posts li a:hover{color:#90a959}.theme-base-0c .sidebar{background-color:#75b5aa}.theme-base-0c .content a,.theme-base-0c .related-posts li a:hover{color:#75b5aa}.theme-base-0d .sidebar{background-color:#6a9fb5}.theme-base-0d .content a,.theme-base-0d .related-posts li a:hover{color:#6a9fb5}.theme-base-0e .sidebar{background-color:#aa759f}.theme-base-0e .content a,.theme-base-0e .related-posts li a:hover{color:#aa759f}.theme-base-0f .sidebar{background-color:#8f5536}.theme-base-0f .content a,.theme-base-0f .related-posts li a:hover{color:#8f5536} diff --git a/index.html b/index.html new file mode 100644 index 0000000..54c5ce2 --- /dev/null +++ b/index.html @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

+ + embedded-hal v1.0 now released! + +

+ + +

The Rust Embedded Working Group is proud to announce the release of embedded-hal version 1.0 together with the +companion crates embedded-hal-bus, embedded-hal-async and embedded-hal-nb.

+

Check out the repository, the API documentation and the migration guide.

+

The embedded-hal crates provide traits (interfaces) for using peripherals commonly available in microcontrollers +such as GPIO, UART, SPI or I2C. They allow writing drivers (for sensors, displays, actuators, network adapters, etc.) in +a generic way, so they work on any microcontroller with an embedded-hal implementation without +modifying them. It's a central piece of the Embedded Rust ecosystem, ensuring interoperability throughout.

+

The 1.0 release has been in the works since 2020. Now that it's out, we consider all +traits in it to be stable. The plan is to extend embedded-hal with more traits in future 1.x releases, +not doing more breaking changes (i.e. there are no plans for a 2.0 release). This will provide a stable +base for building HALs and drivers.

+

So, what's new in embedded-hal 1.0?

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 31 + +

+ + +

Highlights

+ + + + + Read More + +
+ +
+

+ + This Year in Embedded Rust: 2021 + +

+ + +

As 2021 draws to a close, we thought we'd take a look back at what's happened +over the last year in Embedded Rust, both within the working group and in the +larger community.

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 30 + +

+ + + +

Highlights

+ + + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 29 + +

+ + +

Highlights

+
    +
  • +

    Last Month in Flott, the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).

    +
  • +
  • +

    The microbit crate has released v0.9.0, moved under the nrf-rs organisational umbrella, and gained micro:bit v2 support. 🎉

    +
  • +
  • +

    The switch-hal crate released v0.4.0, adding StatefulOutputSwitch for platforms that support StatefulOutputPin.

    +
  • +
  • +

    The probe-rs project, which provides debugging and flash programming for a variety of embedded targets, released version v0.11.0, with a number of performance and functionality improvements.

    +
  • +
  • +

    cortex-m released version 0.7.3, improving ease-of-use for the Delay implementation and fixing native builds on non-x86 hosts.

    +
  • +
  • +

    cortex-m-rt released version 0.6.15, backporting various fixes to the linker script and helping prepare for a new 0.7 release soon.

    +
  • +
  • +

    cross has posted a call for help looking for new maintainers: if you use cross and would like to help out, please check it out!

    +
  • +
+ + + + Read More + +
+ + + + Next > > +
+ +
+ + + + diff --git a/newsletter-1/index.html b/newsletter-1/index.html new file mode 100644 index 0000000..c3712a3 --- /dev/null +++ b/newsletter-1/index.html @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 1

+ +

This is the first newsletter of the Embedded WG! We will be releasing this newsletter on a bi-weekly basis, and we are looking to highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue!

+

Highlights

+ +

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+

embedded-hal drivers

+

This is a list of recently released drivers that are part of the Weekly Driver Initiative. There are currently 5 Released Drivers, 14 WIP Drivers, and lots of TODOs!

+ +

Thanks

+ +

Help Wanted

+

If you have an embedded project that could use contributors or maintainers, leave a comment for the next newsletter!

+
    +
  • We are pretty close to being able to use LLD to link Rust programs compiled for ARM Cortex-M but there are some LLD bugs that still need to be fixed. Help reporting these bugs upstream would be greatly appreciated!
  • +
  • Incremental compilation is in the roadmap for this year but it doesn't work with no_std binaries due to an old rustc bug related to linking. Help us fix it! There's a proposed solution here.
  • +
  • We want to explore stabilizing some assembly operations in core as an alternative to the unstable asm! macro. We would love some help identifying the assembly operations that need to be provided this way as some can be implemented in external assembly files without losing +semantics. Details in issue #63.
  • +
+ +
+ +
+ + + + diff --git a/newsletter-10/index.html b/newsletter-10/index.html new file mode 100644 index 0000000..e216801 --- /dev/null +++ b/newsletter-10/index.html @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 10

+ +

This is the tenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on internals.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+
    +
  • We have a blog! We'll be posting newsletters, notices for upcoming changes, and embedded related articles there in the upcoming future. Use RSS? It has an RSS feed! Check out the blog on github to make any corrections or to contribute an article
  • +
  • Nightly Rust has switched to lld for Cortex-M targets as a default. See the blog post for how to handle this change
  • +
  • There have been updates to cortex-m, cortex-m-rt, and cortex-m-quickstart! Check out the linked changelogs to see what is new. Also, the latest release of each of these no longer require arm-none-eabi-gcc!
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+
    +
  • Support for aarch64-unknown-none has landed upstream! It is now possible to write bare-metal Rust code for 64-bit ARM architectures
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Device Cratesreleased140
HAL Impl Cratesreleased12+1
Board Support Cratesreleased90
Driver Crates Releasedreleased110
Driver Crates WIPWIP39+1
no-std cratesreleased13+1
+

Help Wanted

+ + +
+ +
+ + + + diff --git a/newsletter-11/index.html b/newsletter-11/index.html new file mode 100644 index 0000000..ab3a888 --- /dev/null +++ b/newsletter-11/index.html @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 11

+ +

This is the eleventh newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on internals.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+
    +
  • rustc now supports 4 Cortex-R targets thanks to the work of paoloteti in the Cortex-R space! You can build programs for these targets using nothing but the Rust toolchain
  • +
  • James Munns gave a talk at RustConf 2018, covering the basics of embedded systems, and how Rust's Zero Cost Abstractions are a perfect match for bare metal systems
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+ +

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Device Cratesreleased16+2
HAL Impl Cratesreleased120
Board Support Cratesreleased90
Driver Crates Releasedreleased110
Driver Crates WIPWIP41+2
no-std cratesreleased130
+

Help Wanted

+ + +
+ +
+ + + + diff --git a/newsletter-12/index.html b/newsletter-12/index.html new file mode 100644 index 0000000..a5c544a --- /dev/null +++ b/newsletter-12/index.html @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 12

+ +

This is the twelfth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+
    +
  • We now have a category for Embedded on the users.rust-lang.org forum! This is a great place to ask larger questions, or to share more details about your projects!
  • +
  • You can now build embedded binaries on stable with the 1.30-beta release of Rust! Check it out and open an issue if you run in to any issues with your projects!
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+ +

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Device Cratesreleased160
HAL Impl Cratesreleased120
Board Support Cratesreleased90
Driver Crates Releasedreleased12+1
Driver Crates WIPWIP40-1
no-std cratesreleased130
+

Help Wanted

+ + +
+ +
+ + + + diff --git a/newsletter-13/index.html b/newsletter-13/index.html new file mode 100644 index 0000000..7c779ae --- /dev/null +++ b/newsletter-13/index.html @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 13

+ +

This is the thirteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+
    +
  • The min_const_fn feature has landed, allowing for stable use of const fn functions in an embedded context in the upcoming 1.31 release of Rust!
  • +
  • Frank Pagliughi has kicked off rust-industrial-io, a crate providing an interface to libiio on linux, which is used for communication with industrial sensors and actuators
  • +
  • gregokent has started development on cortex-r-rt, a runtime crate for Cortex-R processors
  • +
  • The HAL Impl crate for the Texas Instruments TM4C123 now works on 1.30-beta! Now is a great time to ensure that your embedded crates will work flawlessly with the 2018 Edition of Rust!
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+ +

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Device Cratesreleased160
HAL Impl Cratesreleased13+1
Board Support Cratesreleased11+2
Driver Crates Releasedreleased15+3
Driver Crates WIPWIP400
no-std cratesreleased14+1
+

Help Wanted

+ + +
+ +
+ + + + diff --git a/newsletter-14/index.html b/newsletter-14/index.html new file mode 100644 index 0000000..425f6b5 --- /dev/null +++ b/newsletter-14/index.html @@ -0,0 +1,144 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 14

+ +

This is the fourteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

This is a special "spotlight" edition of the newsletter, where we look at a few topics in a bit more detail. Let us know what you think of the new format, and if there is anything you'd like to see included in the next newsletter!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+

Embedded Rust Applications on Stable!

+
+ + +

Now that #[panic_handler] is stabilized in 1.30, you can write Cortex-M bare-metal applications with the stable compiler. All our Rust Embedded crates, such as cortex-m, cortex-m-rt and embedded-hal should be ready to use on stable, but please note our two tutorial books Discovery and The Embedded Rust Book still require 1.30 beta or 1.31 beta as they use 2018 edition syntax (which isn't stabilized until the 1.31 release).

+

If you are able to trial 1.31 beta, you can help us test:

+
    +
  • Minimal const functions (useful for initializing static variables)
  • +
  • 2018 edition syntax (including changes to use and extern crate)
  • +
+

The Newest Embedded WG Team: Cortex-A!

+
+

Screenshot of Cortex-A RFC

+

The Embedded Working Group has launched a Cortex-A team, to focus on supporting developers working on bare-metal, micro kernel, and other low-level tasks using ARM's Cortex-A series of microprocessors.

+

The team kicked off with four members: @andre-richter, @parched, @raw-bin, and @wizofe, and have already started assembling initial goals for their team.

+

The Monotron Visits Rust Belt Rust

+
+ + +

@thejpster's project, the monotron, travelled to Ann Arbor Michigan for Rust Belt Rust 2018. Since its last conference appearance, it has gained a whole new list of features, including a serial application loader, a 3 channel wave table synthesizer, Atari Joystick support, and more!

+

Check out the video above for a demo of Snake on the monotron hardware.

+

Peripheral Ownership Woes? Not With shared-bus!

+
+
+extern crate shared_bus;
+
+// Create your bus peripheral as usual:
+// let i2c = I2c::i2c1(dp.I2C1, (scl, sda), 90.khz(), clocks, &mut rcc.apb1);
+
+let manager = shared_bus::CortexMBusManager::new(i2c);
+
+// You can now acquire bus handles:
+let mut handle = manager.acquire();
+// handle implements `i2c::{Read, Write, WriteRead}`, depending on the
+// implementations of the underlying peripheral
+
+// Now, this works! :+1:
+let port_a = Pcf8574(manager.acquire(), 0x39).unwrap();
+let port_b = Pcf8574(manager.acquire(), 0x38).unwrap();
+
+

In most embedded-hal compatible drivers, the driver takes either ownership or a mutable reference to the peripheral used to interact with a component, such as I2C or SPI. For some protocols, such as I2C, which might have multiple devices connected to the same peripheral, managing ownership can be difficult (see embedded-hal/35 for discussion).

+

To address this, @Rahix developed shared-bus, a crate which provides safe shared access to these peripherals through the use of a mutex. This allows for access of the underlying peripheral in as many drivers as you need! Check out the release blog post for more details, and for examples on how to use this for your projects.

+

The Embedded Rust Community is Growing!

+
+ + +

As we get closer to our goal of stable embedded development with Rust for the 2018 edition launch, the embedded community is ramping up. We did a quick twitter poll which received hundreds of responses, and heard from developers using or evaluating embedded rust for personal and work projects.

+

The Embedded WG has also grown, starting off this year with 8 developers on a single team, to a group of 27 developers across 11 teams, each with their own area of focus within the embedded rust space.

+

Now is a great time to start working with Embedded Rust, and we can't wait to see what the next year brings!

+

embedded-hal Ecosystem Crates

+
+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Device Cratesreleased160
HAL Impl Cratesreleased130
Board Support Cratesreleased110
Driver Crates Releasedreleased16+1
Driver Crates WIPWIP46+6
no-std cratesreleased17+3
+ +
+ +
+ + + + diff --git a/newsletter-15/index.html b/newsletter-15/index.html new file mode 100644 index 0000000..4811d4f --- /dev/null +++ b/newsletter-15/index.html @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 15

+ +

This is the fifteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

Embedded at Rust All Hands 2019

+

Some members of the Embedded Working Group attended the Rust All Hands two weeks ago. There they had the chance to discuss the needs of the embedded community (as identified in this survey) with the different Rust teams and other WGs. Here's a summary of what was discussed:

+
    +
  • "const generics"
  • +
+

The ability to parameterize over values, for example you could use this feature to write a fixed capacity Vec: struct Vec<T, const N: usize> { buffer: [T; N], len: usize }. There are a few compiler refactors going on that are required to land this in nightly so the status is "WIP". We'll have future meetings with the compiler team to try to identify and prioritize the parts of the feature that embedded developers need.

+
    +
  • const fn with trait bounds on stable.
  • +
+

For example, impl<T> Struct<T> where T: Trait { pub const fn new() -> Self { .. } }. A lengthy pre-RFC discussion has concluded and a proper RFC has been proposed.

+
    +
  • core::mem::MaybeUninit on stable.
  • +
+

The plan is to stabilize a minimal, uncontroversial subset of the API to make this available on stable ASAP.

+
    +
  • std::io in core / alloc.
  • +
+

It's not possible to move std::io::{Read,Write} into alloc or core because the API depends on OS specific bits (e.g. last_os_error). An option may be to add a new set of Read / Write traits to core, maybe with associated error types, and then try to bridge these to std::io::{Read,Write} using blanket implementations / super traits, but this needs more research.

+ +

This bug breaks no_std builds that use build scripts unless the authors of the build dependencies are aware of the issue and actively work around it. The Cargo team is well aware of the problem. Unfortunately, it's hard to fix and the fix will likely be opt-in because it changes the current semantics.

+ +

This feature lets you optimize dependencies when using the dev profile; useful to keep dev binaries small enough to fit in Flash without sacrificing all debuggability. A new build profile will be added to cover the configuration of proc macros, build scripts, compiler plugins and their dependencies. The new profile solves the remaining unresolved question around RFC 2282.

+
    +
  • Stabilize core::arch::arm
  • +
+

This module contains functions for instructions like wfi and nop, and SIMD instructions; stabilizing this removes the pressure for stable inline assembly (asm!). A member of the libs team is interested in this and will help us push it towards the finish line. A PR in this space has recently landed.

+
    +
  • Asserts in const fn context become compiler errors.
  • +
+

We understood that there are still several design / implementation issues that need to be discussed before this is stabilized, but in the meantime you can use the perma-unstable -Z unleash-the-miri-inside-of-you flag to do all sort of stuff in const context.

+
    +
  • std-aware Cargo.
  • +
+

@jamesmunns has written a pre-rfc for an incremental implementation of this feature based on our discussions with people from the libs and Cargo teams and the WASM WG.

+
    +
  • Improve searching for no_std crates on crates.io.
  • +
+

The backend supports searching within a category (like the no_std category) but there's no UI for it right now. This and fixing a bug where searches only return items found until a exact match was found (instead of returning all relevant matches) are in the crates.io team TODO list.

+
    +
  • Fix: infinite loops (e.g. loop {}) are lowered to an abort instruction.
  • +
+

Ideally, this should be fixed in LLVM proper but it's hard to fix. It's possible to fix this in rustc but the fix is likely to regress the performance of loops. The compiler team will follow up with two unstable flags to evaluate the (performance) impact of fixing this. The first flag applies the fix to only loops in return position of divergent function and the second flag applies the fix to all loops.

+
    +
  • Math support in core
  • +
+

That is 0f32.sin() should "Just Work" in no_std crates. There are a few questions about how to best implement this without degrading performance of applications that link to std (we want those to use the arch optimized routines in e.g. glibc's libm instead of the generic Rust implementation) and we need a champion to do the research.

+
    +
  • Cargo build hooks
  • +
+

This refers to the ability to run custom code after cargo build. We covered use cases, their requirements and discussed the trade-offs of a more general Cargo tasks (e.g. cargo $task) mechanism vs a more targeted post-build script (e.g. post-build.rs) mechanism. Expect more news (a (pre-)RFC) from the WASM WG on this front.

+
    +
  • Slimmer core::fmt.
  • +
+

The current implementation of core::fmt uses trait objects and function pointers to make all uses of core::fmt fast to compile but this makes core::fmt impossible to inline which makes no_std programs that use formatting large in (binary) size. It might be possible to leverage std-aware Cargo to fix this: we could add a Cargo feature to core to replace the current implementation with one that's fully inlineable but as featureful as the current one -- this should produce smaller binaries.

+

For a bit more of detail you can check the logs and minutes from two meetings ago; they include our notes from the All Hands

+

Highlights

+
    +
  • The Embedded WG has started receiving submissions for the embedded showcase! We are looking for cool embedded Rust projects with visuals (pictures or videos) that can serve as examples of what can be done in Rust.
  • +
+
    +
  • The stm32-rs organization has emerged to collate work on STM32 crates.
  • +
+
    +
  • Similarly, the lpc-rs organization has emerged to work on LPC microcontrollers by NXP.
  • +
+
    +
  • Also, the nrf-rs organization has emerged to focus on the nRF family of microcontrollers by Nordic Semiconductors.
  • +
+
    +
  • @adamgreig has released an experimental PAC (Peripheral Access Crate) alternative for STM32 microcontrollers: stm32ral that compiles in about 3 seconds. (PACs are known for compile times in the order of hundreds of seconds.)
  • +
+ + + +
    +
  • Formatting numbers with core::fmt has become slimmer. Some users have reported binary size reductions of up to 26% (800B) in ARMv6-M binaries.
  • +
+ +

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+ + + +
    +
  • @hannobraun has published two crates: ieee802154, a partial implementation of the IEEE 802.15.4 standard, and dw1000, an embedded-hal driver for the Decawave DW1000 wireless transceiver chip.
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Device Cratesreleased160
HAL Impl Cratesreleased15+2
Board Support Cratesreleased13+2
Driver Crates Releasedreleased19+3
Driver Crates WIPWIP59+13
no-std cratesreleased23+6
+ +
+ +
+ + + + diff --git a/newsletter-16/index.html b/newsletter-16/index.html new file mode 100644 index 0000000..03477f5 --- /dev/null +++ b/newsletter-16/index.html @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 16

+ +

This is the sixteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

Highlights

+ +
    +
  • The Embedded WG continues to receive submissions for the embedded showcase. We are looking for cool embedded Rust projects (applications, not libraries or tools) with visuals (pictures or videos) that can serve as examples of what can be done in Rust.
  • +
+ +

Embedded Projects

+
    +
  • +

    @hannobraun published dwm1001, a board support crate for the Decawave DWM1001 module, which features a Nordic nRF52832 microcontroller and a Decawave DW1000 radio transceiver.

    +
  • +
  • +

    The RTFM (Real Time For the Masses) team has released cortex-m-rtfm v0.4.2; the most important new feature in this release are reproducible builds. They are also looking for user input on several open RFCs.

    +
  • +
+
    +
  • @japaric has released cargo-call-stack v0.1.1. cargo-call-stack is a static, whole program stack analysis tool; this version ships many new improvements: filtering, cleaner graphs, support for programs that use recursion, dynamic dispatch or function pointer calls, plus numerous bug fixes.
  • +
+ +
    +
  • @tarcieri extracted the micromath crate out of the accelerometer crate. It provides a fast, embedded-friendly arithmetic library (utilizing approximations which trade precision for improved performance and reduced code size), 2D/3D vector types, and statistical analysis functions.
  • +
+ +

If you have an embedded project or blog post you would like to have featured in the next Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased19+3
HAL Impl Cratesreleased18+3
Board Support Cratesreleased13~
Driver Crates Releasedreleased20+1
Driver Crates WIPWIP61+2
no-std cratesreleased24+1
+ +
+ +
+ + + + diff --git a/newsletter-17/index.html b/newsletter-17/index.html new file mode 100644 index 0000000..15e5f2a --- /dev/null +++ b/newsletter-17/index.html @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 17

+ +

This is the seventeenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

Highlights

+
    +
  • The embedded showcase gained its first entry! The rusty clock project, an alarm clock that features pressure, temperature and humidity on an e-paper display and 5 programmable alarms. We are still looking for cool embedded projects to serve that can serve as examples of what can be done in Rust. Don't hesitate to submit yours!
  • +
  • OxidizeConf, the first embedded Rust conference, has announced speakers! Check out the lineup here!
  • +
  • Antoine van Gelder wrote about using Peripheral Access Crates to program interrupts on the STM32F3 Discovery board
  • +
  • James Munns gave a talk at Rust Berlin about what happens before main() in embedded Rust projects
  • +
+

Embedded Projects

+ +

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased18~
HAL Impl Cratesreleased19~
Board Support Cratesreleased13~
Driver Crates Releasedreleased21+1
Driver Crates WIPWIP63+2
no-std cratesreleased25+1
+ +
+ +
+ + + + diff --git a/newsletter-18/index.html b/newsletter-18/index.html new file mode 100644 index 0000000..a03bf35 --- /dev/null +++ b/newsletter-18/index.html @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 18

+ +

This is the eighteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + + + + +

The winner of the Chat Vote: Matrix

+

About a month ago, due to Mozilla's plans to discontinue Mozilla IRC, we released RFC 0351: Chat Vote and started a public vote on which chat platform to use for the Rust Embedded Working Group in the future.

+

The winner of that vote was Matrix, with 160 votes, followed by IRC with 103 votes and Discord with 74 votes. As Matrix has won by more than 3 votes, it will become the new official chat platform for Rust Embedded! The name of our new channel is #rust-embedded:matrix.org, and you can join it right now using a client like Riot.

+

We will be trialling the new Matrix channel for the next two weeks, using it as our primary and official communication channel. After the trial period, we will evaluate any issues that came up during it, and decide how to proceed. More details about the organization of the channel can be found in the operational notes.

+

Since IRC ended in second place, and it's our current platform, we'll also be establishing a bridge between the Matrix channel and IRC during the trial. This way, users have the option to continue using IRC if they so desire.

+

To avoid the administrative overhead of having to switch bridged channels later, we will soon bridge directly to the #rust-embedded channel on Freenode, not to the Mozilla IRC channel. The bridge will be activated once we've worked out the Freenode channel registration.

+

While Matrix is a federated protocol, we are not planning on running our own infrastructure for now - instead, we will be using the matrix.org IRC bridge, and users are free to register on matrix.org or any other homeserver of their choosing. If this turns out to be a problem during the trial period, we may reconsider this decision.

+

We're also looking into a static log viewer, that would allow us to publish search-engine-indexable channel logs for public reading, similar to the public logs that we currently have. This may require us to self-host a static log generator such as matrix-static. Suggestions for other solutions are welcome!

+

Highlights

+
    +
  • +

    We've had a bunch of Embedded Rust related events over the past couple of months. EWG member @thejpster was at ACCU 2019 (the Association of C and C++ Users Annual Conference), in Bristol, UK, on 12 April, delivering a talk on Embeddded Rust and the Monotron. Jonathan was then speaking at the Centre for Computing History in Cambridge, UK on 18 April, followed by hosting Oxidize at the end of April! Next up, Monotron is visiting Rust Conf in Portland, USA in late August. Don't forget, if you've been giving or attending Embedded Rust talks, drop us a line for the next newsletter!

    +
  • +
  • +

    The embedded showcase gained 3 new entries! We are still looking for cool embedded projects to serve that can serve as examples of what can be done in Rust. Don't hesitate to submit yours!

    +
  • +
+

Embedded Projects

+ +

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased22+4
HAL Impl Cratesreleased25+6
Board Support Cratesreleased18+5
Driver Crates Releasedreleased25+4
Driver Crates WIPWIP67+4
no-std cratesreleased26+1
+ +
+ +
+ + + + diff --git a/newsletter-19/index.html b/newsletter-19/index.html new file mode 100644 index 0000000..d0efa59 --- /dev/null +++ b/newsletter-19/index.html @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 19

+ +

This is the 19th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

Embedded Projects

+ +

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased30+8
HAL Impl Cratesreleased26+1
Board Support Cratesreleased19+1
Driver Crates Releasedreleased27+2
Driver Crates WIPWIP68+1
no-std cratesreleased28+2
+ +
+ +
+ + + + diff --git a/newsletter-2/index.html b/newsletter-2/index.html new file mode 100644 index 0000000..53c1664 --- /dev/null +++ b/newsletter-2/index.html @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 2

+ +

This is the second bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+ +

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+

embedded-hal drivers

+

This is a list of recently released drivers that are part of the Weekly Driver Initiative. There are currently 5 Released Drivers, 14 WIP Drivers, and lots of TODOs!

+ +

embedded-hal Board/Chip Support Crates

+ +

Thanks

+
    +
  • Thanks to all of the Rust Team and Working Group members who took time at the All Hands to tackle some important Embedded Issues
  • +
  • Thanks to Alex Chrichton who pushed a fix to a linker issue mentioned in our last newsletter
  • +
+

Help Wanted

+
    +
  • Simon Sapin posted some working code for the DS3234 SPI RTC, and is looking for someone to turn it into a maintained crate!
  • +
+

If you have an embedded project that could use contributors or maintainers, leave a comment for the next newsletter!

+

Special Feature: The Embedded WG at the 2018 Rust All Hands

+

This week 15 or so Rust teams/working groups met for the Rust All Hands event in Berlin. Some members of the embedded WG were present and we had a chance to talk to the compiler, core and infra teams.

+

These are the highlights of our talks.

+

Embedded Rust on stable

+

We had previously identified 3 unstable features / issues that tie embedded development to the nightly channel in https://github.com/japaric/stable-embedded-rust. We talked to the other Rust teams about the possibility of addressing these issues in time for the 2018 edition release and the conclusion was that they thought that the timeline was possible. These are the 3 unstable features we are referring to:

+

Unstable Feature #1: xargo

+

We'll ship a rust-std component (pre-compiled core+compiler-builtins) for the thumb* and msp430 targets. This removes the need for xargo so people will be able to do something like the following to cross compile to ARM Cortex-M:

+
+rustup target add thumb7m-none-eabi
+cargo build --target thumbv7m-none-eabi
+
+

Tracking issue: rust-lang/rust#49382.

+

Unstable Feature #2: compiler-builtins

+

extern crate compiler_builtins is unstable to directly use. The fix we have decided on is to inject that as part of the prelude you get from #![no_std].

+

So, today #![no_std] expands to something like this:

+
+#![no_std]
+extern crate core;
+
+

With our change the expansion will run like this:

+
+#![no_std]
+extern crate core;
+
+// but this doesn't #![feature(compiler_builtins_lib)]
+extern crate compiler_builtins;
+
+

In the future we might want to merge compiler-builtins into core but that requires more effort and can still be done if we do the #![no_std] prelude approach right now.

+

Tracking issue: rust-lang/rust#49380

+

Unstable Feature #3: panic_fmt

+

There's an accepted RFC (#2070) for a stable mechanism to select the behavior of panic! in no_std context, and there's a know issue where the arguments of panic_fmt are kept in the binary even when they are unused by the panic_fmt implementation (cf. rust-lang/embedded-wg#41).

+

The main concern here was whether we'll be able to fix the binary size problem with the accepted design or if we'll need some new design. The compiler team thinks that this can be fixed with the existing design using MIR only rlibs but it's unlikely this will get fixed in time for the edition release. nagisa will likely propose an alternate solution that involves having Cargo select the panic provider crate.

+

Non critical unstable features

+

There are some other unstable features that don't prevent you from doing embedded development, however they come up often when doing no-std development. We had a chat with people on the compiler team about them.

+

Unstable Feature #4: const fn

+

This feature has been proposed for stabilization (cf. rust-lang/rust#24111).

+

Unstable Feature #5: asm!

+

Background: Some assembly operations can be implemented as external assembly files that are then called into using FFI; other ops though do need to be inlined into the function from which they are called to prevent losing semantics. Using external assembly file can be done on the stable channel. The second type of operation requires the unstable asm! macro.

+

The compiler team is not 100% sure on whether they want to stabilize inline assembly for the edition release. The embedded WG has proposed an alternative proposal: expose some assembly operations that need to be inlined as "Rust intrinsics" -- in a similar fashion to how SIMD is being implemented; these intrinsics would be in the core::asm::$ARCH module and they could either be implemented by lowering to a LLVM intrinsic or using inline assembly. For example:

+
+pub mod asm {
+    pub mod arm {
+        #[inline(always)]
+        pub fn cpsid() {
+            unsafe {
+                asm!("cpsid i" ::: "memory" : "volatile");
+            }
+        }
+    }
+}
+
+

These would be stable APIs with an unstable implementation. If LLVM assembler syntax changes, the implementations of these functions would have to be updated.

+

The embedded WG will submit an RFC proposing the asm module and that will include a list of assembly operations that (a) are common and (b) need to be inlined for different architectures.

+

Unstable Feature #6: #[used]

+

This experimental feature has been in the compiler for a while and it's required in some scenarios when using LTO to prevent the compiler from dead-stripping some function / static that needs to be in the final binary.

+

We'll try to get it stabilized by the edition release but it's not a high priority feature.

+

Stability of the Embedded Targets

+

We don't only want to make embedded Rust possible on stable; we also want to make sure the embedded targets don't regress. So we are going to add tests to rust-lang/rust CI to make sure regression block PRs from landing.

+

That effectively will make some of the embedded targets into the tier 1 platform. The core team is fine with adding the thumb* targets (ARM Cortex-M) to tier 1. Less maintained, still in development and not fully mature targets like AVR, MSP430 and RISCV will become tier 2 -- they'll be tested but won't block PRs and rust-std binaries will be produced but it's not guaranteed there will be binaries available for all nightly / beta / stable releases.

+

We'll open an issue to discuss with the infra team the exact tests we want to add and track progress on that, but have already told them about the kind of tests we want to add and they thought those kind of tests are possible to implement. The kind of tests we discussed were:

+
    +
  • It compiles and links
  • +
  • Runs the cross compiled binary in QEMU doesn't crash and exits with exit code 0.
  • +
  • Tracking the binary size of a program compiled with -Os / -Oz and notify someone or fail the build if the size changes by +/- 5-10% or something.
  • +
+

LLVM backends that are not yet in rustc

+

There are two embedded LLVM backends that have not yet been enabled in rustc for different reasons: AVR and RISCV.

+

In the case of AVR the main reason is that some LLVM codegen bugs prevent you from building core for AVR. These bugs are related to 128-bit integers and formatting floats. The libs team discussed this some time ago and they decided they are fine with landing arch specific #[cfg] attributes to remove 128-bit integers and other things like float APIs.

+

In the case of RISCV the LLVM backend is currently under active development and our current version of LLVM doesn't fully support RISCV. We would have to backport several patches to make RISCV work on our LLVM version. The core team feels OK with backporting those patches as long as they have already landed in upstream LLVM, and are not still under review.

+

Tooling

+

Getting tooling for e.g. binary inspection (e.g. objdump) can be hard on some platforms (e.g. Windows) specially for architecture which currently are not too widely used (e.g. RISCV). We can improve the situation here by shipping llvm tools with the Rust toolchain -- with one set of those tools you can inspect all the architectures that Rust supports. These are the thoughts of the core / infra team regarding this:

+
    +
  • We put these tools in the sysroot and have them always shipped with the Rust toolchain so no rustup component add required -- this is already the case with lld. It might not be possible to provide these tools on all platforms but it's very likely they'll be available on tier 1 platforms.
  • +
  • We do not add these tools to the user $PATH. Instead some Cargo subcommand will be created by the embedded WG (e.g. cargo objdump) and that subcommand will look for llvm-objdump in the sysroot and do the right thing.
  • +
  • We make no guarantees about the semantics and interface of these tools being preserved over time (e.g. CLI changes, user facing output format changes, etc.).
  • +
+

The Embedded Rust Book

+

We decided on an initial audience for the embedded book; we will be targeting people that know some embedded stuff and some Rust. The main reason for this is that if someone knows one and not the +other then they can go and read existing Rust documentation or the Discovery book and then read the embedded book. For more details check rust-lang-nursery/embedded-wg#56.

+ +
+ +
+ + + + diff --git a/newsletter-20/index.html b/newsletter-20/index.html new file mode 100644 index 0000000..4daebf0 --- /dev/null +++ b/newsletter-20/index.html @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 20

+ +

This is the 20th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

Embedded Projects

+
    +
  • Jens Reimann has assembled a docker image for developing Rust on the ESP8266 and ESP32 series of devices, including stable alloc support!
  • +
+
    +
  • Lucas Brendel working on peripheral access crates as well as a shared embedded HAL for the Infineon XMC4 series of microcontrollers in the xmc-rs organization. Peripheral access crates are available and the HAL is in the very early stages of development.
  • +
+
    +
  • 42 Technology have published the source code for their Nordic nRF9160 demonstration application, along with a Rust crate which wraps up Nordic's proprietary C driver library. They also have a piece comparing Embedded Rust and Embedded C published in the German language magazine IOT Design this month.
  • +
+
    +
  • theJPster's Monotron got a write-up in Hackaday. Moves are also afoot for a next-generation Monotron - codename Neotron 1000 - complete with a book! Check it out if you're interested developing a modern-day version of CP/M, written in Rust.
  • +
+
    +
  • probe-rs finally has released on crates.io. The library enables you to inspect, debug and flash ARM cores. Flash the ARM core your future embedded Rust project with cargo-flash, fully integrated into cargo. Flashing works for the nRF51822, nRF52832, nRF52840, STMF042 and STMF429xI using a DAPLink or an ST-Link. +The upcomming 0.3.0 release will also enable your to flash any ARM core (provided an an ARM CMSIS-Pack exists in a known registry).
  • +
+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased31+1
HAL Impl Cratesreleased28+2
Board Support Cratesreleased190
Driver Crates Releasedreleased28+1
Driver Crates WIPWIP70+2
no-std cratesreleased280
no-std crates WIPWIP3+3
+ +
+ +
+ + + + diff --git a/newsletter-21/index.html b/newsletter-21/index.html new file mode 100644 index 0000000..89e538f --- /dev/null +++ b/newsletter-21/index.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 21

+ +

This is the 21st newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

Highlights

+ +

Embedded Projects

+
    +
  • @eldruin released a platform-agnostic driver for the OPT300x family of ambient light sensors and published a blog post with a picture of the device taking lux measurements.
  • +
  • @mciantyre published a custom runtime and peripheral access crates to support development on the Teensy 4. Check out the repo to see how it works, discuss the approach, and try it out.
  • +
  • @japaric released version v0.1.0 of ufmt, a smaller (6-40x) and faster (2-9x) alternative to core::fmt that's free of dynamic dispatch, recursion (where possible) and panicking branches. ufmt is not a drop-in replacement for core::fmt but it provides uDebug and uDisplay traits and a family of uwrite! macros. In this release the uwrite! macros, and the rest of the crate, work on the stable channel.
  • +
  • @jamesmunns released two embedded crates: +
      +
    • panic-persist: A panic handler crate inspired by panic-ramdump that logs panic messages to a region of RAM defined by the user, allowing for discovery of panic messages post-mortem using normal program control flow.
    • +
    • cmim, or Cortex-M Interrupt Move: A crate for Cortex-M devices to move data to interrupt context, without needing a critical section to access the data within an interrupt, and to remove the need for the "mutex dance"
    • +
    +
  • +
  • @tarcieri released aead v0.2, providing generic traits for Authenticated Encryption with Associated Data (AEAD) ciphers, which now supports ergonomic alloc-free operation via an integration with the heapless crate. This trait is now implemented by several crates providing pure Rust implementations of AEAD modes which may be interesting to embedded users seeking to encrypt/data data in heapless buffers, including the chacha20poly1305 and aes-siv crates (and forthcoming support in the aes-ccm crate).
  • +
+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased32+1
HAL Impl Cratesreleased29+1
Board Support Cratesreleased190
Driver Crates Releasedreleased30+1
Driver Crates WIPWIP69-1
no-std cratesreleased30+2
no-std crates WIPWIP30
+ +
+ +
+ + + + diff --git a/newsletter-22/index.html b/newsletter-22/index.html new file mode 100644 index 0000000..5235af2 --- /dev/null +++ b/newsletter-22/index.html @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 22

+ +

This is the 22nd newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

Highlights

+ +

Embedded Projects

+
    +
  • +

    @andre-richter released v0.1.0 of qemu-exit. This library provides functions to gracefully exit a running QEMU session from within your Rust binary with an user-defined exit code. This can be used for unit or integration tests that run inside QEMU. Currently supports aarch64 and x86_64 architectures.

    +
  • +
  • +

    @eldruin released a platform-agnostic driver for the Si4703 FM radio turner (receiver) and published a blog post including a picture of an example setup.

    +
  • +
  • +

    @eldruin released a platform-agnostic driver for the PCA9685 PWM LED/Servo controller driver and published a blog post including a video of the device controlling RGB LEDs and several Servo motors simultaneously.

    +
  • +
  • +

    @eldruin released a platform-agnostic driver for Vishay's VEML6030 and VEML7700 ambient light sensors and published a blog post about it.

    +
  • +
  • +

    @nickray released salty (API, book, code), a library for fast Ed25519 signatures on Cortex-M4 and Cortex-M33 microcontrollers. It presents the ed25519-dalek API, but is self-contained and uses the fastest currently published field operations implementation, due to Bjoern Haase, based on the UMAAL DSP instruction (a: u32, b: u32, c: u32, d: u32) -> (a * b + c + d): u64. Testing is done on the musca-b1 Cortex-M33 microcontroller, simulated in QEMU v4. Additionally, a C API is included.

    +
  • +
  • +

    @nickray released littlefs2 (API, code), an idiomatic Rust API for the littlefs filesystem for microcontrollers, modeled after std::fs. The upstream library claims to be resilient against power-loss, and supports features like dynamic wear-leveling with bad block detection, inline files for efficient use of storage, and custom user attributes on files and directories.

    +
  • +
  • +

    @nickray released nisty (API, code), a companion library to salty with similar API, but for NIST P-256 signatures on Cortex-M4 and Cortex-M33 microcontrollers. It offers deterministic signatures, idiomatic conversions, and uses micro-ecc as backend implementation, which also has UMAAL DSP instruction optimizations.

    +
  • +
  • +

    probe-rs has finally released 0.3.0 on crates.io. Its cargo-flash extension has improved by a large margin! Flashing speed has increased 10x and it is possible to virtually flash any ARM core thanks to the use of CMSIS-Pack flash algorithms.

    +
      +
    • You can create your own target description from a CMSIS-Pack with the use of target-gen
    • +
    • Built in algorithms support the nRF51xxx, nRF91xxx, nRF52xxx, STM32F1xx, LPC8xx and LPC55S66 and LPC55S69 series using a DAPLink or an ST-Link.
    • +
    • Please file a PR if you extracted an algorithm for your chip and tested it!
    • +
    • We are looking for contributors. We have lots of non-ARM-specific stuff to do as well, such as improving erroring, useability and documentation including a webpage on the newly acquired probe.rs domain.
    • +
    • Join us on #probe-rs:matrix.org
    • +
    • 0.4.0 will finally feature GDB support :) Stay tuned!
    • +
    +
  • +
+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased39+7
HAL Impl Cratesreleased31+2
Board Support Cratesreleased190
Driver Crates Releasedreleased33+3
Driver Crates WIPWIP67-2
no-std cratesreleased32+2
no-std crates WIPWIP30
+ +
+ +
+ + + + diff --git a/newsletter-23/index.html b/newsletter-23/index.html new file mode 100644 index 0000000..c50d9de --- /dev/null +++ b/newsletter-23/index.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 23

+ +

This is the 23rd newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

Highlights

+ +

Embedded Projects

+ + +

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased42+3
HAL Impl Cratesreleased32+1
Board Support Cratesreleased21+2
Driver Crates Releasedreleased36+3
Driver Crates WIPWIP71+4
no-std cratesreleased34+2
no-std crates WIPWIP30
+ +
+ +
+ + + + diff --git a/newsletter-24/index.html b/newsletter-24/index.html new file mode 100644 index 0000000..27a3547 --- /dev/null +++ b/newsletter-24/index.html @@ -0,0 +1,209 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 24

+ +

This is the 24th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

We've been on an unscheduled hiatus for the past six months or so, but it's time for us to return! Today we're doing a quick fast-forward of all of the great things that have been released while we've been on break.

+

For the next few weeks, we'll be doing a special "catch-up" schedule, meaning we'll be releasing articles weekly until we've caught up with all of the recent changes. Once we've wrapped that up, we'll go back to a regular monthly cadence.

+

We've also added a few new folks to the resources team say hello to @hargoniX, @eldruin and @kalkyl who will be helping out with the newsletter!

+

Want to have your project mentioned? Make sure you let us know so we can include it!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

The Great Catch-Up!

+

Here's a whirlwind overview of some of the things that have been released and changed over the past six months or so! +We'll cover some of these updates in more detail over the coming weeks!

+

Renames

+
    +
  • The RTFM framework has been renamed to RTIC - Real Time Interrupt-driven Concurrency!
  • +
+

Resources

+ +

Tooling

+ +

Bindings

+ +

New Possibilities

+ +

PACs

+ +

HALs

+ +

BSPs

+ +

General abstraction crates

+ +

Drivers

+ +

WIP Drivers

+ +

no_std crates

+ +

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased46+4
HAL Impl Cratesreleased33+1
Board Support Cratesreleased38+17
Driver Crates Releasedreleased45+9
Driver Crates WIPWIP84+13
no-std cratesreleased41+7
no-std crates WIPWIP3+0
+ +
+ +
+ + + + diff --git a/newsletter-25/index.html b/newsletter-25/index.html new file mode 100644 index 0000000..d3a6a1a --- /dev/null +++ b/newsletter-25/index.html @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 25

+ +

This is the 25th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

As a note, some of these stories have happened over the past months. We're still working on catching up, but wanted to share them with you!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ +

If you want to mention something in the next newsletter, send us a pull request!

+

Highlights

+ +

Embedded Projects

+ +

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + + +
TypeStatusCountDiff
Peripheral Access Cratesreleased47+1
HAL Impl Cratesreleased330
Board Support Cratesreleased380
Driver Crates Releasedreleased52+7
Driver Crates WIPWIP85+1
no-std cratesreleased410
no-std crates WIPWIP30
+ +
+ +
+ + + + diff --git a/newsletter-26/index.html b/newsletter-26/index.html new file mode 100644 index 0000000..e618f0f --- /dev/null +++ b/newsletter-26/index.html @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 26

+ +

Highlights

+
    +
  • +

    @cecton wrote a blog post targeted to experienced developers but embedded development beginners: Rust, Arduino and Embedded Development as a Beginner: Part 1

    +
  • +
  • +

    @brainstorm and @joshajohnson Created a RTIC example for an HID mouse with a blackberry trackball bbtrackball-rs.

    +
  • +
  • +

    The knurling-rs tooling initiative by Ferrous Systems has grown: after defmt, the project has publicly released three new tools:

    +
      +
    • flip-link, a linker wrapper that adds zero-cost stack overflow protection to your project
    • +
    • probe-run, a Cargo runner that seamlessly runs embedded programs on your target device as if they were native ones
    • +
    • defmt-test, a proc-macro to write and run unit tests on embedded devices
    • +
    +
  • +
  • +

    The Rust Embedded Working Group's MSRV (Minimum Supported Rust Version) +policy has been updated and now only requires that crates build on the +latest stable Rust release. See msrv for more details.

    +
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+
    +
  • @eldruin released a platform-agnostic driver for the CCS811 indoor air quality sensor and published a blog post including example setups.
  • +
  • @diondokter released a first version of device-driver which can aid driver developers in developing device drivers. For now only register interfaces are supported as is laid out in this twitter thread.
  • +
  • @dbrgn released version 0.2 of the debouncr crate. It now supports stateful debouncing, meaning that the user can now choose whether every bouncing→stable transition should be detected as an edge, or only high↔︎low transitions.
  • +
+ +

Get Involved

+

This is the 26th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org!

+

If you want to mention something in the next newsletter, send us a pull request!

+ +
+ +
+ + + + diff --git a/newsletter-27/index.html b/newsletter-27/index.html new file mode 100644 index 0000000..6150631 --- /dev/null +++ b/newsletter-27/index.html @@ -0,0 +1,146 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 27

+ +

Highlights

+
    +
  • +

    @hannobraun published Last Month in Flott - March 2021, the monthly newsletter for Flott. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).

    +
  • +
  • +

    The cortex-m crate has been +updated to 0.7, including a recent release of 0.7.2, please update your +dependencies and let us know if you encounter any issues!

    +
  • +
  • +

    The Embedded Rust documentation and books have moved URLs, and are now all +available from https://docs.rust-embedded.org.

    +
  • +
  • +

    This blog has also moved URLs, and is now available at +https://blog.rust-embedded.org

    +
  • +
  • +

    Our weekly meetings continue at 8PM Berlin Time on our Matrix channel, +#rust-embedded:matrix.org. Join us to catch up on the latest developments +in the Embedded Rust ecosystem!

    +
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+
    +
  • @hannobraun released RampMaker 0.2, a library for generating stepper motor acceleration profiles, and Stepper 0.5, the universal stepper motor interface. Both libraries are part of the Flott motion control toolkit.
  • +
  • embassy, an async/await executor +designed for embedded usage and currently supporting nRF and STM32F4 devices, +is nearing its first crates.io release. Feedback and testing would be welcome!
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.

+

Get Involved

+

This is the 27th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + + + +

If you want to mention something in the next newsletter, send us a pull request!

+ + +
+ +
+ + + + diff --git a/newsletter-28/index.html b/newsletter-28/index.html new file mode 100644 index 0000000..347c66b --- /dev/null +++ b/newsletter-28/index.html @@ -0,0 +1,105 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 28

+ +

Highlights

+
    +
  • Last Month in Flott, the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+
    +
  • Crate device-driver has released version 0.2.0!
    +(Since 0.1.0, added customizable bit ordering and more pac-like write and modify interface)
  • +
  • After almost a year stm32f4xx-hal has released version 0.9.0! Get it while it's hot. 🔥🌶️
  • +
  • embedded-graphics 0.7.0-beta.1 released as the first stable step towards the long awaited 0.7.0! +There should be no major/breaking changes after this release as we work mostly on documentation, bugfixes and polish. See the release notes here.
  • +
  • svd2rust 0.18.0 was released, bringing a number of changes to PAC +generation; if you maintain a PAC please try it out!
  • +
  • shared-bus 0.2.1 was released, with support for concurrency frameworks like RTIC. Check the relevant documentation for more details.
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.

+

Get Involved

+

This is the 28th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org!

+

If you want to mention something in the next newsletter, send us a pull request!

+ + +
+ +
+ + + + diff --git a/newsletter-29/index.html b/newsletter-29/index.html new file mode 100644 index 0000000..99aa85d --- /dev/null +++ b/newsletter-29/index.html @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 29

+ +

Highlights

+
    +
  • +

    Last Month in Flott, the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).

    +
  • +
  • +

    The microbit crate has released v0.9.0, moved under the nrf-rs organisational umbrella, and gained micro:bit v2 support. 🎉

    +
  • +
  • +

    The switch-hal crate released v0.4.0, adding StatefulOutputSwitch for platforms that support StatefulOutputPin.

    +
  • +
  • +

    The probe-rs project, which provides debugging and flash programming for a variety of embedded targets, released version v0.11.0, with a number of performance and functionality improvements.

    +
  • +
  • +

    cortex-m released version 0.7.3, improving ease-of-use for the Delay implementation and fixing native builds on non-x86 hosts.

    +
  • +
  • +

    cortex-m-rt released version 0.6.15, backporting various fixes to the linker script and helping prepare for a new 0.7 release soon.

    +
  • +
  • +

    cross has posted a call for help looking for new maintainers: if you use cross and would like to help out, please check it out!

    +
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+
    +
  • Windfisch published their Midikraken, an extensible up-to-16-port MIDI-USB-Interface that also will support standalone operation (e.g. MIDI routing) soon. The project uses Rust's RTIC framework to drive a STM32F103 microcontroller board (a.k.a. "Blue Pill") and is open-source and open-hardware. The firmware is in active development and lots of cool new features are down the way! Kits for self-assembly will likely be sold some day in the future.
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.

+

This is the 29th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Get Involved

+

If you want to mention something in the next newsletter, send us a pull request!

+ +
+ +
+ + + + diff --git a/newsletter-3/index.html b/newsletter-3/index.html new file mode 100644 index 0000000..9e99f5d --- /dev/null +++ b/newsletter-3/index.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 3

+ +

This is the third bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+ +

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+
    +
  • japaric released an initial version of cargo-binutils, which will allow you to use LLVM's binutils (like nm, size, objcopy, etc.) in the format cargo objcopy (once issue 49584 has landed)
  • +
  • myeisha released the first version of their thumb2-stack-size tool, which helps determine the maximum stack size used in embedded code
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + +
TypeStatusCount
Device Cratesreleased13
HAL Impl Cratesreleased10
Driver Crates Releasedreleased7
Driver Crates WIPWIP26
+

Help Wanted

+
    +
  • We need help working on RFC2070, stabilizing usage of custom Panic behavior. nagisa is willing to mentor!
  • +
  • If you use inline assembly in your Embedded Rust programs, help us capture what assembly operations are used most often so we can stabilize them as intrinsics
  • +
+ +
+ +
+ + + + diff --git a/newsletter-30/index.html b/newsletter-30/index.html new file mode 100644 index 0000000..beb83f5 --- /dev/null +++ b/newsletter-30/index.html @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 30

+ + +

Highlights

+ +

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+
    +
  • cortex-m-rt v0.7.0 was released, with a number of bug fixes.
  • +
  • embedded-hal 0.2.6 released with some backports from the upcoming 1.0 +release: the new Transactional SPI and I2C interface, 10-bit I2C addressing +mode, set_state method for OutputPin, and new IoPin trait.
  • +
  • embedded-hal 1.0.0-alpha.5 released, with a number of new features and +changes as we work towards the final 1.0 release.
  • +
  • linux-embedded-hal 0.3.1 and 0.3.2 released with some backports and updates including +an implementation of the Transactional SPI and I2C interface and a bugfix +for active-low output pins.
  • +
  • linux-embedded-hal 0.4.0-alpha.1 released adapted to the embedded-hal 1.0.0-alpha.5 +release and a bugfix for active-low output pins.
  • +
  • gpio-cdev 0.5.0 released with some updates, including updating to tokio 1.0.
  • +
  • sysfs-gpio 0.6.0 released with some updates, including updating to tokio 1.0.
  • +
  • i2cdev 0.5.0 released with some updates.
  • +
  • spidev 0.5.0 released with some updates.
  • +
  • drogue-tls 0.3.0 released with some updates.
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.

+

Get Involved

+

This Embedded WG blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org!

+

If you want to mention something in the next newsletter, send us a pull request!

+ +
+ +
+ + + + diff --git a/newsletter-31/index.html b/newsletter-31/index.html new file mode 100644 index 0000000..1c0a5d3 --- /dev/null +++ b/newsletter-31/index.html @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 31

+ +

Highlights

+ +

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!

+
    +
  • +

    svd2rust released v0.20.0.

    +
  • +
  • +

    The new version of the Discovery book +targeting the micro:bit development board was released.

    +
  • +
  • +

    embedded-hal 1.0.0-alpha.6 and 1.0.0-alpha.7 released, with a number of new features and +changes as we work towards the final 1.0 release. Most notably, +CAN (Controller Area Network) traits were added and some traits +with unconstrained associated types were removed.

    +
  • +
  • +

    embedded-hal 0.2.7 released, including CAN (Controller Area Network) traits which were backported.

    +
  • +
  • +

    embedded-dma 0.2.0 released, including const generics support and resolves some confusion around 'static.

    +
  • +
  • +

    A project to develop asynchronous versions of the embedded-hal traits has been started. +See the current roadmap and please join the effort!

    +
  • +
  • +

    linux-embedded-hal 0.4.0-alpha.2 released updating embedded-hal to version 1.0.0-alpha.7.

    +
  • +
  • +

    New Rust Embedded ecosystem for the radiation-hardened Vorago VA108xx family of devices: +va108xx PAC, +va108xx-hal HAL +and vorago-reb1 BSP +with blogpost

    +
  • +
  • +

    New device driver crate for the MAX116xx +10-bit ADC devices with blogpost

    +
  • +
  • +

    The RIOT operating system now has upstream support for Rust applications.

    +

    This encompasses support in the build system, +high-level wrappers that make the OS's C mechanisms safe and idiomatic to use, +and additional examples maintained externally. +The wrappers implement high-level traits (e.g. from embedded-hal, embedded-nal and mutex-traits) where practical.

    +
  • +
  • +

    A blog post by Tweede Golf about comparing Embassy with FreeRTOS.

    +
  • +
  • +

    eeprom24x I2C EEPROM driver 0.5.0 released, adding support for STM M24C01 and M24C02 devices as well as implementing the embedded-storage traits.

    +
  • +
  • +

    measurements 0.10.4 and 0.11.0 released, most notably adding support for humidity and density.

    +
  • +
  • +

    9names released a platform-agnostic driver for Wii Extension Controllers and published a blog post. This driver supports Nunchuk controllers as well as the many variants of the Classic Controller (Original/Pro/NES/SNES).

    +
  • +
  • +

    Drogue Device now features an async Bluetooth Mesh stack.

    +
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.

+

Get Involved

+

This Embedded WG blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org!

+

If you want to mention something in the next newsletter, send us a pull request!

+ +
+ +
+ + + + diff --git a/newsletter-4/index.html b/newsletter-4/index.html new file mode 100644 index 0000000..62ea186 --- /dev/null +++ b/newsletter-4/index.html @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 4

+ +

This is the fourth bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+
    +
  • The Embedded WG IRC meetings are now explicitly public, and the agendas for the next meeting can be found in the WG Issues, like this issue for the next meeting
  • +
  • David shared his utility Form, which takes a single lib.rs (like those created by svd2rust or bindgen), and splits it into structured modules. Check out the nrf52 Chip Support Crate as an example, and try it out for your generated projects!
  • +
  • astro shared managed, A library that provides a way to logically own objects, whether or not heap allocation is available
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+
    +
  • Daniel started work on bluetooth-hci, an abstraction layer for HCI based Bluetooth Controllers, and is using it in his bluenrg crate for STMicro's BlueNRG RF modules
  • +
  • cr1901 shared his AT2XT project, an adapter that allows use of low cost PS2 keyboards with older computers that expect (now very expensive) XT keyboards. The firmware for this project is based on rtfm, and runs on an msp430 microcontroller. Check out the short blurb by cr1901 summarizing the project
  • +
  • hannobraun released v0.3 of his lpc82x Chip Support Crate for NXP's LPC82x family of microcontrollers, as well as v0.1 of lpc82x-hal. Check out the lpc82x-hal announcement here!
  • +
  • japaric released v0.3.1 of heapless which now contains fixed capacity implementations of HashMap and HashSet that work on no_std, do not require an allocator, and use u32 hashes (instead of the default u64).
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + +
TypeStatusCount
Device Cratesreleased12
HAL Impl Cratesreleased10
Board Support Cratesreleased6
Driver Crates Releasedreleased7
Driver Crates WIPWIP27
+

Help Wanted

+ + +
+ +
+ + + + diff --git a/newsletter-5/index.html b/newsletter-5/index.html new file mode 100644 index 0000000..12fcf0d --- /dev/null +++ b/newsletter-5/index.html @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 5

+ +

This is the fifth bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+
    +
  • We had a bonus Embedded-WG Newsletter this week about the path forward towards stable Embedded Rust, and what you can do as a crate maintainer to help with the effort!
  • +
  • The Tock-OS project posted about their MMIO Registers, contrasting them to crates generated by svd2rust
  • +
  • There were a couple of great posts about developing with Rust on Embedded targets from 219 Design and nercury
  • +
  • If Game Boy Advance development with Rust sounds interesting to you, make sure you check out the rusty-TONC and stdgba projects
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+ +

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + +
TypeStatusCount
Device Cratesreleased12
HAL Impl Cratesreleased10
Board Support Cratesreleased6
Driver Crates Releasedreleased9
Driver Crates WIPWIP29
+

Help Wanted

+
    +
  • Make sure to check out the path forward post, and report any issues you find!
  • +
  • Raspberry Fields is a festival of digital making, centered around the Raspberry Pi. It's taking place on Saturday 30 June and Sunday 1 July, in Cambridge, England. theJPster would love to set up a Rust stall, to talk to everyone about the advantages Rust offers and how they can get in to Rust on the Raspberry Pi. But to make that work, he needs your help! If you're interested, contact @therealjpster on Twitter or email pi@thejpster.org.uk.
  • +
  • Some members of the embedded WG will attend the RustFest impl days in two weeks. If you want to make Rust awesome for embedded development come help us! We have tasks with mentors and some hardware to give away!. Let us know if you are interested in helping out by commenting on that issue.
  • +
+ +
+ +
+ + + + diff --git a/newsletter-6/index.html b/newsletter-6/index.html new file mode 100644 index 0000000..400ec69 --- /dev/null +++ b/newsletter-6/index.html @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 6

+ +

This is the sixth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ +

This newsletter covers the past ~6 weeks.

+

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+ +

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+ +

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + +
TypeStatusCount
Device Cratesreleased14
HAL Impl Cratesreleased11
Board Support Cratesreleased6
Driver Crates Releasedreleased9
Driver Crates WIPWIP30
+

Help Wanted

+
    +
  • We are seeking input about the user interface the cargo-binutils subcommands should expose. These subcommands provide access to the LLVM tools provided by the llvm-tools rustup component mentioned above.
  • +
  • Are you using embedded Rust in production? We are collecting commercial testimonials about embedded Rust for the webpage the embedded WG will have on the revamped rust-lang.org website. Even if you can't give details about the product you are building we would still love to hear from you!
  • +
+ +
+ +
+ + + + diff --git a/newsletter-7/index.html b/newsletter-7/index.html new file mode 100644 index 0000000..bd4761e --- /dev/null +++ b/newsletter-7/index.html @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 7

+ +

This is the seventh newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+
    +
  • We have launched the Embedded WG Twitter! We'll be publishing things like our newsletter here, so go ahead and follow to stay up to date. If you have something you're working on and want to share, feel free to @ us so we can retweet it!
  • +
  • Work started on porting MUSL's libm (for math functions like sin, cos, etc.) has started, and already has 26 of 32 functions ported! This crate will hopefully be included in the core of Rust, so it can be used by no_std targets such as embedded or wasm.
  • +
  • The Atomic*.{load,store} API is now available for the thumbv6m and msp430 targets.
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+
    +
  • This week we have two Multirotor Flight Controller projects starting in Rust! They are both based on the stm32f3 family of chips from STMicro. + +
  • +
  • We also have two projects aiming to make use of Rust on the Raspberry Pi a little easier: + +
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + +
TypeStatusCountDiff
Device Cratesreleased140
HAL Impl Cratesreleased110
Board Support Cratesreleased60
Driver Crates Releasedreleased90
Driver Crates WIPWIP300
+

Help Wanted

+
    +
  • Help contribute to development of Rust's libm to get math functions built in to core for no_std targets!
  • +
+ +
+ +
+ + + + diff --git a/newsletter-8/index.html b/newsletter-8/index.html new file mode 100644 index 0000000..24db532 --- /dev/null +++ b/newsletter-8/index.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 8

+ +

This is the eighth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+ +

†: The CMSIS intrinsics will show up in the docs after the next successful nightly build (after 2018-07-30)

+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+ +

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Device Cratesreleased140
HAL Impl Cratesreleased110
Board Support Cratesreleased8+2
Driver Crates Releasedreleased11+2
Driver Crates WIPWIP35+5
no-std cratesreleased12+12
+

Help Wanted

+
    +
  • The Embedded-WG is looking for someone to write an RFC for ARM Intrinsics to get them stabilized
  • +
  • Jonathan Pallant is looking for ideas to implement for the Monotron project. Check out the monotron blog post for more details!
  • +
  • The libm project is looking for help with refactoring in order to better support chips without hardware double-floating-point support
  • +
+ +
+ +
+ + + + diff --git a/newsletter-9/index.html b/newsletter-9/index.html new file mode 100644 index 0000000..941f205 --- /dev/null +++ b/newsletter-9/index.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Embedded Working Group Newsletter - 9

+ +

This is the ninth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ +

If you want to mention something in the next newsletter, make sure to leave a comment on the issue.

+

Highlights

+
    +
  • The Embedded Working Group has moved! You can find our new coordination repo at rust-embedded/wg on GitHub, and crates maintained by the working group in the rust-embedded organization
  • +
  • The Embedded Working Group has grown! We are now 18 people grouped in the following 6 teams to allow for better focus on these topics: +
      +
    • The Cortex-M team develops and maintains the core of the Cortex-M crate ecosystem
    • +
    • The HAL team develops and maintains crates that ease the development of Hardware Abstraction Layers, Board Support Crates and drivers
    • +
    • The MS430 team develops and maintains the core of the MSP430 crate ecosystem
    • +
    • The RISCV team develops and maintains the core of the RISCV crate ecosystem
    • +
    • The Resources team develops, maintains and curates resources on embedded Rust
    • +
    • The Tools team maintains and develops core embedded tools
    • +
    +
  • +
+

Embedded Projects

+

If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!

+
    +
  • rust-lang/rust#52787 has landed, adding support in nightly for the RISC-V architecture as a bare-metal target!
  • +
+

embedded-hal Ecosystem Crates

+

As part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:

+ + + + + + + +
TypeStatusCountDiff
Device Cratesreleased140
HAL Impl Cratesreleased110
Board Support Cratesreleased9+1
Driver Crates Releasedreleased110
Driver Crates WIPWIP38+3
no-std cratesreleased120
+

Help Wanted

+
    +
  • We're considering changing to LLD as the default linker for thumb targets. Check out the RFC at rust-embedded/wg#160, and let us know what you think
  • +
+ +
+ +
+ + + + diff --git a/newsletter-template.md b/newsletter-template.md deleted file mode 100644 index 86e311c..0000000 --- a/newsletter-template.md +++ /dev/null @@ -1,83 +0,0 @@ -+++ -title = "The Embedded Working Group Newsletter - $TODO" -date = 20??-$TODO -draft = true -in_search_index = false -template = "page.html" -+++ - - - -## Highlights - - - -- TODO(remove, this is an example) "const generics" has landed in nightly! - -- TODO(remove, this is an example) the Rust compiler has gained cross compilation support for the Xtensa architecture! - - - -## Embedded Projects - - - -If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to [the next newsletter], we would love to show it off! - -- TODO(remove, this is an example) Crate embedded-foo has released version 1.0.0! - - - - -[someusername]: https://github.com/... -[@sometwittername]: https://twitter.com/... - - -[embedded-foo 1.0.0 released]: https://example.com/blog/... - -## `embedded-hal` Ecosystem Crates - -As part of the [Weekly Driver Initiative], crates that are part of the `embedded-hal` ecosystem are now tracked in the [Awesome Embedded Rust] repository. - -[Awesome Embedded Rust]: https://github.com/rust-embedded/awesome-embedded-rust -[Weekly Driver Initiative]: https://github.com/rust-embedded/wg/issues/39 - -## Get Involved - -This [Embedded WG] blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help! - -[Embedded WG]: https://github.com/rust-embedded/wg - - - - - - - - - - -If you want to mention something in [the next newsletter], send us a pull request! - -[the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/newsletter-next.md diff --git a/page/1/index.html b/page/1/index.html new file mode 100644 index 0000000..4f94f78 --- /dev/null +++ b/page/1/index.html @@ -0,0 +1,6 @@ + + + + +Redirect +

Click here to be redirected.

diff --git a/page/2/index.html b/page/2/index.html new file mode 100644 index 0000000..d2bf989 --- /dev/null +++ b/page/2/index.html @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

+ + The Embedded Working Group Newsletter - 28 + +

+ + +

Highlights

+
    +
  • Last Month in Flott, the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).
  • +
+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 27 + +

+ + +

Highlights

+
    +
  • +

    @hannobraun published Last Month in Flott - March 2021, the monthly newsletter for Flott. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).

    +
  • +
  • +

    The cortex-m crate has been +updated to 0.7, including a recent release of 0.7.2, please update your +dependencies and let us know if you encounter any issues!

    +
  • +
  • +

    The Embedded Rust documentation and books have moved URLs, and are now all +available from https://docs.rust-embedded.org.

    +
  • +
  • +

    This blog has also moved URLs, and is now available at +https://blog.rust-embedded.org

    +
  • +
  • +

    Our weekly meetings continue at 8PM Berlin Time on our Matrix channel, +#rust-embedded:matrix.org. Join us to catch up on the latest developments +in the Embedded Rust ecosystem!

    +
  • +
+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 26 + +

+ + +

Highlights

+
    +
  • +

    @cecton wrote a blog post targeted to experienced developers but embedded development beginners: Rust, Arduino and Embedded Development as a Beginner: Part 1

    +
  • +
  • +

    @brainstorm and @joshajohnson Created a RTIC example for an HID mouse with a blackberry trackball bbtrackball-rs.

    +
  • +
  • +

    The knurling-rs tooling initiative by Ferrous Systems has grown: after defmt, the project has publicly released three new tools:

    +
      +
    • flip-link, a linker wrapper that adds zero-cost stack overflow protection to your project
    • +
    • probe-run, a Cargo runner that seamlessly runs embedded programs on your target device as if they were native ones
    • +
    • defmt-test, a proc-macro to write and run unit tests on embedded devices
    • +
    +
  • +
  • +

    The Rust Embedded Working Group's MSRV (Minimum Supported Rust Version) +policy has been updated and now only requires that crates build on the +latest stable Rust release. See msrv for more details.

    +
  • +
+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 25 + +

+ + +

This is the 25th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

As a note, some of these stories have happened over the past months. We're still working on catching up, but wanted to share them with you!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 24 + +

+ + +

This is the 24th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

We've been on an unscheduled hiatus for the past six months or so, but it's time for us to return! Today we're doing a quick fast-forward of all of the great things that have been released while we've been on break.

+

For the next few weeks, we'll be doing a special "catch-up" schedule, meaning we'll be releasing articles weekly until we've caught up with all of the recent changes. Once we've wrapped that up, we'll go back to a regular monthly cadence.

+

We've also added a few new folks to the resources team say hello to @hargoniX, @eldruin and @kalkyl who will be helping out with the newsletter!

+

Want to have your project mentioned? Make sure you let us know so we can include it!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ + < < Back + | + Next > > +
+ +
+ + + + diff --git a/page/3/index.html b/page/3/index.html new file mode 100644 index 0000000..69d8a91 --- /dev/null +++ b/page/3/index.html @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

+ + The Embedded Working Group Newsletter - 23 + +

+ + +

This is the 23rd newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 22 + +

+ + +

This is the 22nd newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 21 + +

+ + +

This is the 21st newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 20 + +

+ + +

This is the 20th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 19 + +

+ + +

This is the 19th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ + < < Back + | + Next > > +
+ +
+ + + + diff --git a/page/4/index.html b/page/4/index.html new file mode 100644 index 0000000..7486663 --- /dev/null +++ b/page/4/index.html @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

+ + The Embedded Working Group Newsletter - 18 + +

+ + +

This is the eighteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + + + + + + Read More + +
+ +
+

+ + Embedded Rust in 2019 + +

+ + +

It's been a busy year for many of the members of the Embedded-WG this year, and we had a chance to catch up at OxidizeConf a few weeks ago. We discussed two main things, Moving off of Mozilla IRC, and our goals for (part of) 2019.

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 17 + +

+ + +

This is the seventeenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 16 + +

+ + +

This is the sixteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 15 + +

+ + +

This is the fifteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ + < < Back + | + Next > > +
+ +
+ + + + diff --git a/page/5/index.html b/page/5/index.html new file mode 100644 index 0000000..715d255 --- /dev/null +++ b/page/5/index.html @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

+ + This Year in Embedded Rust + +

+ + +

This year the Embedded WG set out to build the solid foundation that the +embedded Rust ecosystem requires to thrive. As we approach the date of the 2018 +edition release we reflect on our progress and share our achievements with you +in this post.

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 14 + +

+ + +

This is the fourteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

This is a special "spotlight" edition of the newsletter, where we look at a few topics in a bit more detail. Let us know what you think of the new format, and if there is anything you'd like to see included in the next newsletter!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 13 + +

+ + +

This is the thirteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 12 + +

+ + +

This is the twelfth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 11 + +

+ + +

This is the eleventh newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on internals.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ + < < Back + | + Next > > +
+ +
+ + + + diff --git a/page/6/index.html b/page/6/index.html new file mode 100644 index 0000000..6b86ee8 --- /dev/null +++ b/page/6/index.html @@ -0,0 +1,171 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

+ + PSA: Cortex-M Breakage (LLD as the default linker) + +

+ + +

The default linker for the 4 ARM Cortex-M targets listed below has changed from +arm-none-eabi-gcc to rust-lld in the latest nightly.

+
    +
  • thumbv6m-none-eabi
  • +
  • thumbv7m-none-eabi
  • +
  • thumbv7em-none-eabi
  • +
  • thumbv7em-none-eabihf
  • +
+

This will break the builds of binaries and cdylibs that were using the +old default linker (arm-none-eabi-gcc) and additionally pass extra flags to +the linker using any of these rustc flags: -C link-arg, -C link-args, -Z pre-link-arg or -Z pre-link-args. Building libraries (rlibs and +staticlibs) is not affected by this change.

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 10 + +

+ + +

This is the tenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+

Discuss on internals.rust-lang.org, on twitter, or on reddit!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 9 + +

+ + +

This is the ninth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 8 + +

+ + +

This is the eighth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 7 + +

+ + +

This is the seventh newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + Read More + +
+ + < < Back + | + Next > > +
+ +
+ + + + diff --git a/page/7/index.html b/page/7/index.html new file mode 100644 index 0000000..ad02860 --- /dev/null +++ b/page/7/index.html @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

+ + The Embedded Working Group Newsletter - 6 + +

+ + +

This is the sixth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 5 + +

+ + +

This is the fifth bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + Read More + +
+ +
+

+ + The Path Towards Stable + +

+ + +

Cortex-M library development now possible on beta and the path towards stable embedded Rust

+
+

TL;DR

+
    +
  • 1.27 = embedded (Cortex-M) library development on stable
  • +
  • 1.28 or 1.29 = embedded (Cortex-M) application development on stable
  • +
  • We are making breaking changes in the ecosystem in order to move towards development on the +stable channel
  • +
  • If you are a crate maintainer / author, make sure you test your crates with the new versions of +cortex-m (and similar) on the current beta release of Rust
  • +
  • If the latest version of a dependency doesn't compile on beta, file an issue and/or ping us on +the #rust-embedded IRC channel
  • +
  • Thanks for your patience!
  • +
+
+

We are happy to announce that library development for the Cortex-M targets is now possible on the +beta channel! :tada:

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 4 + +

+ + +

This is the fourth bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 3 + +

+ + +

This is the third bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + Read More + +
+ + < < Back + | + Next > > +
+ +
+ + + + diff --git a/page/8/index.html b/page/8/index.html new file mode 100644 index 0000000..fca8ce3 --- /dev/null +++ b/page/8/index.html @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+ +
+

+ + The Embedded Working Group Newsletter - 2 + +

+ + +

This is the second bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + Read More + +
+ +
+

+ + The Embedded Working Group Newsletter - 1 + +

+ + +

This is the first newsletter of the Embedded WG! We will be releasing this newsletter on a bi-weekly basis, and we are looking to highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!

+ + + + Read More + +
+ + < < Back + + +
+ +
+ + + + diff --git a/poole.css b/poole.css new file mode 100644 index 0000000..edda782 --- /dev/null +++ b/poole.css @@ -0,0 +1 @@ +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html,body{margin:0;padding:0}html{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:16px;line-height:1.5}@media (min-width: 38em){html{font-size:20px}}body{color:#515151;background-color:#fff;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}a{color:#268bd2;text-decoration:none}a:hover,a:focus{text-decoration:underline}h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:bold;line-height:1.25;color:#313131;text-rendering:optimizeLegibility}h1{font-size:2rem}h2{margin-top:1rem;font-size:1.5rem}h3{margin-top:1.5rem;font-size:1.25rem}h4,h5,h6{margin-top:1rem;font-size:1rem}p{margin-top:0;margin-bottom:1rem}strong{color:#303030}ul,ol,dl{margin-top:0;margin-bottom:1rem}dt{font-weight:bold}dd{margin-bottom:.5rem}hr{position:relative;margin:1.5rem 0;border:0;border-top:1px solid #eee;border-bottom:1px solid #fff}abbr{font-size:85%;font-weight:bold;color:#555;text-transform:uppercase}abbr[title]{cursor:help;border-bottom:1px dotted #e5e5e5}code,pre{font-family:Menlo, Monaco, "Courier New", monospace}code{padding:.25em .5em;font-size:85%;color:#bf616a;background-color:#f9f9f9;border-radius:3px}pre{display:block;margin-top:0;margin-bottom:1rem;padding:1rem;font-size:.8rem;line-height:1.4;overflow-x:scroll;background-color:#f9f9f9}pre code{padding:0;font-size:100%;color:inherit;background-color:transparent}.highlight{margin-bottom:1rem;border-radius:4px}.highlight pre{margin-bottom:0}blockquote{padding:.5rem 1rem;margin:.8rem 0;color:#7a7a7a;border-left:.25rem solid #e5e5e5}blockquote p:last-child{margin-bottom:0}@media (min-width: 30em){blockquote{padding-right:5rem;padding-left:1.25rem}}img{display:block;margin:0 0 1rem;border-radius:5px;max-width:100%}table{margin-bottom:1rem;width:100%;border:1px solid #e5e5e5;border-collapse:collapse}td,th{padding:.25rem .5rem;border:1px solid #e5e5e5}tbody tr:nth-child(odd) td,tbody tr:nth-child(odd) th{background-color:#f9f9f9}.lead{font-size:1.25rem;font-weight:300}.message{margin-bottom:1rem;padding:1rem;color:#717171;background-color:#f9f9f9}.container{max-width:38rem;padding-left:1rem;padding-right:1rem;margin-left:auto;margin-right:auto}.masthead{padding-top:1rem;padding-bottom:1rem;margin-bottom:3rem}.masthead-title{margin-top:0;margin-bottom:0;color:#505050}.masthead-title a{color:#505050}.masthead-title small{font-size:75%;font-weight:400;color:#c0c0c0;letter-spacing:0}.page,.post{margin-bottom:4em}.page-title,.post-title,.post-title a{color:#303030}.page-title,.post-title{margin-top:0}.post-date{display:block;margin-top:-.5rem;margin-bottom:1rem;color:#9a9a9a}.related{padding-top:2rem;padding-bottom:2rem;border-top:1px solid #eee}.related-posts{padding-left:0;list-style:none}.related-posts h3{margin-top:0}.related-posts li small{font-size:75%;color:#999}.related-posts li a:hover{color:#268bd2;text-decoration:none}.related-posts li a:hover small{color:inherit}.footnote-definition:first-of-type{border-top:1px solid;padding-top:1rem}.footnote-definition{margin-top:1rem}.footnote-definition sup{margin-left:-1rem;float:left}.pagination{overflow:hidden;margin-left:-1rem;margin-right:-1rem;font-family:"PT Sans", Helvetica, Arial, sans-serif;color:#ccc;text-align:center}.pagination-item{display:block;padding:1rem;border:1px solid #eee}.pagination-item:first-child{margin-bottom:-1px}a.pagination-item:hover{background-color:#f5f5f5}@media (min-width: 30em){.pagination{margin:3rem 0}.pagination-item{float:left;width:50%}.pagination-item:first-child{margin-bottom:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination-item:last-child{margin-left:-1px;border-top-right-radius:4px;border-bottom-right-radius:4px}} diff --git a/print.css b/print.css new file mode 100644 index 0000000..73750fc --- /dev/null +++ b/print.css @@ -0,0 +1 @@ +.sidebar{display:none !important}.content{margin:0 auto;width:100%;float:none;display:initial}.container{width:100%;float:none;display:initial;padding-left:1rem;padding-right:1rem;margin:0 auto} diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..9d64690 --- /dev/null +++ b/robots.txt @@ -0,0 +1,3 @@ +User-agent: * +Allow: / +Sitemap: https://blog.rust-embedded.org/sitemap.xml diff --git a/rss.xml b/rss.xml new file mode 100644 index 0000000..8389966 --- /dev/null +++ b/rss.xml @@ -0,0 +1,2242 @@ + + + + Rust Embedded Working Group + https://blog.rust-embedded.org + Blog of the Embedded Rust Working Group + + Zola + en + + Tue, 09 Jan 2024 00:00:00 +0000 + + + embedded-hal v1.0 now released! + Tue, 09 Jan 2024 00:00:00 +0000 + https://blog.rust-embedded.org/embedded-hal-v1/ + https://blog.rust-embedded.org/embedded-hal-v1/ + <p>The Rust Embedded Working Group is proud to announce the release of <code>embedded-hal</code> version 1.0 together with the +companion crates <code>embedded-hal-bus</code>, <code>embedded-hal-async</code> and <code>embedded-hal-nb</code>.</p> +<p>Check out the <a href="https://github.com/rust-embedded/embedded-hal">repository</a>, the <a href="https://github.com/rust-embedded/embedded-hal#crates">API documentation</a> and the <a href="https://github.com/rust-embedded/embedded-hal/blob/master/docs/migrating-from-0.2-to-1.0.md">migration guide</a>.</p> +<p>The <code>embedded-hal</code> crates provide traits (interfaces) for using peripherals commonly available in microcontrollers +such as GPIO, UART, SPI or I2C. They allow writing drivers (for sensors, displays, actuators, network adapters, etc.) in +a generic way, so they work on any microcontroller with an <code>embedded-hal</code> implementation without +modifying them. It's a central piece of the Embedded Rust ecosystem, ensuring interoperability throughout.</p> +<p>The 1.0 release has been in the works since 2020. Now that it's out, we consider all +traits in it to be <em>stable</em>. The plan is to extend <code>embedded-hal</code> with more traits in future 1.x releases, +not doing more breaking changes (i.e. there are no plans for a 2.0 release). This will provide a stable +base for building HALs and drivers.</p> +<p>So, what's new in <code>embedded-hal</code> 1.0?</p> +<span id="continue-reading"></span> +<p><img src="../embedded-ferris-soldering.png" alt="Ferris soldering embedded stuff" /> +<em>Ferris with a soldering iron by <a href="https://waterpigs.co.uk/notes/5UrMgn/">Barnaby Walters</a>.</em></p> +<h2 id="focus-on-drivers">Focus on drivers</h2> +<p>Previous versions of <code>embedded-hal</code> had a dual goal of standardizing HAL APIs for end users, and allowing writing generic drivers. +Experience has shown that these goals sometimes conflict with each other. As the latter brings much more value, 1.0 focuses on that.</p> +<p>We've simplified some traits and merged others to remove interoperability gotchas.</p> +<p>We've removed traits that were found to not be usable for generic drivers (most notably timers). The plan is to add +them back in the future, with a better design. See the <a href="https://github.com/rust-embedded/embedded-hal/blob/master/docs/migrating-from-0.2-to-1.0.md">migration guide</a> for details and links to the tracking issues.</p> +<h2 id="async">Async</h2> +<p>A new addition is the <code>embedded-hal-async</code> crate, containing async versions of the traits. With the Rust 1.75 release, +async traits are available on Rust stable. They can be used without heap allocations or dynamic +dispatch (unlike previous macro-based polyfills like the <code>async-trait</code> crate), so they are a great fit for bare-metal embedded usage.</p> +<p>Most <code>embedded-hal-async</code> traits are async versions of their blocking counterparts.</p> +<p>However, one highlight is the <a href="https://docs.rs/embedded-hal-async/1.0.0/embedded_hal_async/digital/trait.Wait.html"><code>digital::Wait</code></a> trait, with methods like <code>wait_for_high()</code> and <code>wait_for_low()</code>. This trait adds support for using &quot;IRQ&quot; GPIO pins typically used by SPI and I2C devices to send an interrupt to the microcontroller. This frequently-requested feature turned out to be hard to abstract with traits, but is now feasible in an ergonomic way with async.</p> +<h2 id="spi-bus-sharing">SPI bus sharing</h2> +<p><img src="../spi-shared-bus.svg" alt="SPI bus/device diagram" /></p> +<p>The <a href="https://docs.rs/embedded-hal/1.0.0/embedded_hal/spi/index.html"><code>SpiDevice</code></a> trait now allows sharing a SPI bus between multiple devices, each selected with its own CS pin. The design allows for unrelated drivers to talk to different devices in the same bus without conflicts and without being aware of each other. </p> +<p>The trait is agnostic about the kind of mutex/locking mechanism. The <a href="https://docs.rs/embedded-hal-bus/0.1.0/embedded_hal_bus/spi/index.html"><code>embedded-hal-bus</code></a> crate provides implementations for commonly used mutexes, but it is possible to write your own for e.g. the mutex of your favourite RTOS.</p> +<h2 id="error-handling">Error handling</h2> +<p>Generic drivers can now inspect errors, thanks to them being required to implement an <code>Error</code> trait +that allows querying the error &quot;kind&quot; out of a pre-selected set. HAL implementations can still use custom error types, +and map errors that don't fit in these categories to the <code>Other</code> kind.</p> +<p>All error types are also required to implement <code>Debug</code>, so <code>.unwrap()</code> and similar are now always available in generic drivers.</p> +<h2 id="embedded-io">embedded-io</h2> +<p>The <code>embedded-hal</code> project also hosts the <code>embedded-io</code> crates. They provide traits for byte-oriented I/O streams. Since serial +ports (UART) are essentially byte streams, the serial-specific traits in <code>embedded-hal</code> have been removed in favor of <code>embedded-io</code>.</p> +<p><code>embedded-io</code> has not reached 1.0 yet, but we expect that to happen in 2024.</p> +<h2 id="thanks">Thanks</h2> +<p>Thanks to the HAL team (<a href="https://github.com/therealprof">@therealprof</a>, <a href="https://github.com/ryankurte">@ryankurte</a>, <a href="https://github.com/eldruin">@eldruin</a>, <a href="https://github.com/Dirbaio">@dirbaio</a>, <a href="https://github.com/MabezDev">@MabezDev</a>), and to everyone who helped with testing, feedback and contributions for making <code>embedded-hal</code> 1.0 possible.</p> +<p>Thanks to the Rust Foundation for sponsoring Dario Nieuwenhuis (<a href="https://github.com/Dirbaio">@dirbaio</a>)'s work on <code>embedded-hal</code> through the <a href="https://foundation.rust-lang.org/news/announcing-the-rust-foundation-s-2023-fellows/">Fellowship grants program</a>.</p> +<p>And lastly, thanks to all the people releasing and maintaining HAL implementations and drivers using <code>embedded-hal</code>. <em>You</em> are the ones who make <code>embedded-hal</code> actually useful in the real world!</p> + + + + + The Embedded Working Group Newsletter - 31 + Tue, 22 Mar 2022 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-31/ + https://blog.rust-embedded.org/newsletter-31/ + <h2 id="highlights">Highlights</h2> +<ul> +<li>AdaCore and Ferrous Systems have joined forces to support Rust in safety- and mission-critical environments. +<ul> +<li><a href="https://blog.adacore.com/adacore-and-ferrous-systems-joining-forces-to-support-rust">Announcement from AdaCore</a></li> +<li><a href="https://ferrous-systems.com/blog/ferrous-systems-adacore-joining-forces/">Announcement from Ferrous Systems</a></li> +</ul> +</li> +<li>AUTOSAR announces <a href="https://www.autosar.org/news-events/details/autosar-announces-new-working-group-for-programming-language-rust-in-automotive-software-context-202/">new Working Group for Programming Language Rust in Automotive Software context</a>.</li> +</ul> +<span id="continue-reading"></span><h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/newsletter-next.md">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li> +<p><a href="https://crates.io/crates/svd2rust">svd2rust</a> released v0.20.0.</p> +</li> +<li> +<p>The new version of the <a href="https://docs.rust-embedded.org/discovery">Discovery book</a> +targeting the micro:bit development board was released.</p> +</li> +<li> +<p><a href="https://crates.io/crates/embedded-hal">embedded-hal</a> 1.0.0-alpha.6 and 1.0.0-alpha.7 released, with a number of new features and +changes as we work towards the final 1.0 release. Most notably, +CAN (Controller Area Network) traits were added and some traits +with unconstrained associated types were removed.</p> +</li> +<li> +<p><a href="https://crates.io/crates/embedded-hal">embedded-hal</a> 0.2.7 released, including CAN (Controller Area Network) traits which were backported.</p> +</li> +<li> +<p><a href="https://crates.io/crates/embedded-dma">embedded-dma</a> 0.2.0 released, including const generics support and resolves some confusion around <code>'static</code>.</p> +</li> +<li> +<p>A project to develop asynchronous versions of the <code>embedded-hal</code> traits has been started. +See the current <a href="https://github.com/rust-embedded/embedded-hal/issues/356">roadmap</a> and please join the effort!</p> +</li> +<li> +<p><a href="https://crates.io/crates/linux-embedded-hal">linux-embedded-hal</a> 0.4.0-alpha.2 released updating <code>embedded-hal</code> to version 1.0.0-alpha.7.</p> +</li> +<li> +<p>New Rust Embedded ecosystem for the radiation-hardened Vorago VA108xx family of devices: +<a href="https://egit.irs.uni-stuttgart.de/rust/va108xx">va108xx</a> PAC, +<a href="https://egit.irs.uni-stuttgart.de/rust/va108xx-hal">va108xx-hal</a> HAL +and <a href="https://egit.irs.uni-stuttgart.de/rust/vorago-reb1">vorago-reb1</a> BSP +with <a href="https://robamu.github.io/post/rust-ecosystem/">blogpost</a></p> +</li> +<li> +<p>New <a href="https://egit.irs.uni-stuttgart.de/rust/max116xx-10bit">device driver crate</a> for the MAX116xx +10-bit ADC devices with <a href="https://robamu.github.io/post/max11619-driver-rust/">blogpost</a></p> +</li> +<li> +<p>The RIOT operating system now <a href="https://doc.riot-os.org/using-rust.html">has upstream support for Rust applications</a>.</p> +<p>This encompasses support in the build system, +high-level <a href="https://crates.io/crates/riot-wrappers">wrappers</a> that make the OS's C mechanisms safe and idiomatic to use, +and <a href="https://gitlab.com/etonomy/riot-examples">additional examples</a> maintained externally. +The wrappers implement high-level traits (e.g. from <a href="https://crates.io/crates/embedded-hal">embedded-hal</a>, <a href="https://crates.io/crates/embedded-nal">embedded-nal</a> and <a href="https://crates.io/crates/mutex-traits">mutex-traits</a>) where practical.</p> +</li> +<li> +<p>A <a href="https://tweedegolf.nl/en/blog/65/async-rust-vs-rtos-showdown">blog post by Tweede Golf</a> about comparing Embassy with FreeRTOS.</p> +</li> +<li> +<p><a href="https://crates.io/crates/eeprom24x">eeprom24x</a> I2C EEPROM driver 0.5.0 released, adding support for STM M24C01 and M24C02 devices as well as implementing the <a href="https://github.com/rust-embedded-community/embedded-storage"><code>embedded-storage</code></a> traits.</p> +</li> +<li> +<p><a href="https://crates.io/crates/measurements">measurements</a> 0.10.4 and 0.11.0 released, most notably adding support for humidity and density.</p> +</li> +<li> +<p><a href="https://github.com/9names">9names</a> released a platform-agnostic <a href="https://crates.io/crates/wii-ext">driver for Wii Extension Controllers</a> and published a <a href="https://9names.github.io/driver/embedded/rust/2022/02/14/wii-ext-rs.html">blog post</a>. This driver supports Nunchuk controllers as well as the many variants of the Classic Controller (Original/Pro/NES/SNES).</p> +</li> +<li> +<p>Drogue Device now features an <a href="https://blog.drogue.io/bluetooth-mesh/">async Bluetooth Mesh stack</a>.</p> +</li> +</ul> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository.</p> +<h2 id="get-involved">Get Involved</h2> +<p>This <a href="https://github.com/rust-embedded/wg">Embedded WG</a> blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>!</p> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/newsletter-next.md">the next newsletter</a>, send us a pull request!</p> + + + + + This Year in Embedded Rust: 2021 + Tue, 28 Dec 2021 00:00:00 +0000 + https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/ + https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/ + <p>As 2021 draws to a close, we thought we'd take a look back at what's happened +over the last year in Embedded Rust, both within the working group and in the +larger community.</p> +<span id="continue-reading"></span><h2 id="meetings">Meetings</h2> +<p>We continued our weekly Rust Embedded Working Group meetings on <a href="https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/#rust-embedded:matrix.org">our Matrix channel</a>. They take place at 8pm Berlin time every Tuesday, and are open to the public. You can find all the <a href="https://github.com/rust-embedded/wg/tree/master/minutes">minutes on Github</a>.</p> +<h2 id="newsletters">Newsletters</h2> +<p>The <a href="https://blog.rust-embedded.org/">blog</a> saw five new newsletters posted, keeping everyone up to date with what's hot in Embedded Rust. Make sure you bookmark or subscribe with your favourite RSS reader so you never miss an update! Please do also keep your contributions coming, as we love hearing about what everyone gets up to in Embedded Rust outside of the official Rust Embedded Working Group projects.</p> +<h2 id="platform-support">Platform Support</h2> +<p>Outside of the working group, platform support communities provide vendor-specific support for particular microcontrollers and development boards.</p> +<p>2021 saw a brand-new microcontroller vendor hit the scene - Raspberry Pi! Their debut RP2040 microcontroller has two Cortex-M0 cores, and certainly made us all think about how we can try to make our software safe to use on multi-core systems. A new <a href="https://github.com/rp-rs">rp-rs</a> community sprang up and continues to make good progress supporting all areas of the RP2040 with good quality examples.</p> +<p>This year also saw Espressif officially adopt Rust and <a href="https://mabez.dev/blog/posts/esp-rust-espressif/">they hired @mabez</a> from the <a href="https://github.com/esp-rs">esp-rs</a> community to help out!</p> +<p>Other platform support communities continued to develop this year:</p> +<ul> +<li><a href="https://github.com/atsamd-rs">atsamd-rs</a> for Atmel ARM SAM-D and SAM-E microcontrollers (<a href="https://matrix.to/#/#atsamd-rs_community:gitter.im">Matrix chat</a>)</li> +<li><a href="https://github.com/avr-rust">avr-rust</a> for Atmel AVR microcontrollers (<a href="https://matrix.to/#/#avr-rust_Lobby:gitter.im">Matrix chat</a>)</li> +<li><a href="https://github.com/esp-rs">esp-rs</a> for Espressif ESP8266 and ESP32 Wi-Fi chips (<a href="https://matrix.to/#/#esp-rs:matrix.org">Matrix chat</a>)</li> +<li><a href="https://github.com/imxrt-rs">imxrt-rs</a> for NXP ARM iMX.RT microcontrollers</li> +<li><a href="https://github.com/lpc55">lpc55</a> for NXP ARM LPC55xx microcontrollers (<a href="https://matrix.to/#/#lpc55:matrix.org">Matrix chat</a>)</li> +<li><a href="https://github.com/nrf-rs">nrf-rs</a> for Nordic ARM nRF51, 52 and 9160 Bluetooth/LTE devices (<a href="https://matrix.to/#/#nrf-rs:matrix.org">Matrix chat</a>)</li> +<li><a href="https://github.com/riscv-rust">riscv-rust</a> for all kinds of RISC-V devices</li> +<li><a href="https://github.com/rp-rs">rp-rs</a> for Raspberry Pi's RP2040 microcontroller (<a href="https://matrix.to/#/#rp-rs:matrix.org">Matrix chat</a>)</li> +<li><a href="https://github.com/stm32-rs">stm32-rs</a> for all of ST Micro's 32-bit ARM microcontrollers (<a href="https://matrix.to/#/#stm32-rs:matrix.org">Matrix chat</a>)</li> +</ul> +<p>If you're a platform support community not on the list please get in touch, we'd love to hear from you!</p> +<h2 id="other-embedded-projects">Other Embedded Projects</h2> +<p>While not officially part of the Embedded Working Group, the following projects all continued to develop over 2021:</p> +<ul> +<li>The concurrency framework <a href="https://rtic.rs">RTIC</a> (<a href="https://github.com/rtic-rs">GitHub</a>, <a href="https://matrix.to/#/#rtic:matrix.org">Matrix</a>) hit version 1.0!</li> +<li>The async framework <a href="https://embassy.dev">Embassy</a> (<a href="https://github.com/embassy-rs">GitHub</a>, <a href="https://matrix.to/#/#embassy-rs:matrix.org">Matrix</a>) has been under heavy development and now supports STM32, nRF and RP2040 platforms.</li> +<li>The debug and programming library and tools from <a href="https://probe.rs">probe-rs</a> (<a href="https://github.com/probe-rs">GitHub</a>, <a href="https://matrix.to/#/#probe-rs:matrix.org">Matrix</a>) released v0.11 and v0.12 of their library and tools including <a href="https://github.com/probe-rs/cargo-embed">cargo-embed</a>.</li> +<li>The <a href="https://knurling.ferrous-systems.com/">Knurling</a> project (<a href="https://github.com/knurling-rs">GitHub</a>) has had several releases of their tools such as <a href="https://github.com/knurling-rs/probe-run">probe-run</a>.</li> +<li>The <a href="https://github.com/smoltcp-rs/smoltcp">smoltcp</a> embedded TCP/IP stack released v0.7 and v0.8, with many improvements including to the DHCP client and adding IEEE 802.15.4 support.</li> +<li><a href="https://github.com/embedded-graphics">embedded-graphics</a> (<a href="https://matrix.to/#/#rust-embedded-graphics:matrix.org">Matrix</a>), a graphics library for embedded applications, had a major new v0.7 release (see the <a href="https://github.com/embedded-graphics/embedded-graphics/blob/master/MIGRATING-0.6-0.7.md">migration notes</a>).</li> +<li>The <a href="https://oxidecomputer.github.io/hubris/">Hubris</a> RTOS and its companion debugger Humility, by <a href="https://oxide.computer/">Oxide Computer</a>, had their first release.</li> +</ul> +<h2 id="our-repositories">Our Repositories</h2> +<p>We continued to work on and maintain a number of key Embedded Rust repositories. The following repos all had commits during 2021:</p> +<ul> +<li><a href="https://github.com/rust-embedded/embedded-hal">embedded-hal</a>: The Embedded Hardware Abstraction Layer is a set of traits for describing common peripherals in a hardware-independent way. It continues its march towards 1.0 status, with a series of 1.0-alpha releases. It should hit 1.0 milestone some time in 2022! 120 commits over 27 files this year.</li> +<li><a href="https://github.com/rust-embedded/discovery">discovery</a>: This book on Discovering Embedded Programming using Rust had a re-write this year - it's now based around the BBC micro:Bit! 251 commits over 187 files this year.</li> +<li><a href="https://github.com/rust-embedded/book">book</a>: Our guide to all things Embedded Rust continues to be updated and improved, with 39 commits this year.</li> +<li><a href="https://github.com/rust-embedded/embedonomicon">embedonomicon</a>: Our guide to all the low-down details on how to bring-up a new <code>#[no_std]</code> platform with Rust saw 15 commits this year.</li> +<li><a href="https://github.com/rust-embedded/svd2rust">svd2rust</a>: This tool generates our 'Peripheral Access Crates' from a <a href="https://www.keil.com/pack/doc/CMSIS/SVD/html/index.html">System View Description</a> file of the chip provided by the manufacturer. 122 commits over 17 files this year.</li> +<li><a href="https://github.com/rust-embedded/svd">svd</a>: The core libraries used by svd2rust and other tools to manipulate SVD files had 103 commits over 39 files this year.</li> +<li><a href="https://github.com/rust-embedded/awesome-embedded-rust">awesome-embedded-rust</a>: Our list of the very best in Embedded Rust keeps growing with 97 commits this year.</li> +<li><a href="https://github.com/rust-embedded/cortex-m">cortex-m</a>, <a href="https://github.com/rust-embedded/cortex-m-rt">cortex-m-rt</a>, and <a href="https://github.com/rust-embedded/cortex-m-quickstart">cortex-m-quickstart</a>: Our platform support crates for the Arm Cortex-M architecture saw continued development, with 93 and 54 commits respectively, and a new v0.7 of cortex-m-rt released this year.</li> +<li><a href="https://github.com/rust-embedded/cortex-a">cortex-a</a>: Our platform support crate for the Arm Cortex-A architecture saw 25 commits this year.</li> +<li><a href="https://github.com/rust-embedded/riscv">riscv</a> and <a href="https://github.com/rust-embedded/riscv-rt">riscv-rt</a>: Our platform support crates for the RISC-V architecture saw 74 and 12 commits respectively this year, with a v0.7 release of riscv.</li> +<li><a href="https://github.com/rust-embedded/msp430">msp430</a> and <a href="https://github.com/rust-embedded/msp430">msp430-rt</a>: Our platform support crates for the MSP430 architecture.</li> +<li><a href="https://github.com/rust-embedded/gpio-cdev">gpio-cdev</a>, <a href="https://github.com/rust-embedded/rust-spidev">rust-spidev</a>, <a href="https://github.com/rust-embedded/rust-sysfs-gpio">rust-sysfs-gpio</a>, <a href="https://github.com/rust-embedded/rust-i2cdev">rust-i2cdev</a>, and <a href="https://github.com/rust-embedded/linux-embedded-hal">linux-embedded-hal</a>: Support for embedded Linux continued with 177 commits across these projects.</li> +<li><a href="https://github.com/rust-embedded/r0">r0</a> was a cross-platform initialisation library, but we deprecated it this year to move such initialisation into platform-specific libraries such as cortex-m-rt.</li> +</ul> + + + + + The Embedded Working Group Newsletter - 30 + Tue, 16 Nov 2021 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-30/ + https://blog.rust-embedded.org/newsletter-30/ + <!-- TODO before release set `draft` to `false` and `in_search_index` to `true` --> +<h2 id="highlights">Highlights</h2> +<ul> +<li><a href="https://github.com/dkhayes117">@dkhayes117</a> joined the embedded working group's RISC-V team</li> +<li>Rust std support <a href="https://github.com/rust-lang/rust/pull/87666">added for the ESP32</a></li> +<li><a href="https://mabez.dev/blog/posts/esp-rust-18-10-2021/">Rust on Espressif chips update</a></li> +<li><a href="https://blog.drogue.io/lorawan-update/">State of LoRaWAN support</a></li> +</ul> +<span id="continue-reading"></span><h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/newsletter-next.md">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://crates.io/crates/cortex-m-rt">cortex-m-rt</a> v0.7.0 was released, with a number of bug fixes.</li> +<li><a href="https://crates.io/crates/embedded-hal">embedded-hal</a> 0.2.6 released with some backports from the upcoming 1.0 +release: the new Transactional SPI and I2C interface, 10-bit I2C addressing +mode, <code>set_state</code> method for <code>OutputPin</code>, and new <code>IoPin</code> trait.</li> +<li><a href="https://crates.io/crates/embedded-hal">embedded-hal</a> 1.0.0-alpha.5 released, with a number of new features and +changes as we work towards the final 1.0 release.</li> +<li><a href="https://crates.io/crates/linux-embedded-hal">linux-embedded-hal</a> 0.3.1 and 0.3.2 released with some backports and updates including +an implementation of the Transactional SPI and I2C interface and a bugfix +for active-low output pins.</li> +<li><a href="https://crates.io/crates/linux-embedded-hal">linux-embedded-hal</a> 0.4.0-alpha.1 released adapted to the <code>embedded-hal</code> 1.0.0-alpha.5 +release and a bugfix for active-low output pins.</li> +<li><a href="https://crates.io/crates/gpio-cdev">gpio-cdev</a> 0.5.0 released with some updates, including updating to <code>tokio</code> 1.0.</li> +<li><a href="https://crates.io/crates/sysfs-gpio">sysfs-gpio</a> 0.6.0 released with some updates, including updating to <code>tokio</code> 1.0.</li> +<li><a href="https://crates.io/crates/i2cdev">i2cdev</a> 0.5.0 released with some updates.</li> +<li><a href="https://crates.io/crates/spidev">spidev</a> 0.5.0 released with some updates.</li> +<li><a href="https://crates.io/crates/drogue-tls">drogue-tls</a> 0.3.0 released with some updates.</li> +</ul> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository.</p> +<h2 id="get-involved">Get Involved</h2> +<p>This <a href="https://github.com/rust-embedded/wg">Embedded WG</a> blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>!</p> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/newsletter-next.md">the next newsletter</a>, send us a pull request!</p> + + + + + The Embedded Working Group Newsletter - 29 + Tue, 27 Jul 2021 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-29/ + https://blog.rust-embedded.org/newsletter-29/ + <h2 id="highlights">Highlights</h2> +<ul> +<li> +<p><a href="https://flott-motion.org/news/last-month-in-flott-may-2021/">Last Month in Flott</a>, the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).</p> +</li> +<li> +<p>The <a href="https://crates.io/crates/microbit">microbit crate</a> has released v0.9.0, moved under the <a href="https://github.com/nrf-rs/microbit">nrf-rs</a> organisational umbrella, <strong>and</strong> gained <a href="https://github.com/nrf-rs/microbit/pull/44">micro:bit v2</a> support. 🎉</p> +</li> +<li> +<p>The <a href="https://crates.io/crates/switch-hal">switch-hal crate</a> released v0.4.0, adding <a href="https://docs.rs/switch-hal/0.4.0/switch_hal/trait.StatefulOutputSwitch.html">StatefulOutputSwitch</a> for platforms that support <code>StatefulOutputPin</code>.</p> +</li> +<li> +<p>The <a href="https://probe.rs">probe-rs</a> project, which provides debugging and flash programming for a variety of embedded targets, released version <a href="https://probe.rs/blog/release-0-11-0/">v0.11.0</a>, with a number of performance and functionality improvements.</p> +</li> +<li> +<p><a href="https://crates.io/crates/cortex-m">cortex-m</a> released version 0.7.3, improving ease-of-use for the <code>Delay</code> implementation and fixing native builds on non-x86 hosts.</p> +</li> +<li> +<p><a href="https://crates.io/crates/cortex-m-rt">cortex-m-rt</a> released version 0.6.15, backporting various fixes to the linker script and helping prepare for a new 0.7 release soon.</p> +</li> +<li> +<p><a href="https://github.com/rust-embedded/cross">cross</a> has posted a <a href="https://github.com/rust-embedded/cross/issues/574">call for help</a> looking for new maintainers: if you use cross and would like to help out, please check it out!</p> +</li> +</ul> +<span id="continue-reading"></span><h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2021-08-24-newsletter-30.md">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://windfis.ch">Windfisch</a> published their <a href="https://github.com/Windfisch/midikraken">Midikraken</a>, an extensible up-to-16-port MIDI-USB-Interface that also will support standalone operation (e.g. MIDI routing) soon. The project uses Rust's RTIC framework to drive a STM32F103 microcontroller board (a.k.a. &quot;Blue Pill&quot;) and is open-source and open-hardware. The firmware is in active development and lots of cool new features are down the way! Kits for self-assembly will likely be sold some day in the future.</li> +</ul> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository.</p> +<p>This is the 29th newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<h2 id="get-involved">Get Involved</h2> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2021-08-24-newsletter-30.md">the next newsletter</a>, send us a pull request!</p> + + + + + The Embedded Working Group Newsletter - 28 + Tue, 20 Apr 2021 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-28/ + https://blog.rust-embedded.org/newsletter-28/ + <h2 id="highlights">Highlights</h2> +<ul> +<li><a href="https://flott-motion.org/news/last-month-in-flott-april-2021/">Last Month in Flott</a>, the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).</li> +</ul> +<span id="continue-reading"></span><h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2021-05-07-newsletter-29.md">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li>Crate <a href="https://crates.io/crates/device-driver">device-driver</a> has released version 0.2.0!<br /> +(Since 0.1.0, added customizable bit ordering and more pac-like write and modify interface)</li> +<li>After almost a year <a href="https://crates.io/crates/stm32f4xx-hal">stm32f4xx-hal</a> has released version 0.9.0! Get it while it's hot. 🔥🌶️</li> +<li><a href="https://crates.io/crates/embedded-graphics/0.7.0-beta.1">embedded-graphics 0.7.0-beta.1 released</a> as the first stable step towards the long awaited 0.7.0! +There should be no major/breaking changes after this release as we work mostly on documentation, bugfixes and polish. See the release notes <a href="https://github.com/embedded-graphics/embedded-graphics/releases/tag/embedded-graphics-v0.7.0-beta.1">here</a>.</li> +<li><a href="https://crates.io/crates/svd2rust">svd2rust 0.18.0</a> was released, bringing a number of changes to PAC +generation; if you maintain a PAC please try it out!</li> +<li><a href="https://crates.io/crates/shared-bus">shared-bus 0.2.1</a> was released, with support for concurrency frameworks like RTIC. Check the <a href="https://docs.rs/shared-bus/latest/shared_bus/type.BusManagerAtomicCheck.html">relevant documentation</a> for more details.</li> +</ul> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository.</p> +<h2 id="get-involved">Get Involved</h2> +<p>This is the 28th newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>!</p> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2021-05-07-newsletter-29.md">the next newsletter</a>, send us a pull request!</p> +<!-- TODO before release add the next template! --> + + + + + The Embedded Working Group Newsletter - 27 + Tue, 16 Mar 2021 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-27/ + https://blog.rust-embedded.org/newsletter-27/ + <h2 id="highlights">Highlights</h2> +<ul> +<li> +<p><a href="https://github.com/hannobraun">@hannobraun</a> published <a href="https://flott-motion.org/news/last-month-in-flott-march-2021/">Last Month in Flott - March 2021</a>, the monthly newsletter for Flott. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).</p> +</li> +<li> +<p>The <a href="https://github.com/rust-embedded/cortex-m">cortex-m crate</a> has been +updated to 0.7, including a recent release of 0.7.2, please update your +dependencies and let us know if you encounter any issues!</p> +</li> +<li> +<p>The Embedded Rust documentation and books have moved URLs, and are now all +available from https://docs.rust-embedded.org.</p> +</li> +<li> +<p>This blog has also moved URLs, and is now available at +https://blog.rust-embedded.org</p> +</li> +<li> +<p>Our weekly meetings continue at 8PM Berlin Time on our Matrix channel, +<a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>. Join us to catch up on the latest developments +in the Embedded Rust ecosystem!</p> +</li> +</ul> +<span id="continue-reading"></span><h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2021-04-16-newsletter-28.md">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/hannobraun">@hannobraun</a> released <a href="https://flott-motion.org/news/ramp-maker-0-2/">RampMaker 0.2</a>, a library for generating stepper motor acceleration profiles, and <a href="https://flott-motion.org/news/stepper-0-5/">Stepper 0.5</a>, the universal stepper motor interface. Both libraries are part of the <a href="https://flott-motion.org/">Flott</a> motion control toolkit.</li> +<li><a href="https://github.com/embassy-rs/embassy">embassy</a>, an async/await executor +designed for embedded usage and currently supporting nRF and STM32F4 devices, +is nearing its first crates.io release. Feedback and testing would be welcome!</li> +</ul> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository.</p> +<h2 id="get-involved">Get Involved</h2> +<p>This is the 27th newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<!-- TODO uncomment --> +<!-- Discuss on [#rust-embedded:matrix.org], [users.rust-lang.org], [on twitter], or [on reddit]! --> +<!-- [#rust-embedded:matrix.org]: https://matrix.to/#/#rust-embedded:matrix.org --> +<!-- [users.rust-lang.org]: https://example.org/#TODO --> +<!-- [on twitter]: https://example.org/#TODO --> +<!-- [on reddit]: https://example.org/#TODO --> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2021-04-16-newsletter-28.md">the next newsletter</a>, send us a pull request!</p> +<!-- TODO before release add the next template! --> + + + + + The Embedded Working Group Newsletter - 26 + Tue, 16 Feb 2021 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-26/ + https://blog.rust-embedded.org/newsletter-26/ + <h2 id="highlights">Highlights</h2> +<ul> +<li> +<p><a href="https://twitter.com/CecileTonglet">@cecton</a> wrote a blog post targeted to experienced developers but embedded development beginners: <a href="https://blog.cecton.com/posts/rust-and-arduino-part1/">Rust, Arduino and Embedded Development as a Beginner: Part 1</a></p> +</li> +<li> +<p><a href="https://twitter.com/braincode">@brainstorm</a> and <a href="https://twitter.com/_joshajohnson">@joshajohnson</a> Created a RTIC example for an HID mouse with a blackberry trackball <a href="https://github.com/brainstorm/bbtrackball-rs">bbtrackball-rs</a>.</p> +</li> +<li> +<p>The <a href="https://github.com/knurling-rs/meta">knurling-rs</a> tooling initiative by <a href="https://ferrous-systems.com">Ferrous Systems</a> has grown: after <a href="https://ferrous-systems.com/blog/defmt/"><code>defmt</code></a>, the project has publicly released three new tools:</p> +<ul> +<li><a href="https://github.com/knurling-rs/flip-link"><code>flip-link</code></a>, a linker wrapper that adds zero-cost stack overflow protection to your project</li> +<li><a href="https://github.com/knurling-rs/probe-run"><code>probe-run</code></a>, a Cargo runner that seamlessly runs embedded programs on your target device as if they were native ones</li> +<li><a href="https://github.com/knurling-rs/defmt-test"><code>defmt-test</code></a>, a proc-macro to write and run unit tests on embedded devices</li> +</ul> +</li> +<li> +<p>The Rust Embedded Working Group's MSRV (Minimum Supported Rust Version) +policy has been updated and now only requires that crates build on the +latest stable Rust release. See <a href="https://github.com/rust-embedded/wg/pull/523">msrv</a> for more details.</p> +</li> +</ul> +<span id="continue-reading"></span><h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2021-03-16-newsletter-27.md">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/eldruin">@eldruin</a> released a platform-agnostic <a href="https://crates.io/crates/embedded-ccs811">driver for the CCS811</a> indoor air quality sensor and published a <a href="https://blog.eldruin.com/ccs811-indoor-air-quality-sensor-driver-in-rust/">blog post</a> including example setups.</li> +<li><a href="https://github.com/diondokter">@diondokter</a> released a first version of <a href="https://crates.io/crates/device-driver">device-driver</a> which can aid driver developers in developing device drivers. For now only register interfaces are supported as is laid out in <a href="https://twitter.com/Geoxion/status/1303849776665026561">this twitter thread</a>.</li> +<li><a href="https://twitter.com/dbrgn/">@dbrgn</a> released version 0.2 of the <a href="https://docs.rs/debouncr/">debouncr</a> crate. It now supports stateful debouncing, meaning that the user can now choose whether every bouncing→stable transition should be detected as an edge, or only high↔︎low transitions.</li> +</ul> +<!-- LINK SECTION FOR HIGHLIGHTS AND EMBEDDED PROJECTS --> +<h2 id="get-involved">Get Involved</h2> +<p>This is the 26th newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>!</p> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2021-03-16-newsletter-27.md">the next newsletter</a>, send us a pull request!</p> + + + + + The Embedded Working Group Newsletter - 25 + Mon, 24 Aug 2020 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-25/ + https://blog.rust-embedded.org/newsletter-25/ + <p>This is the 25th newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>As a note, some of these stories have happened over the past months. We're still working on catching up, but wanted to share them with you!</p> +<p>Discuss on <a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>, <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-25/47744">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1298004492475150338">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/ifxv2h/the_embedded_working_group_newsletter_25/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2020-08-31-newsletter-26.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li><a href="http://github.com/braun-embedded">@hannobraun</a> wrote an <a href="https://braun-embedded.com/dw1000/">article about his DW1000 driver</a>.</li> +<li><a href="https://github.com/andre-richter">@andre-richter</a> added a new tutorial to the <a href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials">Operating System development tutorials in Rust on the Raspberry Pi</a> series: +<ul> +<li><a href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/tree/master/14_exceptions_part2_peripheral_IRQs">Tutorial 14: Exceptions Part 2: Peripheral IRQs</a> - Including drivers for the BCM and GICv2 interrupt controllers.</li> +</ul> +</li> +<li>In recent nightlies,<code>rust-std</code> support for the two <code>bare-metal</code> <code>aarch64</code> targets <a href="https://github.com/rust-lang/rust/pull/68334">has landed</a>. +<ul> +<li>Add them using <code>rustup target add aarch64-unknown-none-softfloat</code> or <code>rustup target add aarch64-unknown-none</code>.</li> +<li><a href="https://github.com/rust-embedded/rust-raspberrypi-OS-tutorials/commit/c4f9432e131f6aa6dd58b9ba795d67ec3bfd3c7f">See it in action here</a> for building a kernel without the need for third-party tools like <code>xbuild</code> or <code>xargo</code>.</li> +</ul> +</li> +<li><a href="https://github.com/therealprof">@therealprof</a> wrote an <a href="https://therealprof.github.io/blog/usb-c-pill-part1/">introduction article about the &quot;USB-C pill&quot;</a>.</li> +<li><a href="https://github.com/bobmcwhirter">@bobmcwhirter</a> wrote an article about using an <a href="https://blog.drogue.io/wifi-offload/">ESP8266 as a WiFi offload with an STM32F401RE</a></li> +<li><a href="https://ferrous-systems.com">Ferrous Systems</a> released <a href="https://ferrous-systems.com/blog/defmt/">defmt</a>, a highly efficient Rust logging framework for embedded devices</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<ul> +<li><a href="https://twitter.com/Rubberduck203">@rubberduck203</a> released the experimental <a href="https://crates.io/crates/switch-hal">switch-hal crate</a>, which provides a zero-cost abstraction over Active High/Active Low GPIO, allowing application developers to more clearly express their intent and for drivers to avoid making runtime decisions about driving a line high or low based on the pin's active level.</li> +<li><a href="https://twitter.com/Rubberduck203">@rubberduck203</a> has also released the <a href="https://crates.io/crates/stm32f3-discovery">stm32f3-discovery board support crate</a> as an alternative to the unmaintained <code>f3</code> crate.</li> +<li>The <a href="https://github.com/rubberduck203/stm32f3-discovery-quickstart/">stm32f3-discovery-quickstart</a> template has been updated to utilize both the <a href="https://crates.io/crates/stm32f3-discovery">stm32f3-discovery board support crate</a> and the <a href="https://crates.io/crates/switch-hal">switch-hal crate</a>. It also now includes VS Code tasks for cleaning, building examples, and building in release mode.</li> +<li><a href="https://github.com/proman21">@proman21</a> has released a beta version of <a href="https://github.com/proman21/samd-timer/">samd-timer</a>, an abstraction for the Timer peripherals present on Atmel SAM microcontrollers. This library provides lower-level control over these timers than <a href="https://github.com/atsamd-rs/atsamd/">atsamd-hal</a>, while remaining compatible with the HAL clock system.</li> +<li><a href="https://github.com/dbrgn">@dbrgn</a> and <a href="https://github.com/rnestler">@rnestler</a> released a first version of the <a href="https://docs.rs/shtcx/">shtcx</a> embedded-hal driver for Sensirion SHTCx series humidity/temperature sensors. The driver is feature-complete, but currently supports only a blocking API. The crate will be updated with an alternative non-blocking API soon.</li> +<li><a href="https://github.com/ra-kete">@ra-kete</a> released the <a href="https://crates.io/crates/microfft">microfft crate</a>, a library for computing fast fourier transforms on embedded devices.</li> +<li><a href="https://github.com/dajamante">@dajamante</a> added an <a href="https://github.com/Dajamante/avr-car">obstacle avoiding robot</a> with more <a href="https://github.com/Dajamante/avr-car/blob/master/article.md">details in this article</a>.</li> +<li><a href="https://github.com/therealprof">@therealprof</a> released the <a href="https://crates.io/crates/display-interface">display-interface crate</a>, an abstraction over the different possibilities to drive a display.</li> +<li><a href="https://github.com/bugadani">@bugadani</a> released the <a href="https://github.com/bugadani/embedded-text">embedded-text crate</a>, a text rendering library built on top of <a href="https://github.com/jamwaffles/embedded-graphics">embedded-graphics</a>.</li> +<li><a href="https://github.com/bobmcwhirter">@bobmcwhirter</a> released the <a href="https://crates.io/crates/drogue-esp8266">drogue-esp8266</a>, a WiFi-offload embedded-nal implementation crate.</li> +</ul> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2020-08-31-newsletter-26.md">the next newsletter</a>, we would love to show it off!</p> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">47</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">33</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">38</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">52</td><td align="left">+7</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">85</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">41</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip-1">no-std crates WIP</a></td><td align="left">WIP</td><td align="left">3</td><td align="left">0</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 24 + Mon, 17 Aug 2020 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-24/ + https://blog.rust-embedded.org/newsletter-24/ + <p>This is the 24th newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>We've been on an unscheduled hiatus for the past six months or so, but it's time for us to return! Today we're doing a quick fast-forward of all of the great things that have been released while we've been on break.</p> +<p>For the next few weeks, we'll be doing a special &quot;catch-up&quot; schedule, meaning we'll be releasing articles weekly until we've caught up with all of the recent changes. Once we've wrapped that up, we'll go back to a regular monthly cadence.</p> +<p>We've also added a few new folks to the <a href="https://github.com/rust-embedded/wg#the-resources-team">resources team</a> say hello to <a href="https://github.com/hargonix/">@hargoniX</a>, <a href="https://github.com/eldruin">@eldruin</a> and <a href="https://github.com/kalkyl">@kalkyl</a> who will be helping out with the newsletter!</p> +<p>Want to have your project mentioned? Make sure you <a href="https://github.com/rust-embedded/blog/edit/master/content/2020-08-24-newsletter-25.md">let us know</a> so we can include it!</p> +<p>Discuss on <a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>, <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-24/47405">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1295330780688809986">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/ibcvnz/the_embedded_working_group_newsletter_24/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2020-08-24-newsletter-25.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="the-great-catch-up">The Great Catch-Up!</h2> +<p>Here's a whirlwind overview of some of the things that have been released and changed over the past six months or so! +We'll cover some of these updates in more detail over the coming weeks!</p> +<h3 id="renames">Renames</h3> +<ul> +<li>The RTFM framework has been renamed to RTIC - Real Time Interrupt-driven Concurrency!</li> +</ul> +<h3 id="resources">Resources</h3> +<ul> +<li>We've added <a href="https://os.phil-opp.com/">phil's OS blog</a> to our list of resources</li> +<li><a href="https://github.com/hargonix">@hargoniX</a> has added a blog post on <a href="https://hboeving.dev/blog/rust-2c-driver-p1/">embedded driver writing</a></li> +</ul> +<h3 id="tooling">Tooling</h3> +<ul> +<li>the <a href="https://probe.rs">probe-rs organization</a> has added a lot of wonderful new tooling, including <a href="https://crates.io/crates/cargo-flash">cargo-flash</a> and <a href="https://crates.io/crates/cargo-embed">cargo-embed</a></li> +<li><a href="https://crates.io/crates/cargo-hf2">cargo-hf2</a> for &quot;A small cargo subcommand to download cargo builds to Microsoft UF2 bootloaders via HID USB&quot;</li> +<li>The <a href="https://github.com/knurling-rs/meta">Knurling-rs</a> project for embedded tooling has kicked off by releasing <a href="https://github.com/knurling-rs/probe-run">probe-run</a></li> +</ul> +<h3 id="bindings">Bindings</h3> +<ul> +<li><a href="https://crates.io/crates/freertos-rust">FreeRTOS-rust</a> as RTOS bindings (not to be confused with <a href="https://crates.io/crates/freertos_rs">FreeRTOS.rs</a> )</li> +</ul> +<h3 id="new-possibilities">New Possibilities</h3> +<ul> +<li>It is <a href="https://ferrous-systems.com/blog/stable-async-on-embedded/">now possible</a> to run <a href="https://blog.rust-lang.org/2020/06/04/Rust-1.44.0.html">async/await on embedded</a>!</li> +<li>Applications can now be compiled for <a href="https://github.com/rust-lang/rust/issues/44052#issuecomment-663394401">AVR in mainline Rust nightly builds</a>!</li> +</ul> +<h3 id="pacs">PACs</h3> +<ul> +<li><a href="https://crates.io/crates/msp430fr2355">msp430fr2355 PAC</a> has been added</li> +<li><a href="https://crates.io/crates/ambiq-apollo1-pac">ambiq-apollo1-pac</a>, <a href="https://crates.io/crates/ambiq-apollo2-pac">ambiq-apollo2-pac</a> and <a href="https://crates.io/crates/ambiq-apollo3p-pac">ambiq-apollo3p-pac</a> have been added</li> +</ul> +<h3 id="hals">HALs</h3> +<ul> +<li><a href="https://crates.io/crates/msp430fr2x5x-hal">msp430fr2x5x-hal</a> has been added</li> +</ul> +<h3 id="bsps">BSPs</h3> +<ul> +<li>a <a href="https://crates.io/crates/onebitsy">BSP for the onebitsy</a></li> +<li>Several Adafruit BSPs: +<ul> +<li><a href="https://crates.io/crates/metro_m0">metro_m0</a></li> +<li><a href="https://crates.io/crates/pygamer">pygamer</a></li> +<li><a href="https://crates.io/crates/feather-f405">feather-f405</a></li> +<li><a href="https://crates.io/crates/feather_m0">feather_m0</a></li> +<li><a href="https://crates.io/crates/feather_m4">feather_m4</a></li> +<li><a href="https://crates.io/crates/circuit_playground_express">circuit_playground_express</a></li> +<li><a href="https://crates.io/crates/edgebadge">edgebadge</a></li> +<li><a href="https://crates.io/crates/gemma_m0">gemma_m0</a></li> +<li><a href="https://crates.io/crates/itsybitsy_m0">itsybitsy_m0</a></li> +<li><a href="https://crates.io/crates/itsybitsy_m4">itsybitsy_m4</a></li> +<li><a href="https://crates.io/crates/trinket_m0">trinket_m0</a></li> +</ul> +</li> +<li>Several arduino BSPs: +<ul> +<li><a href="https://crates.io/crates/arduino_mkrvidor4000">arduino_mkrvidor4000</a></li> +<li><a href="https://crates.io/crates/arduino_mkrzero">arduino_mkrzero</a></li> +<li><a href="https://crates.io/crates/arduino_nano33iot">arduino_nano33iot</a></li> +</ul> +</li> +<li>The <a href="https://crates.io/crates/samd21_mini">samd21_mini BSP</a></li> +<li>The <a href="https://crates.io/crates/xiao_m0">xiao_m0 BSP</a></li> +</ul> +<h3 id="general-abstraction-crates">General abstraction crates</h3> +<ul> +<li>The <a href="https://github.com/BlackbirdHQ/atat">atat crate</a> for parsing AT commands</li> +</ul> +<h3 id="drivers">Drivers</h3> +<ul> +<li><a href="https://crates.io/crates/adxl313">ADXL313</a></li> +<li><a href="https://crates.io/crates/anyleaf">AnyLeaf</a></li> +<li><a href="https://crates.io/crates/dht-sensor">dht-sensor</a></li> +<li><a href="https://crates.io/crates/max6955">MAX6955</a></li> +<li><a href="https://crates.io/crates/microchip-eeprom-25lcxx">MCP25LCXX</a></li> +<li><a href="https://crates.io/crates/microchip-tc72r-rs">TC72</a></li> +<li><a href="http://crates.io/crates/st7789">ST7789</a></li> +<li><a href="https://crates.io/crates/dw1000">DW1000</a></li> +<li><a href="https://crates.io/crates/adafruit-7segment">Adafruit-7segment</a></li> +</ul> +<h3 id="wip-drivers">WIP Drivers</h3> +<ul> +<li><a href="https://crates.io/crates/bmi160">BMI160</a></li> +<li><a href="https://crates.io/crates/epd-waveshare">epd-waveshare</a></li> +<li><a href="https://crates.io/crates/hrs3300">HRS3300</a></li> +<li><a href="https://crates.io/crates/hdc20xx">HDC20xx</a></li> +<li><a href="https://crates.io/crates/isl29125">ISL29125</a></li> +<li><a href="https://crates.io/crates/lsm9ds1">LSM9DS1</a></li> +<li><a href="https://crates.io/crates/ltr-559">ltr-559</a></li> +<li><a href="https://github.com/rafaelcaricio/lvgl-rs">lvgl</a></li> +<li><a href="https://github.com/eldruin/max170xx-rs">MAX170xx</a></li> +<li><a href="https://crates.io/crates/max3010x">MAX3010x</a></li> +<li><a href="https://crates.io/crates/mcp4725">MCP4725</a></li> +<li><a href="https://crates.io/crates/mlx9061x">MLX9061x</a></li> +<li><a href="https://github.com/BlackbirdHQ/ublox-cellular-rs">ublox-cellular-rs</a></li> +</ul> +<h3 id="no-std-crates">no_std crates</h3> +<ul> +<li><a href="https://crates.io/crates/debouncr">debouncr</a></li> +<li><a href="https://crates.io/crates/embedded-crc-macros">embedded-crc-macros</a></li> +<li><a href="https://crates.io/crates/embedded-websocket">embedded-websocket</a></li> +<li><a href="https://crates.io/crates/endian_codec">endian_codec</a></li> +<li><a href="https://crates.io/crates/gdbstub">gdbstub</a></li> +<li><a href="https://crates.io/crates/microfft">microfft</a></li> +<li><a href="https://crates.io/crates/smbus-pec">smbus-pec</a></li> +</ul> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">46</td><td align="left">+4</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">33</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">38</td><td align="left">+17</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">45</td><td align="left">+9</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">84</td><td align="left">+13</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">41</td><td align="left">+7</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip-1">no-std crates WIP</a></td><td align="left">WIP</td><td align="left">3</td><td align="left">+0</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 23 + Sat, 01 Feb 2020 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-23/ + https://blog.rust-embedded.org/newsletter-23/ + <p>This is the 23rd newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>, <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-23/37708">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1223606976527114240">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/ex6ike/the_23rd_embedded_working_group_newsletter/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2020-02-29-newsletter-24.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li><a href="https://github.com/lupyuen">@lupyuen</a> has been doing very cool things with Rust and the PineTime smart watch - see <a href="https://medium.com/@ly.lee/porting-druid-rust-widgets-to-pinetime-smart-watch-7e1d5a5d977a">Porting druid Rust Widgets to PineTime Smart Watch</a> and <a href="https://medium.com/@ly.lee/optimising-pinetimes-display-driver-with-rust-and-mynewt-3ba269ea2f5c">Optimising PineTime’s Display Driver with Rust and Mynewt</a>.</li> +<li><a href="https://github.com/rust-embedded/rust-raspi3-OS-tutorials/tree/master/13_integrated_testing">The Raspberry Pi OS dev tutorial</a> got a new chapter on Kernel Unit, Integration and Console tests using QEMU</li> +<li>Google announced <a href="https://security.googleblog.com/2020/01/say-hello-to-opensk-fully-open-source.html">OpenSK</a>, an open source security key based on <a href="https://www.tockos.org/">TockOS</a> in Embedded Rust</li> +<li><a href="https://ferrous-systems.com">Ferrous Systems</a> announced the second iteration of <a href="https://oxidizeconf.com">Oxidize</a>, an embedded Rust conference in Berlin Germany, will take place in July of 2020. Read the <a href="https://ferrous-systems.com/blog/oxidize-2020/">Announcement Blog Post</a> for more details</li> +<li><a href="https://github.com/PLCnext/">PLCnext</a> shared a <a href="https://github.com/PLCnext/rust-sample-runtime">Sample Rust Runtime</a> and a how-to guide for running deterministic real-time Rust +on an industrial Linux device</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<ul> +<li><a href="https://github.com/almindor">@almindor</a> released a platform-agnostic <a href="https://crates.io/crates/max7219">driver for the MAX7219</a> segmented display and published a <a href="https://blog.katona.me/2019/12/22/MAX7219-segmented-display-driver-in-Rust/">blog post</a> including a picture of an example setup.</li> +<li><a href="https://github.com/dbrgn/embedded-hal-mock/">embedded-hal-mock</a> has released 0.7.1 on crates.io with <a href="https://docs.rs/embedded-hal-mock/0.7.1/embedded_hal_mock/i2c/index.html#testing-error-handling">support for error expectations</a>. This means that you can now unit test the error handling logic of your embedded-hal driver crates.</li> +<li><a href="https://twitter.com/Rubberduck203">@rubberduck203</a> added VS Code configurations to the <a href="https://github.com/rust-embedded/cortex-m-quickstart">cortex-m-quickstart</a> and published a <a href="https://christopherjmcclellan.wordpress.com/2019/12/31/debugging-rust-cortex-m-with-vs-code-take-2/">blog post</a>. Debugging Cortex-M projects in editor with VS Code now works out of the box.</li> +<li><a href="https://twitter.com/Rubberduck203">@rubberduck203</a> released a <a href="https://github.com/rubberduck203/stm32f3-discovery-quickstart">quickstart template for the STM32F3DISCOVERY board</a> with pre-configured linker script &amp; build targets.</li> +<li><a href="https://github.com/jkristell">@jkristell</a> released version 0.6 of the <a href="https://github.com/jkristell/infrared">Infrared</a> crate and published a <a href="https://jott.se/blog/infrared">blog post</a> on how to add remote control support to an embedded Rust project.</li> +<li>Steven Walter gave a talk at <a href="http://www.rust-belt-rust.com/">Rust Belt Rust</a> about <a href="https://www.youtube.com/watch?v=EoV94cg_Tug">introducing Rust into an existing embedded Linux project</a>.</li> +<li><a href="https://github.com/arosspope">@arosspope</a> released an implementation of <a href="https://github.com/arosspope/usnake">the game snake for the stm32f3 discovery board</a> using RTFM.</li> +<li>Rust firmware for <a href="https://github.com/quartiq/stabilizer">Stabilizer</a> has been released. <a href="https://github.com/sinara-hw/Stabilizer/wiki">Stabilizer</a> is an open hardware, high speed, multi channel, STM32H743 based feedback controller for Quantum Physics applications. The firmware features <a href="https://github.com/rtfm-rs/cortex-m-rtfm">RTFM v0.5</a> and <a href="https://github.com/m-labs/smoltcp">smoltcp</a>. Support for several analog front end mezzanines like current stabilization or Pound-Drever-Hall locks is being developed.</li> +<li><a href="https://twitter.com/42technology">@42technology</a> announced they have ported Cloudflare's Rust-language <a href="https://en.wikipedia.org/wiki/QUIC">QUIC</a> library (known as '<a href="https://github.com/cloudflare/quiche">quiche</a>') to the Nordic nRF9160, producing possibly the world's first QUIC demonstration on that platform.</li> +<li><a href="https://github.com/atsamd-rs/atsamd">atsamd-hal</a> 0.8.2 released, which includes work by <a href="https://github.com/twitchyliquid64">@twitchyliquid64</a> and <a href="https://github.com/jacobrosenthal">@jacobrosenthal</a> implementing USB support for SAMD21 and SAMD51 devices.</li> +<li><a href="https://github.com/Disasm">@Disasm</a> released <a href="https://github.com/riscv-rust/longan-nano/">longan-nano</a> and <a href="https://github.com/riscv-rust/seedstudio-gd32v">seedstudio-gd32v</a> board support crates with examples for the corresponding RISC-V boards.</li> +</ul> +<!-- LINK SECTION FOR HIGHLIGHTS AND EMBEDDED PROJECTS --> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2020-02-29-newsletter-24.md">the next newsletter</a>, we would love to show it off!</p> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">42</td><td align="left">+3</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">32</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">21</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">36</td><td align="left">+3</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">71</td><td align="left">+4</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">34</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip-1">no-std crates WIP</a></td><td align="left">WIP</td><td align="left">3</td><td align="left">0</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 22 + Wed, 01 Jan 2020 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-22/ + https://blog.rust-embedded.org/newsletter-22/ + <p>This is the 22nd newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>, <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-22/36377">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1212379226231492614">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/eiisk9/the_22nd_embedded_working_group_newsletter/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2020-01-30-newsletter-23.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li><a href="https://github.com/andre-richter">@andre-richter</a> added a new tutorial for the <code>Operating System development tutorials in Rust on the Raspberry Pi</code> series: +<ul> +<li>Tutorial 13: <a href="https://github.com/rust-embedded/rust-raspi3-OS-tutorials/tree/master/13_integrated_testing">Integrated Testing</a> - Kernel <code>Unit tests</code>, <code>Integration tests</code> and <code>Console tests</code> using <code>QEMU</code>.</li> +</ul> +</li> +<li><a href="https://twitter.com/bitshiftmask">@jamesmunns</a> sketched out a few introductory notes about foundational Embedded Rust Crates like <code>r0</code>, <code>cortex-m</code>, <code>PAC</code>s, and <code>HAL</code>s. See <a href="https://twitter.com/bitshiftmask/status/1210714309124186112">part 1</a> and <a href="https://twitter.com/bitshiftmask/status/1211031300531986432">part 2</a> on Twitter!</li> +<li><a href="https://twitter.com/bitshiftmask">@jamesmunns</a> wrote about the cost of <a href="https://jamesmunns.com/blog/fmt-unreasonably-expensive/">Formatting in Embedded Rust</a> as part of the <a href="https://twitter.com/hashtag/rust2020">#rust2020</a> effort, and how to reduce code size while maintaining panic debug-ability</li> +<li><a href="https://github.com/craigjb">Craig Bishop</a> wrote an overview of <a href="https://craigjb.com/2019/12/31/stm32l0-rust/">Getting Started on the STM32L0</a>, which contains an excellent breakdown of what makes up an Embedded Rust project</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<ul> +<li> +<p><a href="https://github.com/andre-richter">@andre-richter</a> released v0.1.0 of <a href="https://crates.io/crates/qemu-exit"><code>qemu-exit</code></a>. This library provides functions to gracefully exit a running QEMU session from within your Rust binary with an user-defined exit code. This can be used for unit or integration tests that run inside QEMU. Currently supports <code>aarch64</code> and <code>x86_64</code> architectures.</p> +</li> +<li> +<p><a href="https://github.com/eldruin">@eldruin</a> released a platform-agnostic <a href="https://crates.io/crates/si4703">driver for the Si4703</a> FM radio turner (receiver) and published a <a href="https://blog.eldruin.com/si4703-fm-radio-receiver-driver-in-rust/">blog post</a> including a picture of an example setup.</p> +</li> +<li> +<p><a href="https://github.com/eldruin">@eldruin</a> released a platform-agnostic <a href="https://crates.io/crates/pwm-pca9685">driver for the PCA9685</a> PWM LED/Servo controller driver and published a <a href="https://blog.eldruin.com/pca9685-pwm-led-servo-controller-driver-in-rust/">blog post</a> including a video of the device controlling RGB LEDs and several Servo motors simultaneously.</p> +</li> +<li> +<p><a href="https://github.com/eldruin">@eldruin</a> released a platform-agnostic <a href="https://crates.io/crates/veml6030">driver for Vishay's VEML6030 and VEML7700</a> ambient light sensors and published a <a href="https://blog.eldruin.com/veml6030-ambient-light-sensor-driver-in-rust/">blog post</a> about it.</p> +</li> +<li> +<p><a href="https://github.com/nickray">@nickray</a> released <code>salty</code> (<a href="https://api.salty.rs">API</a>, <a href="https://book.salty.rs">book</a>, <a href="https://code.salty.rs">code</a>), a library for fast Ed25519 signatures on Cortex-M4 and Cortex-M33 microcontrollers. It presents the <code>ed25519-dalek</code> API, but is self-contained and uses the fastest currently published field operations implementation, due to Bjoern Haase, based on the <code>UMAAL</code> DSP instruction <code>(a: u32, b: u32, c: u32, d: u32) -&gt; (a * b + c + d): u64</code>. Testing is done on the <code>musca-b1</code> Cortex-M33 microcontroller, simulated in QEMU v4. Additionally, a C API is included.</p> +</li> +<li> +<p><a href="https://github.com/nickray">@nickray</a> released <code>littlefs2</code> (<a href="https://docs.rs/littlefs2">API</a>, <a href="https://github.com/nickray/littlefs2">code</a>), an idiomatic Rust API for the <a href="https://github.com/ARMmbed/littlefs"><code>littlefs</code></a> filesystem for microcontrollers, modeled after <code>std::fs</code>. The upstream library claims to be resilient against power-loss, and supports features like dynamic wear-leveling with bad block detection, inline files for efficient use of storage, and custom user attributes on files and directories.</p> +</li> +<li> +<p><a href="https://github.com/nickray">@nickray</a> released <code>nisty</code> (<a href="https://docs.rs/nisty">API</a>, <a href="https://github.com/nickray/nisty">code</a>), a companion library to <code>salty</code> with similar API, but for NIST P-256 signatures on Cortex-M4 and Cortex-M33 microcontrollers. It offers deterministic signatures, idiomatic conversions, and uses <a href="https://github.com/kmackay/micro-ecc"><code>micro-ecc</code></a> as backend implementation, which also has <code>UMAAL</code> DSP instruction optimizations.</p> +</li> +<li> +<p><a href="https://github.com/probe-rs/probe-rs">probe-rs</a> has finally released 0.3.0 on crates.io. Its <code>cargo-flash</code> extension has improved by a large margin! Flashing speed has increased 10x and it is possible to virtually flash any ARM core thanks to the use of CMSIS-Pack flash algorithms.</p> +<ul> +<li>You can create your own target description from a CMSIS-Pack with the use of <a href="https://github.com/probe-rs/target-gen">target-gen</a></li> +<li>Built in algorithms support the <strong>nRF51xxx, nRF91xxx, nRF52xxx, STM32F1xx, LPC8xx and LPC55S66 and LPC55S69</strong> series using a <strong>DAPLink</strong> or an <strong>ST-Link</strong>.</li> +<li>Please file a <a href="https://github.com/probe-rs/probe-rs/pulls">PR</a> if you extracted an algorithm for your chip and tested it!</li> +<li>We are looking for contributors. We have lots of non-ARM-specific stuff to do as well, such as improving erroring, useability and documentation including a webpage on the newly acquired <a href="https://probe.rs">probe.rs</a> domain.</li> +<li>Join us on <a href="https://matrix.to/#/#probe-rs:matrix.org">#probe-rs:matrix.org</a></li> +<li>0.4.0 will finally feature GDB support :) Stay tuned!</li> +</ul> +</li> +</ul> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2020-01-30-newsletter-23.md">the next newsletter</a>, we would love to show it off!</p> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">39</td><td align="left">+7</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">31</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">19</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">33</td><td align="left">+3</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">67</td><td align="left">-2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">32</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip-1">no-std crates WIP</a></td><td align="left">WIP</td><td align="left">3</td><td align="left">0</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 21 + Sat, 30 Nov 2019 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-21/ + https://blog.rust-embedded.org/newsletter-21/ + <p>This is the 21st newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://matrix.to/#/#rust-embedded:matrix.org">#rust-embedded:matrix.org</a>, <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-21/35191">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1200762672117166081">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/e3w3bz/the_21st_embedded_working_group_newsletter/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-12-26-newsletter-22.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>Don't forget to join our <a href="https://matrix.to/#/#rust-embedded:matrix.org">Community Chat on Matrix</a>, with more than 250 Embedded Rustaceans!</li> +<li><a href="https://github.com/andre-richter">@andre-richter</a> added two new tutorials for the <code>Operating System development tutorials in Rust on the Raspberry Pi</code> series: +<ul> +<li>Tutorial 11: <a href="https://github.com/rust-embedded/rust-raspi3-OS-tutorials/tree/master/11_virtual_memory">Virtual Memory</a></li> +<li>Tutorial 12: <a href="https://github.com/rust-embedded/rust-raspi3-OS-tutorials/tree/master/12_cpu_exceptions_part1">CPU Exceptions: Part 1</a></li> +</ul> +</li> +<li><a href="https://github.com/jamesmunns">@jamesmunns</a> streamed some work on developing interrupt and panic code <a href="https://www.youtube.com/watch?v=KT6VnwuouPY">on youtube</a></li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<ul> +<li><a href="https://github.com/eldruin">@eldruin</a> released a platform-agnostic <a href="https://crates.io/crates/opt300x">driver for the OPT300x</a> family of ambient light sensors and published a <a href="https://blog.eldruin.com/opt300x-ambient-light-sensor-driver-in-rust/">blog post</a> with a picture of the device taking lux measurements.</li> +<li>@mciantyre published a custom runtime and peripheral access crates to support development on the Teensy 4. Check out <a href="https://github.com/mciantyre/teensy4-rs">the repo</a> to see how it works, discuss the approach, and try it out.</li> +<li><a href="https://github.com/japaric">@japaric</a> released version v0.1.0 of <a href="https://crates.io/crates/ufmt/0.1.0"><code>ufmt</code></a>, a smaller (6-40x) and faster (2-9x) alternative to <code>core::fmt</code> that's free of dynamic dispatch, recursion (where possible) and panicking branches. <code>ufmt</code> is <em>not</em> a drop-in replacement for <code>core::fmt</code> but it provides <code>uDebug</code> and <code>uDisplay</code> traits and a family of <code>uwrite!</code> macros. In this release the <code>uwrite!</code> macros, and the rest of the crate, work on the stable channel.</li> +<li><a href="https://github.com/jamesmunns">@jamesmunns</a> released two embedded crates: +<ul> +<li><a href="https://crates.io/crates/panic-persist"><code>panic-persist</code></a>: A panic handler crate inspired by <code>panic-ramdump</code> that logs panic messages to a region of RAM defined by the user, allowing for discovery of panic messages post-mortem using normal program control flow.</li> +<li><a href="https://crates.io/crates/cmim"><code>cmim</code></a>, or Cortex-M Interrupt Move: A crate for Cortex-M devices to move data to interrupt context, without needing a critical section to access the data within an interrupt, and to remove the need for the &quot;mutex dance&quot;</li> +</ul> +</li> +<li><a href="https://github.com/tarcieri">@tarcieri</a> released <a href="https://docs.rs/aead"><code>aead</code></a> v0.2, providing generic traits for Authenticated Encryption with Associated Data (AEAD) ciphers, which now supports <a href="https://docs.rs/chacha20poly1305/0.3.0/chacha20poly1305/#in-place-usage-eliminates-alloc-requirement">ergonomic <code>alloc</code>-free operation</a> via an integration with the <a href="https://docs.rs/heapless"><code>heapless</code></a> crate. This trait is now implemented by <a href="https://github.com/rustcrypto/aeads#crates">several crates providing pure Rust implementations of AEAD modes</a> which may be interesting to embedded users seeking to encrypt/data data in <code>heapless</code> buffers, including the <a href="https://docs.rs/chacha20poly1305/"><code>chacha20poly1305</code></a> and <a href="https://docs.rs/aes-siv/"><code>aes-siv</code></a> crates (and forthcoming support in the <a href="https://github.com/martindisch/aes-ccm/issues/2"><code>aes-ccm</code></a> crate).</li> +</ul> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-12-26-newsletter-22.md">the next newsletter</a>, we would love to show it off!</p> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">32</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">29</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">19</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">30</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">69</td><td align="left">-1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">30</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip-1">no-std crates WIP</a></td><td align="left">WIP</td><td align="left">3</td><td align="left">0</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 20 + Tue, 05 Nov 2019 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-20/ + https://blog.rust-embedded.org/newsletter-20/ + <p>This is the 20th newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-20/34341">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1191816369798561793">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/ds55s6/the_20th_embedded_rust_working_group_newsletter/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-11-28-newsletter-21.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="embedded-projects">Embedded Projects</h2> +<ul> +<li><a href="https://github.com/ctron/">Jens Reimann</a> has assembled a <a href="https://github.com/ctron/rust-esp-container/">docker image</a> for developing Rust on the ESP8266 and ESP32 series of devices, including stable <code>alloc</code> support!</li> +</ul> +<ul> +<li><a href="http://github.com/lucasbrendel/">Lucas Brendel</a> working on peripheral access crates as well as a shared embedded HAL for the Infineon XMC4 series of microcontrollers in the <a href="https://github.com/xmc-rs/">xmc-rs organization</a>. Peripheral access crates are available and the HAL is in the very early stages of development.</li> +</ul> +<ul> +<li><a href="https://www.42technology.com">42 Technology</a> have published the source code for their Nordic <a href="https://github.com/42-technology-ltd">nRF9160 demonstration application</a>, along with a Rust crate which wraps up Nordic's proprietary C driver library. They also have a piece comparing Embedded Rust and Embedded C published in the German language magazine <a href="https://www.iot-design.de/allgemein/robuste-entwicklung-mit-rust/">IOT Design</a> this month.</li> +</ul> +<ul> +<li><a href="https://github.com/thejpster">theJPster</a>'s <a href="https://github.com/thejpster/monotron">Monotron</a> got a write-up in <a href="https://hackaday.com/2019/10/05/the-monotron-a-rusty-retrocomputer/">Hackaday</a>. Moves are also afoot for a next-generation Monotron - codename <a href="https://github.com/Neotron-Compute/Neotron-Book/blob/master/src/SUMMARY.md">Neotron 1000</a> - complete with a book! Check it out if you're interested developing a modern-day version of CP/M, written in Rust.</li> +</ul> +<ul> +<li><a href="https://github.com/probe-rs/probe-rs">probe-rs</a> finally has released on crates.io. The library enables you to inspect, debug and flash ARM cores. Flash the ARM core your future embedded Rust project with <a href="https://github.com/probe-rs/probe-rs/tree/master/cargo-flash">cargo-flash</a>, fully integrated into cargo. Flashing works for the <strong>nRF51822, nRF52832, nRF52840, STMF042 and STMF429xI</strong> using a <strong>DAPLink</strong> or an <strong>ST-Link</strong>. +The upcomming 0.3.0 release will also enable your to flash any ARM core (provided an an ARM CMSIS-Pack exists in a known registry).</li> +</ul> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-11-28-newsletter-21.md">the next newsletter</a>, we would love to show it off!</p> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<!-- TODO fill in the numbers before release --> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">31</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">28</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">19</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">28</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">70</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">28</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip-1">no-std crates WIP</a></td><td align="left">WIP</td><td align="left">3</td><td align="left">+3</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 19 + Thu, 03 Oct 2019 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-19/ + https://blog.rust-embedded.org/newsletter-19/ + <p>This is the 19th newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-19/33253">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1179902902116241410">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/dcz96x/the_embedded_working_group_newsletter_19/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-10-31-newsletter-20.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="embedded-projects">Embedded Projects</h2> +<ul> +<li> +<p>Google is working on a <a href="https://www.coreboot.org/">Coreboot</a> replacement called <a href="https://github.com/oreboot/oreboot">Oreboot</a>, i.e. Coreboot minus the 'C'. Slides for a talk <a href="https://osfc.io/uploads/talk/paper/23/Oreboot.pdf">about oreboot</a> are also available.</p> +</li> +<li> +<p><a href="https://github.com/eldruin">@eldruin</a> released a platform-agnostic <a href="https://crates.io/crates/veml6075">driver for the VEML6075</a> UVA and UVB light sensor (so you can optimize your suntan) and published a <a href="https://blog.eldruin.com/veml6075-uva-uvb-uv-index-light-sensor-driver-in-rust/">blog post</a> with some pictures of the device in action.</p> +</li> +<li> +<p><a href="https://github.com/therealprof">@therealprof</a> wrote a <a href="https://therealprof.github.io/blog/digital-v1-to-digital-v2/">blog post</a> about porting an <a href="https://github.com/rust-embedded/embedded-hal/">Embedded HAL</a> impl of the digital::v1 traits for GPIOs to digital::v2.</p> +</li> +</ul> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-10-31-newsletter-20.md">the next newsletter</a>, we would love to show it off!</p> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">30</td><td align="left">+8</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">26</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">19</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">27</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">68</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">28</td><td align="left">+2</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 18 + Tue, 02 Jul 2019 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-18/ + https://blog.rust-embedded.org/newsletter-18/ + <p>This is the eighteenth newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<!-- TODO uncomment --> +<!-- Discuss on [users.rust-lang.org], [on twitter], or [on reddit]! --> +<!-- [users.rust-lang.org]: https://example.org/#TODO --> +<!-- [on twitter]: https://example.org/#TODO --> +<!-- [on reddit]: https://example.org/#TODO --> +<span id="continue-reading"></span><!-- If you want to mention something in [the next newsletter], send us a pull request! --> +<!-- [the next newsletter]: https://github.com/rust-embedded/blog/edit/master/content/${TODO}.md --> +<h2 id="the-winner-of-the-chat-vote-matrix">The winner of the Chat Vote: Matrix</h2> +<p>About a month ago, due to Mozilla's plans to discontinue Mozilla IRC, we released <a href="https://github.com/rust-embedded/wg/blob/master/rfcs/0351-chat-vote.md">RFC 0351: Chat Vote</a> and started a <a href="https://github.com/rust-embedded/wg/issues/357">public vote</a> on which chat platform to use for the Rust Embedded Working Group in the future.</p> +<p>The winner of that vote was <strong>Matrix</strong>, with 160 votes, followed by IRC with 103 votes and Discord with 74 votes. As Matrix has won by more than 3 votes, it will become the new official chat platform for Rust Embedded! The name of our new channel is <a href="https://matrix.to/#/#rust-embedded:matrix.org"><code>#rust-embedded:matrix.org</code></a>, and you can join it right now using a client like <a href="https://about.riot.im/">Riot</a>.</p> +<p>We will be trialling the new Matrix channel for the next two weeks, using it as our primary and official communication channel. After the trial period, we will evaluate any issues that came up during it, and decide how to proceed. More details about the organization of the channel can be found in the <a href="https://github.com/rust-embedded/wg/blob/matrix/ops/matrix.md">operational notes</a>.</p> +<p>Since IRC ended in second place, and it's our current platform, we'll also be establishing a bridge between the Matrix channel and IRC during the trial. This way, users have the option to continue using IRC if they so desire.</p> +<p>To avoid the administrative overhead of having to switch bridged channels later, we will soon bridge directly to the <code>#rust-embedded</code> channel on Freenode, <em>not</em> to the Mozilla IRC channel. The bridge will be activated once we've worked out the Freenode channel registration.</p> +<p>While Matrix is a federated protocol, we are not planning on running our own infrastructure for now - instead, we will be using the <code>matrix.org</code> IRC bridge, and users are free to register on <code>matrix.org</code> or any other homeserver of their choosing. If this turns out to be a problem during the trial period, we may reconsider this decision.</p> +<p>We're also looking into a static log viewer, that would allow us to publish search-engine-indexable channel logs for public reading, similar to the public logs that we currently have. This may require us to self-host a static log generator such as <a href="https://github.com/matrix-org/matrix-static">matrix-static</a>. Suggestions for other solutions are welcome!</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li> +<p>We've had a bunch of Embedded Rust related events over the past couple of months. EWG member @thejpster was at ACCU 2019 (the Association of C and C++ Users Annual Conference), in Bristol, UK, on 12 April, delivering a talk on Embeddded Rust and the Monotron. Jonathan was then speaking at the Centre for Computing History in Cambridge, UK on 18 April, followed by hosting Oxidize at the end of April! Next up, Monotron is visiting Rust Conf in Portland, USA in late August. Don't forget, if you've been giving or attending Embedded Rust talks, drop us a line for the next newsletter!</p> +</li> +<li> +<p><a href="https://rust-embedded.github.io/showcase/">The embedded showcase</a> gained 3 new entries! We are still looking for cool embedded projects to serve that can serve as examples of what can be done in Rust. Don't hesitate to <a href="https://github.com/rust-embedded/showcase#submit-your-project">submit yours</a>!</p> +</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<ul> +<li> +<p><a href="https://github.com/laanwj">@laanwj</a>, <a href="https://github.com/Disasm">@Disasm</a> and <a href="https://github.com/burrbull">@burrbull</a> are working on <a href="https://github.com/riscv-rust/k210-crates">Rust support for the Kendryte K210 RISC-V chips</a>.</p> +</li> +<li> +<p><a href="https://github.com/Disasm">@Disasm</a> and <a href="https://github.com/almindor">@almindor</a> updated <a href="https://github.com/riscv-rust/riscv-rust-quickstart">riscv-rust-quickstart</a>: now you can run Rust on the HiFive1 Rev B board.</p> +</li> +<li> +<p><a href="https://github.com/Disasm">@Disasm</a> released <a href="https://crates.io/crates/stm32-usbd">stm32-usbd</a>: a fork of <a href="https://github.com/mvirkkunen/stm32f103xx-usb">stm32f103xx-usb</a> adopted for multiple STM32 device families.</p> +</li> +</ul> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<!-- TODO fill in the numbers before release --> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">22</td><td align="left">+4</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">25</td><td align="left">+6</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">18</td><td align="left">+5</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">25</td><td align="left">+4</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">67</td><td align="left">+4</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">26</td><td align="left">+1</td></tr> +</tbody></table> + + + + + Embedded Rust in 2019 + Tue, 07 May 2019 00:00:00 +0000 + https://blog.rust-embedded.org/embedded-rust-in-2019/ + https://blog.rust-embedded.org/embedded-rust-in-2019/ + <p>It's been a busy year for many of the members of the Embedded-WG this year, and we had a chance to catch up at OxidizeConf a few weeks ago. We discussed two main things, Moving off of Mozilla IRC, and our goals for (part of) 2019.</p> +<span id="continue-reading"></span><h2 id="goals-for-2019">Goals for 2019</h2> +<p>In 2018, the Embedded WG pushed hard to get the Cortex-M targets supported as stable targets in the upstream Rust project. Since then, due to work and life responsibilities, a number of us have been particularly busy in 2019.</p> +<p>At Oxidize, we discussed what our 2019 goals should be. There were suggestions to get some the foundational level crates like <code>cortex-m</code>, <code>cortex-m-rt</code>, and tools like <code>svd2rust</code> to a &quot;1.0 state&quot;. However, while there were a number of improvements we could think of, we couldn't draw any clear lines of what it would take for us to be comfortable cutting a 1.0 release of these projects.</p> +<p>Based on the two points above, we discussed a slightly different plan: <strong>Focusing on building out the ecosystem in 2019</strong>, by building more &quot;fun&quot; stuff, like example projects, cool applications, and extracting and publishing reusable components from these projects to fill in the embedded Rust ecosystem.</p> +<p>By focusing on building out, instead of trying to perfect what we already have, we hope to find out the things we don't know we are missing, and inspire other members of the community to begin working and building with Embedded Rust. We'll keep this as a focus through the summer (until September or October 2019). This can be thought of as a parallel to the upstream <a href="https://blog.rust-lang.org/2017/05/05/libz-blitz.html">&quot;Libs Blitz&quot;</a> that the Rust project successfully completed in 2017.</p> +<p>Our weekly meetings will likely relax a bit, and will generally change focus to quickly discuss any high priority issues, then open up to a more informal &quot;show and tell&quot;, where people can discuss the things they have been building and would like to share. We hope you'll all join us to share the wonderful things you build this summer in embedded Rust!</p> +<h2 id="moving-off-mozilla-irc">Moving off Mozilla IRC</h2> +<p>At the end of April, Mozilla announced that they would be shutting down <code>irc.mozilla.org</code>. The Rust project as a whole will generally be moving on to other platforms such as Discord and Zulip.</p> +<p>The Embedded Working Group is actually one of the few (if not only) working groups that still primarily rely on IRC. We have a few hundred people who idle in the room, and tend to have fairly active discussions there, including our weekly status meetings. We have discussed moving to other platforms previously, but have been unable to get any sort of consensus on what to move to instead. Those discussions lead to a fruitful evaluation of alternatives and led to a pre-selection of suitable services.</p> +<p>To move things forward <a href="https://github.com/rust-embedded/wg/blob/master/rfcs/0351-chat-vote.md">RFC 0351 Chat Vote</a> has been proposed and accepted by the WG which was subsequently implemented by opening <a href="https://github.com/rust-embedded/wg/issues/357">voting issue</a> to poll the public opinion on this matter. Anyone with a GitHub account is invited to cast vote(s) until <strong>23:59 CEST on Sunday, 2019-06-23</strong>, the detailed rules are explained in the issue and fair discussion is very welcome.</p> + + + + + The Embedded Working Group Newsletter - 17 + Fri, 22 Mar 2019 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-17/ + https://blog.rust-embedded.org/newsletter-17/ + <p>This is the seventeenth newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-17/26551">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1109141455510097922">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/b47pl7/embedded_wg_newsletter_17_the_embedded_rust/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-04-05.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>The <a href="https://rust-embedded.github.io/showcase/">embedded showcase</a> gained its first entry! The <a href="https://github.com/TeXitoi/rusty-clock">rusty clock</a> project, an alarm clock that features pressure, temperature and humidity on an e-paper display and 5 programmable alarms. We are still looking for cool embedded projects to serve that can serve as examples of what can be done in Rust. Don't hesitate to <a href="https://github.com/rust-embedded/showcase#submit-your-project">submit</a> yours!</li> +<li><a href="https://oxidizeconf.com">OxidizeConf</a>, the first embedded Rust conference, has announced speakers! Check out <a href="https://oxidizeconf.com/schedule/">the lineup here</a>!</li> +<li><a href="https://twitter.com/antvangelder">Antoine van Gelder</a> wrote about using Peripheral Access Crates to <a href="https://flowdsp.io/blog/stm32f3-01-interrupts/">program interrupts</a> on the STM32F3 Discovery board</li> +<li><a href="https://github.com/jamesmunns">James Munns</a> gave a talk at Rust Berlin about what happens <a href="https://www.youtube.com/watch?v=RIHVoNDxNuk">before <code>main()</code></a> in embedded Rust projects</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<ul> +<li> +<p><a href="https://github.com/jjkt">@jjkt</a> is working on <a href="https://github.com/jjkt/zmu"><code>zmu</code></a>, an emulator for microcontroller based systems. Zmu is work in progress but can already emulate substantial parts of Cortex M - based MCUs core architecture features.</p> +</li> +<li> +<p><a href="https://github.com/japaric">@japaric</a> <a href="https://twitter.com/japaricious/status/1105368938018267136">released</a> <a href="https://github.com/japaric/cargo-call-stack/blob/master/CHANGELOG.md#v012---2019-03-12">v0.1.2</a> of <a href="https://crates.io/crates/cargo-call-stack/0.1.2"><code>cargo-call-stack</code></a>, a static stack usage analyzer, and published a <a href="https://blog.japaric.io/stack-analysis/">blog post</a> with details about its implementation.</p> +</li> +<li> +<p><a href="https://twitter.com/wezm">Wesley Moore</a> wrote <a href="https://www.wezm.net/technical/2019/03/sensortag-embedded-rust-coding-retreat/">a blog post</a> about getting Rust running on the TI SensorTag, see the <a href="https://git.sr.ht/%7Ewezm/sensortag">project on sourcehut</a>!</p> +</li> +<li> +<p><a href="https://github.com/tarcieri">@tarcieri</a> <a href="https://twitter.com/bascule/status/1105455019959058433">released</a> a board support crate for the <a href="https://github.com/rust-embedded/wg/issues/286">Adafruit NeoTrellis M4</a> along with a platform-independent driver for its <a href="https://github.com/atsamd-rs/atsamd/pull/47">adxl343</a> accelerometer and support for using the accelerometer to detect the <a href="https://github.com/atsamd-rs/atsamd/pull/48">device's orientation</a>.</p> +</li> +</ul> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-04-05.md">the next newsletter</a>, we would love to show it off!</p> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<!-- TODO fill in the numbers before release --> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">18</td><td align="left">~</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">19</td><td align="left">~</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">13</td><td align="left">~</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">21</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">63</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">25</td><td align="left">+1</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 16 + Wed, 06 Mar 2019 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-16/ + https://blog.rust-embedded.org/newsletter-16/ + <p>This is the sixteenth newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-16/25987">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1103416332786302977">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/ay4js3/embedded_wg_newsletter_16_not_yet_awesome/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-03-20-newsletter-17.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>Know of something that isn't awesome in embedded Rust yet? Let us know by adding it to the <a href="https://github.com/rust-embedded/not-yet-awesome-embedded-rust">Not <em>Yet</em> Awesome Embedded Rust List</a>!</li> +</ul> +<ul> +<li>The Embedded WG continues to receive <a href="https://github.com/rust-embedded/showcase#submit-your-project">submissions</a> for <a href="https://github.com/rust-embedded/showcase">the embedded showcase</a>. We are looking for cool embedded Rust projects (applications, not libraries or tools) with visuals (pictures or videos) that can serve as examples of what can be done in Rust.</li> +</ul> +<ul> +<li> +<p><a href="https://www.42technology.com">42 Technology</a> <a href="https://twitter.com/42Technology/status/1099009843967471617">announced</a> that they have got Rust running on the new Cortex-M33 powered <a href="https://www.nordicsemi.com/Products/Low-power-cellular-IoT/nRF9160">Nordic nRF9160 LTE SiP</a>.</p> +</li> +<li> +<p><a href="https://twitter.com/bitshiftmask">James Munns</a> has posted the <a href="https://www.youtube.com/watch?v=S0VI70nY6Vo">first video</a> of a <a href="https://www.youtube.com/playlist?list=PLX44HkctSkTewrL9frlUz0yeKLKecebT1">series of streams</a> developing a home wireless sensor node network. The stream focuses on teaching embedded, Rust, and IoT topics.</p> +</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<ul> +<li> +<p><a href="https://github.com/hannobraun">@hannobraun</a> published <a href="https://crates.io/crates/dwm1001"><code>dwm1001</code></a>, a board support crate for the Decawave DWM1001 module, which features a Nordic nRF52832 microcontroller and a Decawave DW1000 radio transceiver.</p> +</li> +<li> +<p>The RTFM (Real Time For the Masses) team has released <a href="https://crates.io/crates/cortex-m-rtfm"><code>cortex-m-rtfm</code></a> <a href="https://github.com/japaric/cortex-m-rtfm/blob/master/CHANGELOG.md#v042---2019-02-27">v0.4.2</a>; the most important new feature in this release are reproducible builds. They are also looking for user input on several open <a href="https://github.com/japaric/cortex-m-rtfm/issues?q=is%3Aissue+is%3Aopen+label%3ARFC">RFCs</a>.</p> +</li> +</ul> +<ul> +<li><a href="https://github.com/japaric/">@japaric</a> has <a href="https://mobile.twitter.com/japaricious/status/1102275637606338562">released</a> <a href="https://crates.io/crates/cargo-call-stack"><code>cargo-call-stack</code></a> <a href="https://github.com/japaric/cargo-call-stack/blob/master/CHANGELOG.md#v011---2019-03-03">v0.1.1</a>. <code>cargo-call-stack</code> is a static, whole program stack analysis tool; this version ships many new improvements: filtering, cleaner graphs, support for programs that use recursion, dynamic dispatch or function pointer calls, plus numerous bug fixes.</li> +</ul> +<ul> +<li><a href="https://github.com/jamwaffles">@jamwaffles</a> has published version v0.4.7 of the <a href="https://crates.io/crates/embedded-graphics/0.4.7"><code>embedded-graphics</code></a> crate. This version ships with BMP support! For more details read <a href="https://wapl.es/rust/2019/03/04/embedded-graphics-0.4.7-bmp-support.html">the announcement blog post</a>.</li> +</ul> +<ul> +<li><a href="https://github.com/tarcieri">@tarcieri</a> extracted the <a href="https://crates.io/crates/micromath"><code>micromath</code></a> crate out of the <a href="https://crates.io/crates/accelerometer"><code>accelerometer</code></a> crate. It provides a fast, embedded-friendly arithmetic library (utilizing approximations which trade precision for improved performance and reduced code size), 2D/3D vector types, and statistical analysis functions.</li> +</ul> +<ul> +<li><a href="https://github.com/shella">@shella</a> created <a href="https://github.com/atsamd-rs/atsamd/pull/55"><code>pyportal</code></a>, a board support crate for the <a href="https://www.adafruit.com/product/4116">Adafruit PyPortal</a>, which features an ILI9341 LCD touchscreen and ESP32 Wifi controller.</li> +</ul> +<p>If you have an embedded project or blog post you would like to have featured in the next Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-03-20-newsletter-17.md">the next newsletter</a>, we would love to show it off!</p> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#peripheral-access-crates">Peripheral Access Crates</a></td><td align="left">released</td><td align="left">19</td><td align="left">+3</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">18</td><td align="left">+3</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">13</td><td align="left">~</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">20</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">61</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">24</td><td align="left">+1</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 15 + Wed, 20 Feb 2019 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-15/ + https://blog.rust-embedded.org/newsletter-15/ + <p>This is the fifteenth newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-15/25481">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1098218372469268480">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/asohul/embedded_wg_newsletter_15_ewg_all_hands_the/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-03-06-newsletter-16.md">the next newsletter</a>, send us a pull request!</p> +<h2 id="embedded-at-rust-all-hands-2019">Embedded at Rust All Hands 2019</h2> +<p>Some members of the Embedded Working Group attended the Rust All Hands two weeks ago. There they had the chance to discuss the needs of the embedded community (as identified in <a href="https://github.com/rust-embedded/wg/issues/256">this survey</a>) with the different Rust teams and other WGs. Here's a summary of what was discussed:</p> +<ul> +<li>&quot;const generics&quot;</li> +</ul> +<p>The ability to parameterize over values, for example you could use this feature to write a fixed capacity <code>Vec</code>: <code>struct Vec&lt;T, const N: usize&gt; { buffer: [T; N], len: usize }</code>. There are a few compiler refactors going on that are required to land this in nightly so the status is &quot;WIP&quot;. We'll have future meetings with the compiler team to try to identify and prioritize the parts of the feature that embedded developers need.</p> +<ul> +<li><code>const fn</code> with trait bounds on stable.</li> +</ul> +<p>For example, <code>impl&lt;T&gt; Struct&lt;T&gt; where T: Trait { pub const fn new() -&gt; Self { .. } }</code>. A lengthy <a href="https://github.com/rust-rfcs/const-eval/pull/8">pre-RFC discussion</a> has concluded and a <a href="https://github.com/rust-lang/rfcs/pull/2632">proper RFC has been proposed</a>.</p> +<ul> +<li><code>core::mem::MaybeUninit</code> on stable.</li> +</ul> +<p>The plan is to stabilize a <a href="https://github.com/rust-lang/rust/issues/53491#issuecomment-463753719">minimal, uncontroversial subset of the API</a> to make this available on stable ASAP.</p> +<ul> +<li><code>std::io</code> in <code>core</code> / <code>alloc</code>.</li> +</ul> +<p>It's not possible to move <code>std::io::{Read,Write}</code> into <code>alloc</code> or <code>core</code> because the API depends on OS specific bits (e.g. <code>last_os_error</code>). An option may be to add a new set of <code>Read</code> / <code>Write</code> traits to <code>core</code>, maybe with associated error types, and then try to bridge these to <code>std::io::{Read,Write}</code> using blanket implementations / super traits, but this needs more research.</p> +<ul> +<li>fix <a href="https://github.com/rust-lang/cargo/issues/5730">rust-lang/cargo#5730</a></li> +</ul> +<p>This bug breaks <code>no_std</code> builds that use build scripts unless the authors of the build dependencies are aware of the issue and actively work around it. The Cargo team is well aware of the problem. Unfortunately, it's hard to fix and the fix will likely be opt-in because it changes the current semantics.</p> +<ul> +<li>Stabilize RFC 2282 - <a href="https://github.com/rust-lang/rust/issues/48683">&quot;Cargo profile dependencies&quot;</a></li> +</ul> +<p>This feature lets you optimize dependencies when using the <code>dev</code> profile; useful to keep <code>dev</code> binaries small enough to fit in Flash without sacrificing all debuggability. A new <a href="https://github.com/rust-lang/cargo/pull/6577"><code>build</code> profile</a> will be added to cover the configuration of proc macros, build scripts, compiler plugins and their dependencies. The new profile solves the remaining unresolved question around RFC 2282.</p> +<ul> +<li>Stabilize <code>core::arch::arm</code></li> +</ul> +<p>This module contains functions for instructions like <code>wfi</code> and <code>nop</code>, and SIMD instructions; stabilizing this removes the pressure for stable inline assembly (<code>asm!</code>). A member of the libs team is interested in this and will help us push it towards the finish line. <a href="https://github.com/rust-lang-nursery/stdsimd/pull/557">A PR in this space</a> has recently landed.</p> +<ul> +<li>Asserts in <code>const fn</code> context become compiler errors.</li> +</ul> +<p>We understood that there are still several design / implementation issues that need to be discussed before this is stabilized, but in the meantime you can use the perma-unstable <code>-Z unleash-the-miri-inside-of-you</code> flag to do all sort of stuff in const context.</p> +<ul> +<li>std-aware Cargo.</li> +</ul> +<p><a href="https://github.com/jamesmunns">@jamesmunns</a> has written a <a href="https://github.com/jamesmunns/rfcs/pull/1">pre-rfc</a> for an incremental implementation of this feature based on our discussions with people from the libs and Cargo teams and the WASM WG.</p> +<ul> +<li>Improve searching for <code>no_std</code> crates on crates.io.</li> +</ul> +<p>The backend supports searching within a category (like the <code>no_std</code> category) but there's no UI for it right now. This and fixing a bug where searches only return items found until a exact match was found (instead of returning all relevant matches) are in the crates.io team TODO list.</p> +<ul> +<li>Fix: infinite loops (e.g. <code>loop {}</code>) are lowered to an abort instruction.</li> +</ul> +<p>Ideally, this should be fixed in LLVM proper but it's hard to fix. It's possible to fix this in rustc but the fix is likely to regress the performance of <code>loop</code>s. The compiler team will follow up with two unstable flags to evaluate the (performance) impact of fixing this. The first flag applies the fix to only <code>loop</code>s in return position of divergent function and the second flag applies the fix to all <code>loop</code>s.</p> +<ul> +<li>Math support in core</li> +</ul> +<p>That is <code>0f32.sin()</code> should &quot;Just Work&quot; in <code>no_std</code> crates. There are a few questions about how to best implement this without degrading performance of applications that link to <code>std</code> (we want those to use the arch optimized routines in e.g. glibc's libm instead of the generic Rust implementation) and we need a champion to do the research.</p> +<ul> +<li>Cargo build hooks</li> +</ul> +<p>This refers to the ability to run custom code after <code>cargo build</code>. We covered use cases, their requirements and discussed the trade-offs of a more general Cargo tasks (e.g. <code>cargo $task</code>) mechanism vs a more targeted post-build script (e.g. <code>post-build.rs</code>) mechanism. Expect more news (a (pre-)RFC) from the WASM WG on this front.</p> +<ul> +<li>Slimmer <code>core::fmt</code>.</li> +</ul> +<p>The current implementation of <code>core::fmt</code> uses trait objects and function pointers to make all uses of <code>core::fmt</code> fast to compile but this makes <code>core::fmt</code> impossible to inline which makes <code>no_std</code> programs that use formatting large in (binary) size. It might be possible to leverage std-aware Cargo to fix this: we could add a Cargo feature to <code>core</code> to replace the current implementation with one that's fully inlineable but as featureful as the current one -- this should produce smaller binaries.</p> +<p>For a bit more of detail you can check the <a href="https://github.com/rust-embedded/wg/blob/master/minutes/2019-02-12.irc.log">logs</a> and <a href="https://github.com/rust-embedded/wg/blob/master/minutes/2019-02-12.md#notes-from-rust-all-hands">minutes</a> from two meetings ago; they include our notes from the All Hands</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>The Embedded WG has started receiving <a href="https://github.com/rust-embedded/showcase#submit-your-project">submissions</a> for <a href="https://github.com/rust-embedded/showcase">the embedded showcase</a>! We are looking for cool embedded Rust projects with visuals (pictures or videos) that can serve as examples of what can be done in Rust.</li> +</ul> +<ul> +<li>The <a href="https://github.com/stm32-rs">stm32-rs</a> organization has emerged to collate work on STM32 crates.</li> +</ul> +<ul> +<li>Similarly, the <a href="https://github.com/lpc-rs">lpc-rs</a> organization has emerged to work on LPC microcontrollers by NXP.</li> +</ul> +<ul> +<li>Also, the <a href="https://github.com/nrf-rs">nrf-rs</a> organization has emerged to focus on the nRF family of microcontrollers by Nordic Semiconductors.</li> +</ul> +<ul> +<li><a href="https://github.com/adamgreig">@adamgreig</a> has released an experimental PAC (Peripheral Access Crate) alternative for STM32 microcontrollers: <a href="https://github.com/adamgreig/stm32ral">stm32ral</a> that compiles in about 3 seconds. (PACs are known for compile times in the order of hundreds of seconds.)</li> +</ul> +<ul> +<li>As of <code>nightly-2019-02-05</code> the <a href="https://docs.rust-embedded.org/book/index.html">embedded Rust Book</a> is included as part of the docs shipped with the Rust toolchain! <a href="https://doc.rust-lang.org/nightly/#embedded-systems">This is the online version</a>.</li> +</ul> +<ul> +<li>The Rust compiler now has <a href="https://github.com/rust-lang/rust/pull/58406">cross compilation support for 64-bit RISCV</a>. Install the bare metal targets with <code>rustup target</code> (see <code>rustup target list</code>).</li> +</ul> +<ul> +<li>The Rust compiler also gained <a href="https://github.com/rust-lang/rust/pull/56769">compilation support for x86_64 UEFI</a> in the form of the <code>x86_64-unknown-uefi</code> target.</li> +</ul> +<ul> +<li>Formatting numbers with <code>core::fmt</code> has <a href="https://github.com/rust-lang/rust/pull/58272">become slimmer</a>. Some users have reported binary size reductions of up to 26% (800B) in ARMv6-M binaries.</li> +</ul> +<ul> +<li>The <a href="https://github.com/copterust/">copterust org</a> has <a href="https://github.com/rust-embedded/awesome-embedded-rust/pull/142">shared a bunch of driver crates</a> for interfacing sensors commonly found in flight controllers (drones).</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to <a href="https://github.com/rust-embedded/blog/edit/master/content/2019-03-06-newsletter-16.md">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li>Version v0.4.1 of <a href="https://crates.io/crates/cortex-m-rtfm">Real Time For the Masses</a> (RTFM), a concurrency framework for building real time systems, has been released! This version <a href="https://github.com/japaric/cortex-m-rtfm/pull/140">fixes a soundness hole</a> and includes a <a href="https://japaric.github.io/cortex-m-rtfm/book/ru/index.html">Russian translation</a> of the RTFM book.</li> +</ul> +<ul> +<li><a href="https://github.com/jamwaffles">@jamwaffles</a> has <a href="https://mobile.twitter.com/jam_waffles/status/1095784282189189121">published</a> a driver crate for the SH1106, an OLED display, and an <a href="https://wapl.es/electronics/rust/2019/02/13/sh1106-driver.html">introduction blog post</a> for their crate.</li> +</ul> +<ul> +<li><a href="https://github.com/thejpster">@thejpster</a> has <a href="https://www.reddit.com/r/rust/comments/ascvls/introducing_embeddedsdmmc_a_purerust_no_std_sd/">released</a> <a href="https://crates.io/crates/embedded-sdmmc"><code>embedded-sdmmc</code></a>, a pure-Rust #[no_std] SD card and FAT16/FAT32 library</li> +</ul> +<ul> +<li><a href="https://github.com/hannobraun">@hannobraun</a> has published two crates: <a href="https://crates.io/crates/ieee802154"><code>ieee802154</code></a>, a partial implementation of the IEEE 802.15.4 standard, and <a href="https://crates.io/crates/dw1000"><code>dw1000</code></a>, an embedded-hal driver for the Decawave DW1000 wireless transceiver chip.</li> +</ul> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">16</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">15</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">13</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">19</td><td align="left">+3</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">59</td><td align="left">+13</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">23</td><td align="left">+6</td></tr> +</tbody></table> + + + + + This Year in Embedded Rust + Wed, 14 Nov 2018 00:00:00 +0000 + https://blog.rust-embedded.org/this-year-in-embedded-rust/ + https://blog.rust-embedded.org/this-year-in-embedded-rust/ + <p>This year the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> set out to build the solid foundation that the +embedded Rust ecosystem requires to thrive. As we approach the date of the 2018 +edition release we reflect on our progress and share our achievements with you +in this post.</p> +<p>Discuss on <a href="https://users.rust-lang.org/t/the-embedded-wg-this-year-in-embedded-rust/22263">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1062664608538918913">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/9wz716/the_embedded_wg_this_year_in_embedded_rust/">on reddit</a>!</p> +<span id="continue-reading"></span><h2 id="embedded-rust-on-stable">Embedded Rust on stable</h2> +<p>Stability -- AKA &quot;my crate should not break when moving to a newer toolchain&quot; -- +was the single most requested feature by the embedded community during the 2018 +roadmap planning phase.</p> +<p>Embedded development has been tied to the nightly +channel since its very beginning, and the people that have been doing embedded +development for a while have endured many breaking changes. Thankfully, those +days are over: Rust 1.30 marks the first stable release where you can build +fully working embedded programs without relying on unstable features.</p> +<p>Furthermore, we now have some <a href="https://github.com/rust-lang/rust/pull/53996">unit</a> <a href="https://github.com/rust-lang/rust/pull/53190">tests</a> that check embedded code in the +compiler test suite so unintentional breakage will be caught before it makes its +way into the nightly channel.</p> +<h2 id="a-smooth-starting-point">A smooth starting point</h2> +<p>&quot;How do I get started with embedded Rust?&quot; has been a common question on IRC for +a long time. It has not been an easy question to answer, though: maintaining +documentation that relies on unstable features for a long period of time has +been an uphill battle so newcomers have often run into outdated docs.</p> +<p>But now that stable embedded Rust is here we have put together an authoritative +resource for getting started with embedded Rust: <a href="https://docs.rust-embedded.org/book">The Embedded Rust Book</a>. We +have put a lot of effort in making the first experience as frictionless as +possible with the help of <a href="https://github.com/rust-embedded/cortex-m-quickstart">templates</a> and <a href="https://github.com/rust-embedded/cargo-binutils">tooling</a>.</p> +<p>The embedded Rust book is not just a getting started guide; it's also meant +to be the document that teaches you how to effectively use the language to write +correct embedded software. We are currently amassing all our hard earned +experience into patterns and tips that we are adding to this book.</p> +<h2 id="resources-for-everyone">Resources for everyone</h2> +<p>The Embedded Rust Book is aimed at people that have some experience with +embedded development, but we recognize that Rust has great potential for +becoming people's first choice for getting their feet wet with embedded +development so we have updated and will continue to work on resources, like <a href="https://docs.rust-embedded.org/discovery">the +Discovery book</a>, that are aimed at that demographic.</p> +<p>We also recognize that the target audience for embedded Rust has different +levels of expertise with embedded systems and a varied set of interests +so we are also building advances resources like <a href="https://docs.rust-embedded.org/embedonomicon">the embedonomicon</a> +and collecting more targeted resources, like crates, in the +<a href="https://github.com/rust-embedded/awesome-embedded-rust">awesome-embedded-rust</a> list. You can find these and other of our resources in +our <a href="https://docs.rust-embedded.org">docs webpage</a>.</p> +<h2 id="an-organized-community-effort">An organized community effort</h2> +<p>All this has been accomplished with the hard work of many volunteers, both <a href="https://github.com/rust-embedded/wg#organization">WG +members</a> and other community members. The WG members, in particular, are +committed to maintaining the <a href="https://github.com/rust-embedded/wg#projects-1">core crates</a> and <a href="https://github.com/rust-embedded/wg#projects-8">documentation</a> that the +ecosystem relies on. All these resources have been taken under the umbrella of +the <a href="https://github.com/rust-embedded">rust-embedded</a> organization.</p> +<h2 id="wg-teams">WG teams</h2> +<p>The embedded space is huge: there are several architectures used in +this space, many application areas, and embedded developers work with different +sets of constraints: real-time constraints, memory constraints, energy / power +constraints, etc.</p> +<p>For this reason we have been creating and growing specialized teams within the +WG by adding members with different areas of expertise. This ensures that we +have different perspectives when making API design decisions in core crates and +when communicating the needs of the embedded community to the other Rust teams. +Having specialized teams also means that the crates developed by the org can be +assigned to the people with the right technical background.</p> +<h2 id="on-the-upcoming-2018-edition">On the upcoming 2018 edition</h2> +<p>In this last sprint towards the 2018 edition we are focusing our efforts in +our <a href="https://docs.rust-embedded.org">documentation</a>!</p> +<p>You can help us by proofreading our docs, reporting errors, giving feedback on +the existing content, requesting new topics and writing about topics that have +not yet been covered. Every little bit of help is greatly appreciated!</p> +<p>One important note: our documentation makes use of the 2018 edition which +requires you to use the beta channel until 1.31 is released in early December. +We suggest that you use the beta channel until then to get the best experience.</p> +<h2 id="beyond-2018">Beyond 2018</h2> +<p>Our work doesn't stop the day Rust 1.31 comes out; the 2018 edition is just the +starting line of embedded Rust. As we continue to learn how to effectively use +Rust for embedded development we'll continue to refine and expand our +documentation as well as the core crates we maintain and develop.</p> +<p>Also, at this point in time ARM Cortex-M is our most mature target architecture +and the majority of crates on crates.io target this architecture, but we have +laid the groundwork for supporting other targets like bare metal ARM Cortex-A, +ARM Cortex-R, MSP430 and RISCV. We'll continue to work on getting these +targets on parity with the ARM Cortex-M target during the next year.</p> +<p>Finally, we'd love to hear what <strong>you</strong> would like to see happen in the embedded +space in 2019. We are collecting a <a href="https://github.com/rust-embedded/wg/issues/256">&quot;wishlist&quot;</a> of things the embedded community +would like to see get done, fixed and / or stabilized in 2019. Need some API in +core to be stabilized? Would like to get some Cargo bug / papercut fixed? Let us +know and we'll look into making it happen! We'll use this data to set out an +embedded Rust roadmap for 2019.</p> +<p>Here's to a 2019 with <em>more</em> embedded Rust success stories (yes, &quot;more&quot;; wait +for the upcoming revamped rust-lang website ;-)). Happy embedded hacking!</p> + + + + + The Embedded Working Group Newsletter - 14 + Sun, 28 Oct 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-14/ + https://blog.rust-embedded.org/newsletter-14/ + <p>This is the fourteenth newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>This is a special &quot;spotlight&quot; edition of the newsletter, where we look at a few topics in a bit more detail. Let us know what you think of the new format, and if there is anything you'd like to see included in <a href="https://github.com/rust-embedded/blog/issues/22">the next newsletter</a>!</p> +<p>Discuss on <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-14/21795">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1057222850787053568">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/9smq6f/embedded_wg_newsletter_14_spotlight_edition/">on reddit</a>!</p> +<span id="continue-reading"></span><h2 id="embedded-rust-applications-on-stable">Embedded Rust Applications on Stable!</h2> +<hr> +<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Rust 1.30 is here! Proc macros, no_std binaries, and a progress bar for cargo! 🎊🎉🦀 <a href="https://t.co/IXm5xFYlhU">https://t.co/IXm5xFYlhU</a></p>&mdash; Rust Language (@rustlang) <a href="https://twitter.com/rustlang/status/1055499747056852993?ref_src=twsrc%5Etfw">October 25, 2018</a></blockquote> +<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> +<p>Now that <code>#[panic_handler]</code> is stabilized in <a href="https://blog.rust-lang.org/2018/10/25/Rust-1.30.0.html">1.30</a>, you can write Cortex-M bare-metal applications with the stable compiler. All our Rust Embedded crates, such as <code>cortex-m</code>, <code>cortex-m-rt</code> and <code>embedded-hal</code> should be ready to use on stable, but please note our two tutorial books <a href="https://rust-embedded.github.io/discovery/">Discovery</a> and <a href="https://rust-embedded.github.io/book/">The Embedded Rust Book</a> still require 1.30 beta or 1.31 beta as they use 2018 edition syntax (which isn't stabilized until the 1.31 release).</p> +<p>If you are able to trial 1.31 beta, you can help us test:</p> +<ul> +<li>Minimal <code>const</code> functions (useful for initializing static variables)</li> +<li>2018 edition syntax (including changes to <code>use</code> and <code>extern crate</code>)</li> +</ul> +<h2 id="the-newest-embedded-wg-team-cortex-a">The Newest Embedded WG Team: Cortex-A!</h2> +<hr> +<p><img src="../screenshot-cortex-a.png" alt="Screenshot of Cortex-A RFC" /></p> +<p>The Embedded Working Group has launched a Cortex-A team, to focus on supporting developers working on bare-metal, micro kernel, and other low-level tasks using ARM's Cortex-A series of microprocessors.</p> +<p>The team kicked off with four members: <a href="https://github.com/andre-richter">@andre-richter</a>, <a href="https://github.com/parched">@parched</a>, <a href="https://github.com/raw-bin">@raw-bin</a>, and <a href="https://github.com/wizofe">@wizofe</a>, and have already started assembling initial <a href="https://github.com/rust-embedded/wg/milestone/5">goals for their team</a>.</p> +<h2 id="the-monotron-visits-rust-belt-rust">The Monotron Visits Rust Belt Rust</h2> +<hr> +<blockquote class="twitter-tweet" data-conversation="none" data-lang="en"><p lang="en" dir="ltr">Astonishing. Smashed my high score! <a href="https://t.co/WG9FXc8Kao">pic.twitter.com/WG9FXc8Kao</a></p>&mdash; Jonathan Pallant (@therealjpster) <a href="https://twitter.com/therealjpster/status/1053698944360951813?ref_src=twsrc%5Etfw">October 20, 2018</a></blockquote> +<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> +<p><a href="https://github.com/thejpster">@thejpster</a>'s project, the <a href="https://github.com/thejpster/monotron">monotron</a>, travelled to Ann Arbor Michigan for <a href="https://rust-belt-rust.com/">Rust Belt Rust 2018</a>. Since its <a href="https://www.youtube.com/watch?v=pTEYqpcQ6lg">last conference appearance</a>, it has gained a whole new <a href="https://twitter.com/therealjpster/status/1055187256091332608">list of features</a>, including a serial application loader, a 3 channel wave table synthesizer, Atari Joystick support, and more!</p> +<p>Check out the video above for a demo of Snake on the monotron hardware.</p> +<h2 id="peripheral-ownership-woes-not-with-shared-bus">Peripheral Ownership Woes? Not With <code>shared-bus</code>!</h2> +<hr> +<pre style="background-color:#2b303b;"> +<code class="language-rust" data-lang="rust"><span style="color:#b48ead;">extern crate</span><span style="color:#c0c5ce;"> shared_bus; + +</span><span style="color:#65737e;">// Create your bus peripheral as usual: +// let i2c = I2c::i2c1(dp.I2C1, (scl, sda), 90.khz(), clocks, &amp;mut rcc.apb1); + +</span><span style="color:#b48ead;">let</span><span style="color:#c0c5ce;"> manager = shared_bus::CortexMBusManager::new(i2c); + +</span><span style="color:#65737e;">// You can now acquire bus handles: +</span><span style="color:#b48ead;">let mut</span><span style="color:#c0c5ce;"> handle = manager.</span><span style="color:#96b5b4;">acquire</span><span style="color:#c0c5ce;">(); +</span><span style="color:#65737e;">// handle implements `i2c::{Read, Write, WriteRead}`, depending on the +// implementations of the underlying peripheral + +// Now, this works! :+1: +</span><span style="color:#b48ead;">let</span><span style="color:#c0c5ce;"> port_a = Pcf8574(manager.</span><span style="color:#96b5b4;">acquire</span><span style="color:#c0c5ce;">(), </span><span style="color:#d08770;">0x39</span><span style="color:#c0c5ce;">).</span><span style="color:#96b5b4;">unwrap</span><span style="color:#c0c5ce;">(); +</span><span style="color:#b48ead;">let</span><span style="color:#c0c5ce;"> port_b = Pcf8574(manager.</span><span style="color:#96b5b4;">acquire</span><span style="color:#c0c5ce;">(), </span><span style="color:#d08770;">0x38</span><span style="color:#c0c5ce;">).</span><span style="color:#96b5b4;">unwrap</span><span style="color:#c0c5ce;">(); +</span></code></pre> +<p>In most <code>embedded-hal</code> compatible drivers, the driver takes either ownership or a mutable reference to the peripheral used to interact with a component, such as I2C or SPI. For some protocols, such as I2C, which might have multiple devices connected to the same peripheral, managing ownership can be difficult (see <a href="https://github.com/rust-embedded/embedded-hal/issues/35">embedded-hal/35</a> for discussion).</p> +<p>To address this, <a href="https://github.com/Rahix">@Rahix</a> developed <a href="https://github.com/Rahix/shared-bus">shared-bus</a>, a crate which provides safe shared access to these peripherals through the use of a mutex. This allows for access of the underlying peripheral in as many drivers as you need! Check out the <a href="https://blog.rahix.de/001-shared-bus/">release blog post</a> for more details, and for examples on how to use this for your projects.</p> +<h2 id="the-embedded-rust-community-is-growing">The Embedded Rust Community is Growing!</h2> +<hr> +<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Happy Tuesday! Quick poll: What are you using <a href="https://twitter.com/hashtag/embedded?src=hash&amp;ref_src=twsrc%5Etfw">#embedded</a> <a href="https://twitter.com/rustlang?ref_src=twsrc%5Etfw">@rustlang</a> for right now?<br><br>RTs appreciated!</p>&mdash; Rust Embedded Working Group (@rustembedded) <a href="https://twitter.com/rustembedded/status/1052189142065405952?ref_src=twsrc%5Etfw">October 16, 2018</a></blockquote> +<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> +<p>As we get closer to our goal of stable embedded development with Rust for the 2018 edition launch, the embedded community is ramping up. We did a quick twitter poll which received hundreds of responses, and heard from developers using or evaluating embedded rust for personal and work projects.</p> +<p>The <a href="https://github.com/rust-embedded/wg">Embedded WG</a> has also grown, starting off this year with 8 developers on a single team, to a group of <strong>27 developers</strong> across <strong>11 teams</strong>, each with their own area of focus within the embedded rust space.</p> +<p>Now is a great time to start working with Embedded Rust, and we can't wait to see what the next year brings!</p> +<h2 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h2> +<hr> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">16</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">13</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">11</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">16</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">46</td><td align="left">+6</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">17</td><td align="left">+3</td></tr> +</tbody></table> + + + + + The Embedded Working Group Newsletter - 13 + Tue, 09 Oct 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-13/ + https://blog.rust-embedded.org/newsletter-13/ + <p>This is the thirteenth newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-13/21137">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1049739952601395201">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/9ms5jk/embedded_wg_newsletter_13_industrial_io_bluetooth/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/issues/17">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>The <code>min_const_fn</code> feature <a href="https://github.com/rust-lang/rust/pull/54835">has landed</a>, allowing for stable use of <code>const fn</code> functions in an embedded context in the upcoming 1.31 release of Rust!</li> +<li><a href="https://github.com/fpagliughi">Frank Pagliughi</a> has kicked off <a href="https://github.com/fpagliughi/rust-industrial-io"><code>rust-industrial-io</code></a>, a crate providing an interface to <code>libiio</code> on linux, which is used for communication with industrial sensors and actuators</li> +<li><a href="https://github.com/gregokent">gregokent</a> has started development on <a href="https://github.com/gregokent/cortex-r-rt"><code>cortex-r-rt</code></a>, a runtime crate for Cortex-R processors</li> +<li>The HAL Impl crate for the Texas Instruments TM4C123 now <a href="https://twitter.com/therealjpster/status/1047872901628792832">works on 1.30-beta</a>! <strong>Now is a great time to ensure that your embedded crates will work flawlessly with the 2018 Edition of Rust!</strong></li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-embedded/blog/issues/17">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/e-matteson">e-matteson</a> has released their <a href="https://github.com/e-matteson/keypad"><code>keypad</code> driver</a>, which can be used with keypad matrix circuits. Check out more <a href="https://www.reddit.com/r/rust/comments/9j42o9/weekly_driver_keypad_matrix_circuits/">details on reddit</a></li> +<li><a href="https://github.com/danielgallagher0">Daniel Gallagher</a> has recently released two handy Bluetooth crates in an <a href="https://219design.com/bluetooth-low-energy-with-rust/">intro blog</a> post: +<ul> +<li><a href="https://crates.io/crates/bluenrg"><code>bluenrg</code></a>, an embedded-hal crate used to interface with STMicro's series of microcontrollers</li> +<li><a href="https://crates.io/crates/bluetooth-hci">Bluetooth HCI</a>, a helper crate for interfacing with the Bluetooth Host-Controller interface</li> +</ul> +</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">16</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">13</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">11</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">15</td><td align="left">+3</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">40</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">14</td><td align="left">+1</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>Interested in implementing a new target for Embedded Rust? Nuvoton has a <a href="https://direct.nuvoton.com/de/numaker-pfm-m2351">development board</a> for the Cortex-M23. Check out the <a href="https://github.com/rust-embedded/wg/issues/88">thumbv8m tracking issue</a> if you want to help!</li> +</ul> + + + + + The Embedded Working Group Newsletter - 12 + Tue, 25 Sep 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-12/ + https://blog.rust-embedded.org/newsletter-12/ + <p>This is the twelfth newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://users.rust-lang.org/t/the-embedded-working-group-newsletter-12/20749">users.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1044930201925439490">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/9j2620/the_embedded_working_group_newsletter_12/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/issues/15">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>We now have a category for Embedded on the <a href="https://users.rust-lang.org/c/embedded">users.rust-lang.org forum</a>! This is a great place to ask larger questions, or to share more details about your projects!</li> +<li>You can now build embedded <a href="https://twitter.com/japaricious/status/1042440110418153473">binaries on stable</a> with the <code>1.30-beta</code> release of Rust! Check it out and <a href="https://github.com/rust-embedded/wg/issues">open an issue</a> if you run in to any issues with your projects!</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-embedded/blog/issues/15">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/eldruin">Diego Barrios Romero</a> has released his <a href="https://blog.eldruin.com/24x-serial-eeprom-driver-in-rust/">eeprom24x</a> crate, an <code>embedded-hal</code> compatible driver for EEPROM memory chips such as the Microchip/Atmel <code>AT24C32</code>, <code>24AA32A</code>, <code>AT24C256</code>, or STMicroelectronics' <code>M24C32</code></li> +<li><a href="https://github.com/trangar/">Trangar</a> managed to drive <a href="https://twitter.com/victorkoenders/status/1042786930335903745">56 ArtNet Torches</a> using Rust, based on his <a href="https://github.com/Trangar/artnet_protocol">ArtNet Protocol</a> crate</li> +<li>The <code>no_std</code> synthesizer from the last newsletter has been implemented on-hardware by <a href="https://github.com/thejpster">Jonathan Pallant</a>, giving the <a href="https://github.com/thejpster/monotron">Monotron</a> a <a href="https://twitter.com/therealjpster/status/1043942194015555584">PWM audio driver</a>!</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">16</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">12</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">9</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">12</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">40</td><td align="left">-1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">13</td><td align="left">0</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>Interested in implementing a new target for Embedded Rust? Nuvoton has a <a href="https://direct.nuvoton.com/de/numaker-pfm-m2351">development board</a> for the Cortex-M23. Check out the <a href="https://github.com/rust-embedded/wg/issues/88">thumbv8m tracking issue</a> if you want to help!</li> +</ul> + + + + + The Embedded Working Group Newsletter - 11 + Sun, 09 Sep 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-11/ + https://blog.rust-embedded.org/newsletter-11/ + <p>This is the eleventh newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://internals.rust-lang.org/t/the-embedded-working-group-newsletter-11/8377">internals.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1039055481946492928">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/9eku70/rust_embedded_working_group_newsletter_11_cortexr/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/issues/12">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li><code>rustc</code> now supports 4 <strong>Cortex-R</strong> targets thanks to the work of <a href="https://github.com/paoloteti">paoloteti</a> in the Cortex-R space! You can build programs for these targets using nothing but the Rust toolchain</li> +<li><a href="https://github.com/jamesmunns">James Munns</a> gave a talk <a href="https://www.youtube.com/watch?v=t99L3JHhLc0">at RustConf 2018</a>, covering the basics of embedded systems, and how Rust's Zero Cost Abstractions are a perfect match for bare metal systems</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-embedded/blog/issues/12">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li>Support for the Arduino MKRZERO board <a href="https://twitter.com/gonadic_io/status/1035916949287575552">has landed</a> in the <a href="https://github.com/wez/atsamd21-rs">atsamd21-rs</a> repository! This is a Board Support Crate for various development board based on the Atmel/Microchip samd21 Cortex-M microcontroller</li> +<li><a href="https://github.com/branan">Branan Riley</a> is working on the <a href="https://twitter.com/branan/status/1038222375790161920">fourth chapter</a> of his <a href="https://branan.github.io/teensy/">Exploring Rust on Teensy</a> series, which will focus on using <code>futures-rs</code> to represent DMA transfers</li> +<li><a href="https://github.com/korken89">Emil Fresk</a> shared some shots of his next <a href="https://twitter.com/korken89/status/1038494310830952449">Visual Inertial PCB</a>, which includes an STM32 running control algorithms written in Rust!</li> +<li><a href="https://github.com/thejpster">Jonathan Pallant</a> added a bare-metal <a href="https://twitter.com/therealjpster/status/1036298070022086656">four-channel synthesizer</a> for his Monotron project, and even included a short <a href="https://www.youtube.com/watch?v=NvfyFhFK11g">demo audio clip</a>!</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">16</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">12</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">9</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">11</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">41</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">13</td><td align="left">0</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>Take a minute to check out the <a href="https://github.com/search?q=org%3Arust-embedded+is%3Aissue+is%3Aopen+milestone%3Arc1+label%3A%22help+wanted%22&amp;type=Issues">wg help wanted issues</a> as labeled on our issue tracker!</li> +</ul> + + + + + PSA: Cortex-M Breakage (LLD as the default linker) + Tue, 28 Aug 2018 00:00:00 +0000 + https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/ + https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/ + <p>The default linker for the 4 ARM Cortex-M targets listed below has changed from +<code>arm-none-eabi-gcc</code> to <code>rust-lld</code> in the latest nightly.</p> +<ul> +<li><code>thumbv6m-none-eabi</code></li> +<li><code>thumbv7m-none-eabi</code></li> +<li><code>thumbv7em-none-eabi</code></li> +<li><code>thumbv7em-none-eabihf</code></li> +</ul> +<p>This will break the builds of <em>binaries</em> and <em>cdylibs</em> that were using the +old default linker (<code>arm-none-eabi-gcc</code>) <em>and</em> additionally pass extra flags to +the linker using any of these rustc flags: <code>-C link-arg</code>, <code>-C link-args</code>, <code>-Z pre-link-arg</code> or <code>-Z pre-link-args</code>. Building libraries (<code>rlib</code>s and +<code>staticlib</code>s) is not affected by this change.</p> +<span id="continue-reading"></span> +<p>This change won't affect stable users when it reaches the 1.30 release because, +as of 1.28, it's not possible to build binaries or cdylibs for those targets on +the stable channel. Building libraries for those targets is possible on stable +but it's not affected by this change.</p> +<h3 id="rationale">Rationale</h3> +<p>This breaking change was intentional.</p> +<p>We, the <a href="https://github.com/rust-embedded/wg">embedded WG</a>, wanted to reduce the number of external tools required to +build embedded programs for the ARM Cortex-M architecture. By switching the +default linker to the LLD linker that's shipped with the Rust toolchain the user +no longer needs to install an ARM linker (like <code>arm-none-eabi-gcc</code> or +<code>arm-none-eabi-ld</code>) to build Rust programs.</p> +<p>Before landing this change we first <a href="https://github.com/rust-embedded/wg/issues/160">consulted</a> with the community if they +thought this breaking change was worth it. We received over 20 positive responses +representing the Cortex-M team (part of the embedded WG), the Tock OS project, +the embed-rs organization and independent developers.</p> +<p>The consensus was that it was worth to make the default configuration more self +contained and that if we were to make the change it had to be made before it +became possible to build binaries on stable otherwise it wouldn't be possible +to make this change without breaking stable builds.</p> +<h3 id="how-to-fix-your-build">How to fix your build</h3> +<p>If you are affected by this change you'll observe a linker error with a message +similar to one shown below:</p> +<pre style="background-color:#2b303b;"> +<code class="language-console" data-lang="console"><span style="color:#c0c5ce;">$ # these are the custom linker flags of the project +$ cat .cargo/config +</span></code></pre><pre style="background-color:#2b303b;"> +<code class="language-toml" data-lang="toml"><span style="color:#c0c5ce;">[target.thumbv7m-none-eabi] +</span><span style="color:#bf616a;">runner </span><span style="color:#c0c5ce;">= &#39;</span><span style="color:#a3be8c;">arm-none-eabi-gdb</span><span style="color:#c0c5ce;">&#39; +</span><span style="color:#bf616a;">rustflags </span><span style="color:#c0c5ce;">= [ + &quot;</span><span style="color:#a3be8c;">-C</span><span style="color:#c0c5ce;">&quot;, &quot;</span><span style="color:#a3be8c;">link-arg=-Wl,-Tlink.x</span><span style="color:#c0c5ce;">&quot;, + &quot;</span><span style="color:#a3be8c;">-C</span><span style="color:#c0c5ce;">&quot;, &quot;</span><span style="color:#a3be8c;">link-arg=-nostartfiles</span><span style="color:#c0c5ce;">&quot;, +] + +[build] +</span><span style="color:#bf616a;">target </span><span style="color:#c0c5ce;">= &quot;</span><span style="color:#a3be8c;">thumbv7m-none-eabi</span><span style="color:#c0c5ce;">&quot; +</span></code></pre><pre style="background-color:#2b303b;"> +<code><span style="color:#c0c5ce;">$ cargo build +error: linking with `rust-lld` failed: exit code: 1 + | + = note: &quot;rust-lld&quot; &quot;-flavor&quot; &quot;gnu&quot; (..) + = note: rust-lld: error: unknown argument: -Wl,-Tlink.x + rust-lld: error: unknown argument: -nostartfiles +</span></code></pre> +<p>There are two ways to fix the problem.</p> +<h4 id="option-a-switch-back-to-gcc">Option A: switch back to GCC</h4> +<p>The easiest way is to switch back to using <code>arm-none-eabi-gcc</code> as the linker. To +do so pass the flag <code>-C linker=arm-none-eabi-gcc</code> to rustc. In the above example +you can do that in the <code>.cargo/config</code> file.</p> +<pre style="background-color:#2b303b;"> +<code class="language-console" data-lang="console"><span style="color:#c0c5ce;">$ # these are the custom linker flags of the project +$ cat .cargo/config +</span></code></pre><pre style="background-color:#2b303b;"> +<code class="language-toml" data-lang="toml"><span style="color:#c0c5ce;">[target.thumbv7m-none-eabi] +</span><span style="color:#bf616a;">runner </span><span style="color:#c0c5ce;">= &#39;</span><span style="color:#a3be8c;">arm-none-eabi-gdb</span><span style="color:#c0c5ce;">&#39; +</span><span style="color:#bf616a;">rustflags </span><span style="color:#c0c5ce;">= [ + &quot;</span><span style="color:#a3be8c;">-C</span><span style="color:#c0c5ce;">&quot;, &quot;</span><span style="color:#a3be8c;">linker=arm-none-eabi-gcc</span><span style="color:#c0c5ce;">&quot;, </span><span style="color:#65737e;"># ADDED + </span><span style="color:#c0c5ce;">&quot;</span><span style="color:#a3be8c;">-C</span><span style="color:#c0c5ce;">&quot;, &quot;</span><span style="color:#a3be8c;">link-arg=-Wl,-Tlink.x</span><span style="color:#c0c5ce;">&quot;, + &quot;</span><span style="color:#a3be8c;">-C</span><span style="color:#c0c5ce;">&quot;, &quot;</span><span style="color:#a3be8c;">link-arg=-nostartfiles</span><span style="color:#c0c5ce;">&quot;, +] + +[build] +</span><span style="color:#bf616a;">target </span><span style="color:#c0c5ce;">= &quot;</span><span style="color:#a3be8c;">thumbv7m-none-eabi</span><span style="color:#c0c5ce;">&quot; +</span></code></pre><pre style="background-color:#2b303b;"> +<code><span style="color:#c0c5ce;">$ cargo build &amp;&amp; echo It works now +It works now +</span></code></pre><h4 id="option-b-tweak-the-additional-linker-arguments">Option B: tweak the additional linker arguments</h4> +<p>The other option is to tweak the additional linker arguments so they'll be +accepted by LLD. In the above example the <code>-nostartfiles</code> flag can be dropped +because that's the default behavior of LLD, and the flags prefixed by <code>-Wl,</code> +will have to lose their prefix.</p> +<pre style="background-color:#2b303b;"> +<code class="language-console" data-lang="console"><span style="color:#c0c5ce;">$ # these are the custom linker flags of the project +$ cat .cargo/config +</span></code></pre><pre style="background-color:#2b303b;"> +<code class="language-toml" data-lang="toml"><span style="color:#c0c5ce;">[target.thumbv7m-none-eabi] +</span><span style="color:#bf616a;">runner </span><span style="color:#c0c5ce;">= &#39;</span><span style="color:#a3be8c;">arm-none-eabi-gdb</span><span style="color:#c0c5ce;">&#39; +</span><span style="color:#bf616a;">rustflags </span><span style="color:#c0c5ce;">= [ + &quot;</span><span style="color:#a3be8c;">-C</span><span style="color:#c0c5ce;">&quot;, &quot;</span><span style="color:#a3be8c;">link-arg=-Tlink.x</span><span style="color:#c0c5ce;">&quot;, </span><span style="color:#65737e;"># CHANGED +# &quot;-C&quot;, &quot;link-arg=-nostartfiles&quot;, # REMOVED +</span><span style="color:#c0c5ce;">] + +[build] +</span><span style="color:#bf616a;">target </span><span style="color:#c0c5ce;">= &quot;</span><span style="color:#a3be8c;">thumbv7m-none-eabi</span><span style="color:#c0c5ce;">&quot; +</span></code></pre><pre style="background-color:#2b303b;"> +<code class="language-console" data-lang="console"><span style="color:#c0c5ce;">$ cargo build &amp;&amp; echo It works now +It works now +</span></code></pre> +<p>With this approach your build will no longer depend on an external linker.</p> +<h4 id="should-i-prefer-option-a-or-b">Should I prefer option A or B?</h4> +<p>If you are linking to a system installed C library like <code>newlib-arm-none-eabi</code> +then you should continue to use GCC. The default library search path of +<code>arm-none-eabi-gcc</code> includes the path to those libraries.</p> +<p>If you are not linking to any C code then you should prefer LLD then you won't +need to install the <code>arm-none-eabi</code> toolchain.</p> + + + + + The Embedded Working Group Newsletter - 10 + Tue, 28 Aug 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-10/ + https://blog.rust-embedded.org/newsletter-10/ + <p>This is the tenth newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<p>Discuss on <a href="https://internals.rust-lang.org/t/the-10th-embedded-wg-newsletter-and-a-new-blog/8326">internals.rust-lang.org</a>, <a href="https://twitter.com/rustembedded/status/1034765727423717376">on twitter</a>, or <a href="https://www.reddit.com/r/rust/comments/9b8gry/the_10th_embedded_wg_newsletter_and_a_new_blog/">on reddit</a>!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/blog/issues/6">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>We have <a href="https://rust-embedded.github.io/blog/">a blog</a>! We'll be posting newsletters, notices for upcoming changes, and embedded related articles there in the upcoming future. Use RSS? It has an <a href="https://rust-embedded.github.io/blog/rss.xml">RSS feed</a>! Check out the <a href="https://github.com/rust-embedded/blog">blog on github</a> to make any corrections or to contribute an article</li> +<li>Nightly Rust has <a href="https://rust-embedded.github.io/blog/2018-08-2x-psa-cortex-m-breakage/">switched to <code>lld</code></a> for Cortex-M targets as a default. See the blog post for how to handle this change</li> +<li>There have been updates to <a href="https://github.com/rust-embedded/cortex-m/blob/master/CHANGELOG.md#v056---2018-08-27"><code>cortex-m</code></a>, <a href="https://github.com/rust-embedded/cortex-m-rt/blob/master/CHANGELOG.md#v053---2018-08-27"><code>cortex-m-rt</code></a>, and <a href="https://github.com/rust-embedded/cortex-m-quickstart/blob/master/CHANGELOG.md#v034---2018-08-27"><code>cortex-m-quickstart</code></a>! Check out the linked changelogs to see what is new. Also, the latest release of each of these no longer require <code>arm-none-eabi-gcc</code>!</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-embedded/blog/issues/6">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li>Support for <code>aarch64-unknown-none</code> has <a href="https://github.com/rust-lang/rust/commit/898950caf1a7bc9b6c41e74bbfac9591724f307c">landed upstream</a>! It is now possible to write bare-metal Rust code for 64-bit ARM architectures</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-embedded/wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">14</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">12</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">9</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">11</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">39</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">13</td><td align="left">+1</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>Take a minute to check out the <a href="https://github.com/search?q=org%3Arust-embedded+is%3Aissue+is%3Aopen+milestone%3Arc1+label%3A%22help+wanted%22&amp;type=Issues">wg help wanted issues</a> as labeled on our issue tracker!</li> +</ul> + + + + + The Embedded Working Group Newsletter - 9 + Sun, 12 Aug 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-9/ + https://blog.rust-embedded.org/newsletter-9/ + <p>This is the ninth newsletter of the <a href="https://github.com/rust-embedded/wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-embedded/wg/issues/164">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>The Embedded Working Group has moved! You can find our new coordination repo at <a href="https://github.com/rust-embedded/wg">rust-embedded/wg</a> on GitHub, and crates maintained by the working group in the <a href="https://github.com/rust-embedded">rust-embedded</a> organization</li> +<li>The Embedded Working Group has grown! We are now 18 people grouped in the following 6 teams to allow for better focus on these topics: +<ul> +<li>The <strong>Cortex-M</strong> team develops and maintains the core of the Cortex-M crate ecosystem</li> +<li>The <strong>HAL team</strong> develops and maintains crates that ease the development of Hardware Abstraction Layers, Board Support Crates and drivers</li> +<li>The <strong>MS430 team</strong> develops and maintains the core of the MSP430 crate ecosystem</li> +<li>The <strong>RISCV team</strong> develops and maintains the core of the RISCV crate ecosystem</li> +<li>The <strong>Resources team</strong> develops, maintains and curates resources on embedded Rust</li> +<li>The <strong>Tools team</strong> maintains and develops core embedded tools</li> +</ul> +</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-embedded/wg/issues/164">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/rust-lang/rust/pull/52787">rust-lang/rust#52787</a> has landed, adding support in <code>nightly</code> for the RISC-V architecture as a bare-metal target!</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">14</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">11</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">9</td><td align="left">+1</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">11</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">38</td><td align="left">+3</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">12</td><td align="left">0</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>We're considering changing to LLD as the default linker for <code>thumb</code> targets. Check out the RFC at <a href="https://github.com/rust-embedded/wg/issues/160">rust-embedded/wg#160</a>, and let us know what you think</li> +</ul> + + + + + The Embedded Working Group Newsletter - 8 + Sun, 29 Jul 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-8/ + https://blog.rust-embedded.org/newsletter-8/ + <p>This is the eighth newsletter of the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/134">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li><a href="https://github.com/japaric/libm#libm">libm</a>, the <code>no_std</code> port of MUSL's math library led by <a href="https://github.com/japaric">japaric</a> has finished its' first release! It can now be used by embedded (or <code>wasm</code>!) targets that need support for math functions.</li> +<li><a href="https://github.com/droogmic">droogmic</a> is working on <a href="https://droogmic.github.io/microrust">microrust</a>, a port of <a href="https://github.com/japaric">japaric</a>'s Discovery book for the BBC MicroBit, based on the Nordic nRF51</li> +<li><a href="https://github.com/sekineh">Hideki Sekine</a> and <a href="https://github.com/nerdyvaishali">Vaishali Thakkar</a> have landed initial support for an <a href="https://github.com/rust-lang/rust/pull/52465">Embedded CI Harness</a> in the <a href="https://github.com/rust-lang/rust"><code>rust-lang/rust</code></a> repo as part of the <a href="http://reach.rust-lang.org/">Increasing Rust's Reach</a> project. This opens the door for tests that will help prevent regressions in <code>rustc</code> and <code>cargo</code> for ARM Cortex-M targets</li> +<li><a href="https://github.com/rust-lang-nursery/stdsimd/pull/518">CMSIS intrinsics</a> for ARM Cortex processors have landed in <a href="https://github.com/rust-lang-nursery/stdsimd">stdsimd</a>. Check out the <a href="https://doc.rust-lang.org/nightly/core/arch/arm/index.html">the docs</a> in nightly soon<sup>†</sup> for info, thanks to <a href="https://github.com/paoloteti">Paolo Teti</a> and <a href="https://github.com/japaric">japaric</a>!</li> +<li><a href="https://github.com/ashleygwilliams">Ashley Williams</a> released <a href="https://crates.io/crates/cargo-generate">cargo-generate</a>, a CLI tool for generating Cargo projects from a template, reducing the need to manually write boilerplate code. If you write some embedded templates, <a href="https://twitter.com/rustembedded">let us know</a>!</li> +</ul> +<p>†: The CMSIS intrinsics will show up in the docs after the next successful nightly build (after 2018-07-30)</p> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/134">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/djmcgill">David McGillicuddy</a> has released his crate, <a href="https://crates.io/crates/eight-segment">eight-segment</a>, an <code>embedded-hal</code> driver for displaying digits on 8 segment displays like the HDSP H-101</li> +<li><a href="https://github.com/jamwaffles">James Waples</a> announced the newest release of his <a href="https://crates.io/crates/embedded-graphics">embedded-graphics</a> library <a href="https://twitter.com/jam_waffles/status/1022837939041132545">in a tweet</a>. This version fixes some small issues, as well as provides functionality to save memory</li> +<li><a href="https://github.com/roosmaa">Mart Roosmaa</a> released <a href="https://github.com/roosmaa/bolos-rs">bolos-rs</a>, a 3rd party Rust SDK for the Ledger Nano cryptocurrency wallet. Check out his <a href="https://medium.com/@roosmaa/bringing-rust-to-ledger-hardware-wallet-ccf1356a7de1">Medium post</a> for more info!</li> +<li>The <a href="https://crates.io/crates/cc1101">cc1101</a> crate can now recieve radio packets! Check out <a href="https://www.reddit.com/r/rust/comments/8zk03w/cc1101_crate_can_now_receive_radio_packets/">the reddit post</a> by <a href="https://github.com/dsvensson">Daniel Svensson</a>, as well as <a href="https://dsvensson.github.io/posts/2018-07-13-Electrosmog-trapping-with-CC1101.html#article">his blog post</a> for more info</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">14</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">11</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">8</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">11</td><td align="left">+2</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">35</td><td align="left">+5</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#no-std-crates">no-std crates</a></td><td align="left">released</td><td align="left">12</td><td align="left">+12</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>The Embedded-WG is looking for someone to write an <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/63#issuecomment-408509178">RFC for ARM Intrinsics</a> to get them stabilized</li> +<li><a href="https://github.com/thejpster">Jonathan Pallant</a> is looking for ideas to implement for the Monotron project. Check out the <a href="http://railwayelectronics.blogspot.com/2018/07/where-next-for-monotron.html">monotron blog post</a> for more details!</li> +<li>The <a href="https://github.com/japaric/libm#libm">libm</a> project is looking for help with <a href="https://github.com/japaric/libm/milestone/3">refactoring</a> in order to better support chips without hardware double-floating-point support</li> +</ul> + + + + + The Embedded Working Group Newsletter - 7 + Sun, 15 Jul 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-7/ + https://blog.rust-embedded.org/newsletter-7/ + <p>This is the seventh newsletter of the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/121">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>We have launched the <a href="https://twitter.com/rustembedded">Embedded WG Twitter</a>! We'll be publishing things like our newsletter here, so go ahead and follow to stay up to date. If you have something you're working on and want to share, feel free to @ us so we can retweet it!</li> +<li>Work started on <a href="https://github.com/japaric/libm">porting</a> MUSL's <code>libm</code> (for math functions like <code>sin</code>, <code>cos</code>, etc.) has started, and already has <a href="https://github.com/japaric/libm/issues?q=is%3Aopen+is%3Aissue+milestone%3Awasm">26 of 32 functions</a> ported! This crate will hopefully be included in the <code>core</code> of Rust, so it can be used by <code>no_std</code> targets such as embedded or wasm.</li> +<li>The Atomic*.{load,store} API is <a href="https://github.com/rust-lang/rust/pull/51953">now available</a> for the thumbv6m and msp430 targets.</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/121">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li>This week we have two Multirotor Flight Controller projects starting in Rust! They are both based on the <a href="https://github.com/japaric/stm32f30x-hal">stm32f3</a> family of chips from STMicro. +<ul> +<li><a href="https://github.com/korken89">Emil Fresk</a> posted <a href="https://twitter.com/korken89/status/1016975023930830848">on Twitter</a> about his project <a href="https://github.com/korken89/trustflight_firmware">TrustFlight</a>, which is an open source, Rust based software library for controlling the <a href="https://github.com/korken89/trustflight_hardware">TrustFlight HW</a> he designed.</li> +<li><a href="https://github.com/JoshMcguigan">Josh Mcguigan</a> announced in his <a href="https://www.joshmcguigan.com/blog/betafpv-drone-flight-controller-hello-rust/">Blog Post</a> that he is planning to develop a firmware package for the <a href="https://betafpv.com/products/beta75-bnf-tiny-whoop-quadcopter">BetaFPV F3</a>, which is an off the shelf flight controller</li> +</ul> +</li> +<li>We also have two projects aiming to make use of Rust on the Raspberry Pi a little easier: +<ul> +<li><a href="https://gitlab.com/AGausmann">Adam Gausmann</a> shared his <a href="https://gitlab.com/AGausmann/rustberry">Rustberry</a> project <a href="https://www.reddit.com/r/rust/comments/8x1ayd/calling_all_raspberry_pi_owners_rustberry_010_has/">on Reddit</a>, which includes register maps and an I/O library for the Raspberry Pi</li> +<li><a href="https://github.com/rahul-thakoor">Rahul Thakoor</a> shared his <a href="https://github.com/rahul-thakoor/rust_gpiozero">rust_gpiozero</a> crate <a href="https://medium.com/@rahulthakoor/physical-computing-with-rust-on-raspberry-pi-a7b6f34261a6">on Medium</a>, which is based on the Python library of similar name. He has also started writing <a href="https://rahul-thakoor.github.io/physical-computing-rust/">a series of tutorials</a> for developers new to working with physical hardware.</li> +</ul> +</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th><th align="left">Diff</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">14</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">11</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">6</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">9</td><td align="left">0</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">30</td><td align="left">0</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>Help contribute to development of <a href="https://github.com/japaric/libm">Rust's libm</a> to get math functions built in to <code>core</code> for <code>no_std</code> targets!</li> +</ul> + + + + + The Embedded Working Group Newsletter - 6 + Sun, 01 Jul 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-6/ + https://blog.rust-embedded.org/newsletter-6/ + <p>This is the sixth newsletter of the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<span id="continue-reading"></span> +<p>This newsletter covers the past ~6 weeks.</p> +<p>If you want to mention something in <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/103">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li><a href="https://github.com/jcreedon">Jacob Creedon</a> gave an introduction talk about using Rust with embedded systems at the <a href="https://www.crowdsupply.com/teardown/portland-2018">Teardown Conference</a> in Portland, check out <a href="http://github.jcreedon.com/static/EmbeddedWithRustSlidesTeardown2018.pdf">Jacob's Slides</a> or the <a href="http://youtu.be/g25xsK3HKkE">Video of Jacob's Talk</a></li> +<li>The <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a>'s own <a href="https://github.com/thejpster">theJPster</a> talked about the <a href="https://github.com/thejpster/monotron">Monotron</a> at <a href="https://paris.rustfest.eu/">RustFest Paris</a>, you can see <a href="http://railwayelectronics.blogspot.co.uk/2018/05/talking-about-monotron-at-rustfest.html">JP's Slides</a>, or check out the <a href="https://media.ccc.de/v/rustfest18-11-monotron_making_a_80s_style_computer_with_a_20_dev_kit">Video of JP's Talk</a></li> +<li><a href="https://github.com/japaric">Jorge Aparicio</a>, <a href="https://github.com/pftbest">Vadzim Dambrouski</a> and <a href="https://github.com/hannobraun">Hanno Braun</a> from the embedded WG also attended RustFest Paris and the following impl days. They worked towards embedded Rust on stable, better embedded Rust tooling and better MSP430 support; gave away some hardware; and chatted with lots of people interested in embedded Rust.</li> +<li>The <code>#[panic_implementation]</code> feature has <a href="https://github.com/rust-lang/rust/pull/50338">landed</a> and has been proposed for stabilization (<a href="https://github.com/rust-lang/rust/issues/44489#issuecomment-398965878">FCP merge</a>). This feature lets you define the behavior of <code>panic!</code> in <code>#[no_std]</code> context and it's the final piece for making embedded Rust development possible on the stable channel. :tada:</li> +<li>The <a href="https://github.com/japaric/discovery">Discovery</a> book has been updated to work with the <a href="https://users.rust-lang.org/t/cortex-m-library-development-now-possible-on-beta-and-the-path-towards-stable-embedded-rust/17420">preview of stable embedded Rust</a>.</li> +<li>A new <a href="https://internals.rust-lang.org/t/llvm-tools-a-new-rustup-component-for-binary-inspection-objdump-nm-size-and-profiling-prota/7830"><code>llvm-tools</code> rustup component</a> is now available on recent nightly releases. It contains LLVM tools to inspect Rust binaries regardless of their target architecture. One set of tools for ARM Cortex-M, MSP430, x86_64 and other architectures!</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/103">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/rudihorn">rudihorn</a> shared <a href="https://github.com/rudihorn/light-cli">light-cli</a>, a lightweight, no_std, and heapless CLI tool</li> +<li><a href="https://github.com/paoloteti">Paolo Teti</a> shared <a href="https://github.com/paoloteti/ti-hercules-bsp">ti-hercules-bsp</a>, a board support package for Texas Instruments TMS570 MCUs, used by safety critical industries such as automotive and aerospace</li> +<li><a href="https://github.com/marcelbuesing">Marcel Buesing</a> posted their driver crate for the <a href="https://github.com/marcelbuesing/bme680">bme680</a> environmental sensor</li> +<li><a href="https://github.com/roysmeding">Roy Smeding</a> is working on support for the <a href="https://github.com/roysmeding/stm32f334/">stm32f334</a> chip from STMicro</li> +<li>The <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a>'s own <a href="https://github.com/jcsoo">Jonathan Soo</a> announced his project, <a href="http://www.bobbin.io/blog/post/bobbin_sdk_richer_hardware/">Bobbin SDK</a>, a set of tools to make it easier to share code between different chips from the same or different vendors</li> +<li><a href="https://github.com/emosenkis">Eitan Mosenkis</a> did <a href="https://users.rust-lang.org/t/rust-on-esp8266/12933/8">a major update</a> of their <a href="https://github.com/emosenkis/esp-rs">esp-rs</a> script which produces a project to compile Rust code for the ESP8266 via the <a href="https://github.com/thepowersgang/mrustc">mrustc</a> Rust to C compiler.</li> +<li><a href="https://github.com/hannobraun">Hanno Braun</a> released v0.2 of <a href="https://github.com/braun-robotics/rust-lpc82x-hal">lpc82x-hal</a>, which includes a radical simplification of the API, allowing for stronger compile-time state guarantees. Check out the <a href="https://users.rust-lang.org/t/lpc82x-hal-0-2-rust-on-lpc82x-microcontrollers/18144">lpc82x-hal announcement</a> for more info!</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">14</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">11</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">6</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">9</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">30</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>We are seeking <a href="https://github.com/japaric/cargo-binutils/issues">input about the user interface</a> the <a href="https://github.com/japaric/cargo-binutils"><code>cargo-binutils</code></a> subcommands should expose. These subcommands provide access to the LLVM tools provided by the <code>llvm-tools</code> rustup component mentioned above.</li> +<li>Are you using embedded Rust in production? We are <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/108">collecting commercial testimonials</a> about embedded Rust for the webpage the embedded WG will have on the revamped rust-lang.org website. Even if you can't give details about the product you are building we would still love to hear from you!</li> +</ul> + + + + + The Embedded Working Group Newsletter - 5 + Tue, 15 May 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-5/ + https://blog.rust-embedded.org/newsletter-5/ + <p>This is the fifth bi-weekly newsletter of the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/98">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>We had a bonus Embedded-WG Newsletter this week about the <a href="https://users.rust-lang.org/t/cortex-m-library-development-now-possible-on-beta-and-the-path-towards-stable-embedded-rust/17420">path forward</a> towards stable Embedded Rust, and what you can do as a crate maintainer to help with the effort!</li> +<li>The Tock-OS project posted about their <a href="https://www.tockos.org/blog/2018/mmio-registers/">MMIO Registers</a>, contrasting them to crates generated by <code>svd2rust</code></li> +<li>There were a couple of great posts about developing with Rust on Embedded targets from <a href="https://www.219design.com/rust-on-the-stmicro-nucleo/">219 Design</a> and <a href="https://nercury.github.io/rust/embedded/experiments/2018/04/29/rust-embedded-01-discovery-vl-flipping-bits.html">nercury</a></li> +<li>If Game Boy Advance development with Rust sounds interesting to you, make sure you check out the <a href="https://github.com/tbelaire/rusty-TONC">rusty-TONC</a> and <a href="https://github.com/jkarns275/stdgba">stdgba</a> projects</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/98">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/kjetilkjeka">Kjetil Kjeka</a> shared their crate <a href="https://crates.io/crates/ux">uX</a> pronounced as &quot;unsigned X&quot; for working with non standard integer types (like <code>u7</code>, <code>u63</code>, etc) which act like the built in unsigned integer types</li> +<li><a href="https://github.com/adamgreig">Adam Greig</a> shared two crates: +<ul> +<li><a href="https://github.com/adamgreig/stm32-rs">stm32-rs</a>, a tool for cleaning up Chip Support Crates for STM32 microcontrollers and making it easier to work between multiple devices</li> +<li><a href="https://github.com/AirborneEngineering/blethrs">blethrs</a>, an ethernet bootloader for STM32F4 chips, using the <a href="https://github.com/m-labs/smoltcp">smoltcp</a> networking stack</li> +</ul> +</li> +<li><a href="https://github.com/jamwaffles">James Waples</a> released a driver for <a href="https://crates.io/crates/ssd1306">ssd1306</a> based OLED displays, read the <a href="https://wapl.es/electronics/rust/2018/04/30/ssd1306-driver.html">announcement blog</a> for more info</li> +<li><a href="https://github.com/jscarrott">John Scarrott</a> released a Chip Support Crate for the <a href="https://crates.io/crates/nrf52840">nRF52840</a> chip from Nordic Semiconductor</li> +<li><a href="https://github.com/krk">Kerem</a> posted a new Chip Support Crate for the Nordic Semiconductor nRF51, and joined development of the existing <a href="https://crates.io/crates/nrf51-hal">nrf51-hal</a> HAL Impl Crate</li> +<li><a href="https://github.com/teozkr">Teo Röijezon</a> released a combo of a <a href="https://crates.io/crates/stm32f0x0">stm32f0x0</a> Chip Support Crate, as well as a <a href="https://crates.io/crates/stm32f0x0-hal">stm32f0x0-hal</a> HAL Impl Crate</li> +<li><a href="https://github.com/rahul-thakoor">Rahul Thakoor</a> shipped a driver crate for <a href="https://crates.io/crates/mma7660fc">mma7660fc</a> based 3-axis accelerometers. Check out the <a href="https://rahul-thakoor.github.io/an-i2c-rust-driver-for-mma7660fc-based-3-axis-digital-accelerometer/">mma7660fc blog</a> announcement</li> +<li><a href="https://github.com/whitequark">whitequark</a> shared their <a href="https://github.com/whitequark/rust-log_buffer">log_buffer</a> crate for storing UTF-8 text in a ring buffer, and accessing it as <code>&amp;str</code>s</li> +<li><a href="https://github.com/memoryruins">Michael</a> shared <a href="https://github.com/AltSysrq/proptest">proptest</a>, a tool for performing Property Based Testing, which now has no_std support thanks to a PR from <a href="https://github.com/ZackPierce">Zack Pierce</a></li> +<li><a href="https://github.com/thejpster">theJPster</a> has been working on <a href="https://github.com/thejpster/monotron">Monotron</a> - a small 8-bit style home computer with a ROM written in Rust - ready for his talk at <a href="https://paris.rustfest.eu/">RustFest</a>. For this, he's been working on crates for <a href="https://github.com/thejpster/vga-framebuffer-rs">generating VGA video</a>, <a href="https://github.com/thejpster/pc-keyboard">decoding PS/2 keyboard scancodes</a> and <a href="https://github.com/thejpster/menu">interactive text-based menu systems</a>.</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">12</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">10</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">6</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">9</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">29</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>Make sure to check out the <a href="https://users.rust-lang.org/t/cortex-m-library-development-now-possible-on-beta-and-the-path-towards-stable-embedded-rust/17420">path forward</a> post, and report any issues you find!</li> +<li>Raspberry Fields is a festival of digital making, centered around the Raspberry Pi. It's taking place on Saturday 30 June and Sunday 1 July, in Cambridge, England. <a href="https://github.com/thejpster">theJPster</a> would love to set up a Rust stall, to talk to everyone about the advantages Rust offers and how they can get in to Rust on the Raspberry Pi. But to make that work, he needs your help! If you're interested, contact <a href="https://twitter.com/therealjpster">@therealjpster</a> on Twitter or email <a href="mailto:pi@thejpster.org.uk">pi@thejpster.org.uk</a>.</li> +<li>Some members of the embedded WG will attend the <a href="https://paris.rustfest.eu/">RustFest</a> impl days in two weeks. If you want to make Rust awesome for embedded development come help us! We have <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/90#issuecomment-389321129">tasks with mentors and some hardware to give away!</a>. Let us know if you are interested in helping out by commenting on that issue.</li> +</ul> + + + + + The Path Towards Stable + Sun, 13 May 2018 00:00:00 +0000 + https://blog.rust-embedded.org/the-path-towards-stable/ + https://blog.rust-embedded.org/the-path-towards-stable/ + <h2 id="cortex-m-library-development-now-possible-on-beta-and-the-path-towards-stable-embedded-rust">Cortex-M library development now possible on beta and the path towards stable embedded Rust</h2> +<blockquote> +<p><strong>TL;DR</strong></p> +<ul> +<li>1.27 = embedded (Cortex-M) <em>library</em> development on stable</li> +<li>1.28 or 1.29 = embedded (Cortex-M) <em>application</em> development on stable</li> +<li>We are making breaking changes in the ecosystem in order to move towards development on the +stable channel</li> +<li>If you are a crate maintainer / author, make sure you test your crates with the new versions of +<code>cortex-m</code> (and similar) on the current <code>beta</code> release of Rust</li> +<li>If the latest version of a dependency doesn't compile on <code>beta</code>, file an issue and/or ping us on +the #rust-embedded IRC channel</li> +<li>Thanks for your patience!</li> +</ul> +</blockquote> +<p>We are happy to announce that <em>library</em> development for the Cortex-M targets is now possible on the +beta channel! :tada:</p> +<span id="continue-reading"></span> +<p>For example, to cross compile a library crate for the Cortex-M3 you would run these commands:</p> +<pre style="background-color:#2b303b;"> +<code class="language-console" data-lang="console"><span style="color:#c0c5ce;">$ # switch to the beta channel +$ rustup default beta + +$ # install the rust-std component (pre-compiled core) for the target +$ rustup target add thumbv7m-none-eabi + +$ # get some source to build +$ cargo clone cortex-m --vers 0.5.0 &amp;&amp; cd cortex-m + +$ # then It Just Works +$ cargo build --target thumbv7m-none-eabi +</span></code></pre> +<p>What about embedded <em>application</em> development? There is just a single unstable feature that prevents +us from building a <code>no_std</code> binary on stable: the <code>panic_fmt</code> lang item. This unstable feature will +soon be removed in favor of the <code>#[panic_implementation]</code> feature (<a href="https://github.com/rust-lang/rust/pull/50338">implementation PR</a>), which is +slated for stabilization in time for the edition release (we are hoping to stabilize it as early as +1.28 but we'll see).</p> +<h2 id="making-the-cortex-m-ecosystem-work-on-stable">Making the Cortex-M ecosystem work on stable</h2> +<p>&quot;<code>no_std</code> binaries are <em>possible</em> on stable&quot; is very different from &quot;<em>my</em> embedded application +builds on stable&quot;. The later requires all the dependencies to also compile on stable. So we are +starting to migrate the Cortex-M ecosystem to work on stable. All the crates listed below are now +compiling on the beta channel.</p> +<p>Legend: <code>crate-name</code> - link to CHANGELOG - link to stabilization PR - ~removed unstable features~</p> +<ul> +<li><a href="https://docs.rs/cortex-m-quickstart/%7E0.3"><code>cortex-m-quickstart</code></a> - <a href="https://github.com/japaric/cortex-m-quickstart/blob/master/CHANGELOG.md#v030---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/cortex-m-quickstart/pull/29">PR</a></li> +</ul> +<ul> +<li><a href="https://crates.io/crates/cortex-m-rt/0.5.0"><code>cortex-m-rt</code></a> - <a href="https://github.com/japaric/cortex-m-rt/blob/master/CHANGELOG.md#v050---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/cortex-m-rt/pull/69">PR</a> - ~asm!~ ~core_intrinsics~ ~global_asm!~ +~lang_items~ ~linkage~ ~naked_functions~ ~used~</li> +</ul> +<ul> +<li><a href="https://crates.io/crates/cortex-m-semihosting/0.3.0"><code>cortex-m-semihosting</code></a> - <a href="https://github.com/japaric/cortex-m-semihosting/blob/master/CHANGELOG.md#v030---2018-05-10">CHANGELOG</a> - <a href="https://github.com/japaric/cortex-m-semihosting/pull/16">PR</a></li> +</ul> +<ul> +<li><a href="https://crates.io/crates/cortex-m/0.5.0"><code>cortex-m</code></a> - <a href="https://github.com/japaric/cortex-m/blob/master/CHANGELOG.md#v050---2018-05-11">CHANGELOG</a> - <a href="https://github.com/japaric/cortex-m/pull/88">PR</a> - ~asm!~ ~const_fn~</li> +</ul> +<ul> +<li><a href="https://crates.io/crates/embedded-hal/0.2.0"><code>embedded-hal</code></a> - <a href="https://github.com/japaric/embedded-hal/blob/master/CHANGELOG.md#v020---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/embedded-hal/pull/80">PR</a> - ~never_type~</li> +</ul> +<ul> +<li><a href="https://crates.io/crates/f3/0.6.0"><code>f3</code></a> - <a href="https://github.com/japaric/f3/blob/master/CHANGELOG.md#v060---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/f3/pull/93">PR</a></li> +</ul> +<ul> +<li><a href="https://crates.io/crates/l3gd20/0.2.0"><code>l3gd20</code></a> - <a href="https://github.com/japaric/l3gd20/blob/master/CHANGELOG.md#v020---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/l3gd20/pull/4">PR</a> - ~Unsized~</li> +</ul> +<ul> +<li><a href="https://crates.io/crates/lsm303dlhc/0.2.0"><code>lsm303dlhc</code></a> - <a href="https://github.com/japaric/lsm303dlhc/blob/master/CHANGELOG.md#v020---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/lsm303dlhc/pull/4">PR</a> - ~Unsized~</li> +</ul> +<ul> +<li><a href="https://crates.io/crates/stm32f103xx/0.10.0"><code>stm32f103xx</code></a> - <a href="https://github.com/japaric/stm32f103xx/blob/master/CHANGELOG.md#v0100---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/stm32f103xx/pull/24">PR</a> - ~const_fn~ ~global_asm!~ ~try_from~ +~use_extern_macros~ ~used~</li> +</ul> +<ul> +<li><a href="https://crates.io/crates/stm32f30x-hal/0.2.0"><code>stm32f30x-hal</code></a> - <a href="https://github.com/japaric/stm32f30x-hal/blob/master/CHANGELOG.md#v020---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/stm32f30x-hal/pull/25">PR</a> - ~never_type~</li> +</ul> +<ul> +<li><a href="https://crates.io/crates/stm32f30x/0.7.0"><code>stm32f30x</code></a> - <a href="https://github.com/japaric/stm32f30x/blob/master/CHANGELOG.md#v070---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/stm32f30x/pull/16">PR</a> - ~const_fn~ ~global_asm!~ ~try_from~ +~use_extern_macros~ ~used~</li> +</ul> +<ul> +<li><a href="https://crates.io/crates/svd2rust/0.13.0"><code>svd2rust</code></a> (output of) - <a href="https://github.com/japaric/svd2rust/blob/master/CHANGELOG.md#v0130---2018-05-12">CHANGELOG</a> - <a href="https://github.com/japaric/svd2rust/pull/203">PR</a> - ~const_fn~ ~global_asm!~ +~try_from~ ~use_extern_macros~ ~used~</li> +</ul> +<p>There's a lot of breaking changes there but the most visible one is <code>cortex-m-rt</code> because it changes +how applications are structured. Check the <a href="https://docs.rs/cortex-m-quickstart/%7E0.3"><code>cortex-m-quickstart</code></a> template for instructions on +how to set up an embedded application using the latest versions of everything.</p> +<p>There are still a lot of crates that will need to be updated to work on beta. Among the more general +purpose ones we have <a href="https://crates.io/crates/heapless"><code>heapless</code></a> and <a href="https://crates.io/crates/cortex-m-rtfm"><code>cortex-m-rtfm</code></a>, which needs to be update to work with +<code>cortex-m-rt</code> v0.5.0.</p> +<h3 id="how-you-can-help-us">How you can help us</h3> +<p>Try to compile your Cortex-M crate using the beta channel! If your crate is an application the build +will certainly fail, but check if all the dependencies, excluding the <a href="https://crates.io/keywords/panic-impl">panic handler crate</a>, +compile on beta. If any dependency doesn't compile on the beta channel let the author know, but +first check if there's a new version of the crate that already compiles on the beta channel. And if +you feel up to the task you could even send a PR to the dependency to make it compile on beta -- the +list of stabilization PRs in the previous section may give you a clue on how to move the crate to +beta.</p> +<p>If you are the author of a Cortex-M device crate, a crate generated using <code>svd2rust</code>, moving it to +stable only requires regenerating it using <code>svd2rust</code> v0.13.0. Do note that the generation process +<a href="https://docs.rs/svd2rust/0.13.0/svd2rust/#usage">has changed</a> for the Cortex-M target; also make sure you bump the minor version when you publish a +new version.</p> +<p>If you are the author of a driver crate or a HAL implementation, please update your crate to use +v0.2.0 of <code>embedded-hal</code> and test that it builds on beta. Make sure you bump the minor version when +you publish a new version of your crate -- bumping the version of the <code>embedded-hal</code> dependency is a +breaking change (drivers that depend on <code>embedded-hal</code> v0.1.0 can't be used with HAL implementation +crates that depend on <code>embedded-hal</code> v0.2.0).</p> +<p>If you are porting an application to the newest <code>cortex-m-*</code> crates you may hit these errors:</p> +<ul> +<li>&quot;error: requires <code>start</code> lang_item&quot; on binary crates. You need to switch from the standard <code>main</code> +interface to <code>#![no_main]</code> + <code>entry!</code>. Use the <a href="https://docs.rs/cortex-m-quickstart/0.3.0/cortex_m_quickstart/examples/_0_minimal/index.html">examples</a> in the quickstart template as a +reference.</li> +</ul> +<ul> +<li>&quot;error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple +variants&quot;. <code>const fn</code> is not a stable feature so it's not used in the API by default. The +<code>cortex-m</code> provides a <code>&quot;const-fn&quot;</code> feature to opt into this unstable feature and expose <code>const</code> +functions in the API; other dependencies should / probably provide a similar feature.</li> +</ul> +<h2 id="what-does-this-all-mean-for-you">What does this all mean for you?</h2> +<p>To those of you who have been doing embedded development on nightly: things will get <em>much easier</em> +from now on. We have reduced the number of unstable features in core crates of the Cortex-M +ecosystem to <strong>zero</strong>. Although you will have to continue to use nightly for application development +you can expect zero breakage from these crates when updating the nightly compiler. There is one +expected breakage coming soon though: <code>panic_fmt</code> will be removed as announced above. This will +break the <a href="https://crates.io/keywords/panic-impl">panic handler crates</a>; however, the breakage will be isolated to those crates and +the fix will consist of simply updating the dependency version.</p> +<p>To those of you who have been meaning to dive into embedded Rust development: we'll soon be done +with our &quot;embedded Rust on stable&quot; tasks and we'll move our focus to documenting the embedded +development process, tooling and ecosystem. The <a href="https://github.com/rust-lang-nursery/embedded-wg/blob/master/books/embedded-rust-book/README.md">embedded Rust book</a> will become the resource +to get started on embedded Rust, but it doesn't quite exist right now.</p> +<h2 id="what-about-architectures-other-than-arm-cortex-m">What about architectures other than ARM Cortex-M?</h2> +<p>The path carved for ARM Cortex-M can be followed by the other architectures (ARM Cortex-R, AVR, +MSP430, RISCV, etc.). Each architecture presents its own extra set of challenges though:</p> +<ul> +<li> +<p>MSP430 being the second oldest embedded / <code>no_std</code> target is the closest one to make it to stable +(as a tier 2 target) by the edition release. The main blocker is that <code>extern &quot;msp430-interrupt&quot;</code> +is not available on stable but I think that may be possible to work around using external C / +assembly files + FFI.</p> +</li> +<li> +<p>Both AVR and RISCV are blocked from being included in the Rust compiler due to either the +immaturity of the LLVM backend or LLVM backend bugs. Not many (embedded) Rust developers can also +hack LLVM backends so we are short handed on the AVR front; OTOH, the RISCV is being actively +developed by third parties so it's probably just a matter of time before we add it to rustc.</p> +</li> +<li> +<p>ARM Cortex-R LLVM backend is probably in good shape due to the similarities between its +instruction set and the ARM Cortex-M instruction set, so adding the target to the compiler should +be straightforward. However, the crate ecosystem is nonexistent at this point so there's a lot of +work to be done on that front.</p> +</li> +</ul> +<hr /> +<p>This work is part of the <a href="https://github.com/rust-lang-nursery/embedded-wg">embedded WG</a> effort towards <a href="https://github.com/rust-lang-nursery/embedded-wg">making embedded development possible on +the stable channel</a>. (We are almost done! :tada:)</p> + + + + + The Embedded Working Group Newsletter - 4 + Sat, 28 Apr 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-4/ + https://blog.rust-embedded.org/newsletter-4/ + <p>This is the fourth bi-weekly newsletter of the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/93">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>The <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> IRC meetings are now explicitly public, and the agendas for the next meeting can be found in the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues">WG Issues</a>, like <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/91">this issue</a> for the next meeting</li> +<li><a href="https://github.com/djmcgill">David</a> shared his utility <a href="https://github.com/djmcgill/form"><code>Form</code></a>, which takes a single <code>lib.rs</code> (like those created by <code>svd2rust</code> or <code>bindgen</code>), and splits it into structured modules. Check out the <a href="https://github.com/jamesmunns/nrf52/tree/master/src"><code>nrf52</code></a> Chip Support Crate as an example, and try it out for your generated projects!</li> +<li><a href="https://github.com/astro">astro</a> shared <a href="https://crates.io/crates/managed"><code>managed</code></a>, A library that provides a way to logically own objects, whether or not heap allocation is available</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/93">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/danielgallagher0">Daniel</a> started work on <a href="https://github.com/danielgallagher0/bluetooth-hci"><code>bluetooth-hci</code></a>, an abstraction layer for HCI based Bluetooth Controllers, and is using it in his <a href="https://github.com/danielgallagher0/bluenrg"><code>bluenrg</code></a> crate for STMicro's BlueNRG RF modules</li> +<li><a href="https://github.com/cr1901">cr1901</a> shared his <a href="https://github.com/cr1901/AT2XT"><code>AT2XT</code></a> project, an adapter that allows use of low cost PS2 keyboards with older computers that expect (now very expensive) XT keyboards. The firmware for this project is based on <code>rtfm</code>, and runs on an <code>msp430</code> microcontroller. Check out the <a href="https://github.com/rust-lang-nursery/embedded-wg/pull/94#issuecomment-385172043">short blurb</a> by <a href="https://github.com/cr1901">cr1901</a> summarizing the project</li> +<li><a href="https://github.com/hannobraun">hannobraun</a> released v0.3 of his <a href="https://crates.io/crates/lpc82x"><code>lpc82x</code></a> Chip Support Crate for NXP's LPC82x family of microcontrollers, as well as v0.1 of <a href="https://crates.io/crates/lpc82x-hal"><code>lpc82x-hal</code></a>. Check out the <a href="https://users.rust-lang.org/t/lpc82x-hal-0-1-hardware-abstraction-layer-for-nxp-lpc82x-mcus/17116">lpc82x-hal announcement</a> here!</li> +<li><a href="https://github.com/japaric">japaric</a> released v0.3.1 of <a href="https://crates.io/crates/heapless"><code>heapless</code></a> which now contains fixed capacity implementations of <code>HashMap</code> and <code>HashSet</code> that work on <code>no_std</code>, do not require an allocator, and use <code>u32</code> hashes (instead of the default <code>u64</code>).</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">12</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">10</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#board-support-crates">Board Support Crates</a></td><td align="left">released</td><td align="left">6</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">7</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">27</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>The <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> is looking for contributors for the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/90">Rustfest Impl Period</a>. If you will be attending RustFest in Paris, let us know!</li> +<li>Progress is being made towards <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/42#issuecomment-384524779">Stable Embedded Rust</a>, try out the current preview, and we would love some feedback!</li> +</ul> + + + + + The Embedded Working Group Newsletter - 3 + Sat, 14 Apr 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-3/ + https://blog.rust-embedded.org/newsletter-3/ + <p>This is the third bi-weekly newsletter of the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/84">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li>Crates for the Embedded Rust Ecosystem are now being tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository</li> +<li>Progress has been made as part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/42">Embedded Rust on Stable</a> initiative, including: +<ul> +<li><code>extern crate compiler_builtins</code> is <a href="https://users.rust-lang.org/t/psa-breaking-change-extern-crate-compiler-builtins-is-now-included-in-no-std-crates/16704">now included in the no_std prelude</a></li> +<li><a href="https://users.rust-lang.org/t/psa-you-no-longer-need-xargo-to-do-arm-cortex-m-development/16703">xargo no longer needed</a> for ARM Cortex-M development</li> +</ul> +</li> +<li>We also made some progress on simplifying the embedded development setup: You can now link Embedded Rust programs <a href="https://users.rust-lang.org/t/cortex-m-rt-v0-4-0-now-you-can-link-arm-cortex-m-programs-using-lld/16751">using lld</a></li> +<li><a href="https://github.com/ithinuel">Wilfried</a> kicked off a blog series about <a href="http://ithinuel.me/embedded-rust-why/">using embedded rust</a></li> +<li><a href="https://github.com/andre-richter">Andre Richter</a> is writing a tutorial for using Rust to write <a href="https://github.com/andre-richter/rust-raspi3-tutorial">bare metal Raspberry Pi 3</a> applications</li> +<li>The Embedonomicon and the Embedded Rust Books are <a href="https://github.com/rust-lang-nursery/embedded-wg/pull/78">now kept</a> in the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> repository, and pull requests are welcome!</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/84">the next newsletter</a>, we would love to show it off!</p> +<ul> +<li><a href="https://github.com/japaric">japaric</a> released an initial version of <a href="https://github.com/japaric/cargo-binutils">cargo-binutils</a>, which will allow you to use LLVM's binutils (like <code>nm</code>, <code>size</code>, <code>objcopy</code>, etc.) in the format <code>cargo objcopy</code> (once <a href="https://github.com/rust-lang/rust/issues/49584">issue 49584</a> has landed)</li> +<li><a href="https://github.com/myeisha">myeisha</a> released the first version of their <a href="https://crates.io/crates/thumb2-stack-size">thumb2-stack-size</a> tool, which helps determine the maximum stack size used in embedded code</li> +</ul> +<h3 id="embedded-hal-ecosystem-crates"><code>embedded-hal</code> Ecosystem Crates</h3> +<p>As part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39">Weekly Driver Initiative</a>, crates that are part of the <code>embedded-hal</code> ecosystem are now tracked in the <a href="https://github.com/rust-embedded/awesome-embedded-rust">Awesome Embedded Rust</a> repository. Here is a current snapshot of what is available there:</p> +<table><thead><tr><th align="left">Type</th><th align="left">Status</th><th align="left">Count</th></tr></thead><tbody> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#device-crates">Device Crates</a></td><td align="left">released</td><td align="left">13</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#hal-implementation-crates">HAL Impl Crates</a></td><td align="left">released</td><td align="left">10</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#driver-crates">Driver Crates Released</a></td><td align="left">released</td><td align="left">7</td></tr> +<tr><td align="left"><a href="https://github.com/rust-embedded/awesome-embedded-rust#wip">Driver Crates WIP</a></td><td align="left">WIP</td><td align="left">26</td></tr> +</tbody></table> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li>We need help working on <a href="https://github.com/rust-lang/rust/issues/44489#issuecomment-381324623">RFC2070</a>, stabilizing usage of custom Panic behavior. <a href="https://github.com/nagisa">nagisa</a> is willing to mentor!</li> +<li>If you use inline assembly in your Embedded Rust programs, help us capture what assembly operations are <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/63#issue-305114817">used most often</a> so we can stabilize them as intrinsics</li> +</ul> + + + + + The Embedded Working Group Newsletter - 2 + Thu, 29 Mar 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-2/ + https://blog.rust-embedded.org/newsletter-2/ + <p>This is the second bi-weekly newsletter of the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/72">the next newsletter</a>, make sure to leave a comment on the issue.</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li><a href="https://github.com/dbrgn">dbrgn</a> has kicked off an investigation on how to <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/70">mock embedded-hal</a> to make testing sensors easier</li> +<li><a href="https://github.com/Emilgardis">emilgardis</a> and <a href="https://github.com/ryankurte">ryankurte</a> are busy <a href="https://github.com/japaric/svd/issues/46">refactoring</a> the <a href="https://github.com/japaric/svd">svd-parser</a> crate</li> +<li><a href="https://github.com/japaric">japaric</a>, <a href="https://github.com/hannobraun">hannobraun</a>, and <a href="https://github.com/jamesmunns">jamesmunns</a> from the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a> attended the 2018 Rust All Hands in Berlin, working on our goal to make <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/42">stable embedded rust development</a> possible in 2018. See the bottom of this post for more details!</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/72">the next newsletter</a>, we would love to show it off!</p> +<h3 id="embedded-hal-drivers"><code>embedded-hal</code> drivers</h3> +<p>This is a list of recently released drivers that are part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39">Weekly Driver Initiative</a>. There are currently 5 Released Drivers, 14 WIP Drivers, and lots of TODOs!</p> +<ul> +<li><a href="https://github.com/danielgallagher0">danielgallagher0</a> has released their <a href="https://medium.com/@pdanielgallagher/hts221-humidity-and-temperature-sensor-88056ea9e5fa">hts221</a> humidity and temperature sensor driver</li> +<li><a href="https://github.com/MrBuddyCasino">MrBuddyCasino</a> has released their I2C based <a href="https://crates.io/crates/mcp9808">mcp9808</a> temperature sensor driver</li> +<li><a href="https://github.com/ilya-epifanov">Ilya Epifanov</a> has released their I2C based <a href="https://github.com/ilya-epifanov/si5351">si5351</a> CMOS clock generator driver, check out the <a href="https://docs.rs/si5351/0.1.5/si5351/">si5351 docs</a> for more info</li> +<li><a href="https://github.com/RandomInsano">Edwin Amsler</a> is working on their <a href="https://github.com/RandomInsano/axp209-rs">axp209</a> PMIC driver</li> +<li><a href="https://github.com/dbrgn">dbrgn</a> is working on their Sensirion <a href="https://github.com/dbrgn/sgp30-rs">sgp30</a> low-power gas sensor driver</li> +<li><a href="https://github.com/pcein">pcein</a> has started work on their <a href="https://github.com/pcein/pcd8544">pcd8544</a> for SPI based LCD controllers used in displays like the Nokia 5110</li> +<li><a href="https://github.com/nordmoen">nordmoen</a> is working on their driver for the <a href="https://github.com/nordmoen/hc-sr04">hc-sr04</a> ultrasonic distance sensor</li> +</ul> +<h3 id="embedded-hal-board-chip-support-crates"><code>embedded-hal</code> Board/Chip Support Crates</h3> +<ul> +<li><a href="https://github.com/DoumanAsh">DoumanAsh</a> has started work on their <a href="https://github.com/DoumanAsh/stm32l4x6_hal">stm32l4x6-hal</a> chip support crate</li> +</ul> +<h2 id="thanks">Thanks</h2> +<ul> +<li>Thanks to all of the Rust Team and Working Group members who took time at the All Hands to tackle some important Embedded Issues</li> +<li>Thanks to <a href="https://github.com/alexcrichton">Alex Chrichton</a> who pushed a fix to a <a href="https://github.com/rust-lang/rust/pull/49316">linker issue</a> mentioned in our <a href="https://github.com/rust-lang-nursery/embedded-wg/blob/master/newsletters/2018-03-15.md">last newsletter</a></li> +</ul> +<h2 id="help-wanted">Help Wanted</h2> +<ul> +<li><a href="https://github.com/SimonSapin">Simon Sapin</a> posted some working code for the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39#issuecomment-375262785">DS3234</a> SPI RTC, and is looking for someone to turn it into a maintained crate!</li> +</ul> +<p>If you have an embedded project that could use contributors or maintainers, leave a comment for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/72">the next newsletter</a>!</p> +<h1 id="special-feature-the-embedded-wg-at-the-2018-rust-all-hands">Special Feature: The Embedded WG at the 2018 Rust All Hands</h1> +<p>This week 15 or so Rust teams/working groups met for the Rust All Hands event in Berlin. Some members of the embedded WG were present and we had a chance to talk to the compiler, core and infra teams.</p> +<p>These are the highlights of our talks.</p> +<h2 id="embedded-rust-on-stable">Embedded Rust on stable</h2> +<p>We had previously identified 3 unstable features / issues that tie embedded development to the nightly channel in https://github.com/japaric/stable-embedded-rust. We talked to the other Rust teams about the possibility of addressing these issues in time for the 2018 edition release and the conclusion was that they thought that the timeline was possible. These are the 3 unstable features we are referring to:</p> +<h3 id="unstable-feature-1-xargo">Unstable Feature #1: <code>xargo</code></h3> +<p>We'll ship a rust-std component (pre-compiled <code>core</code>+<code>compiler-builtins</code>) for the <code>thumb*</code> and <code>msp430</code> targets. This removes the need for <code>xargo</code> so people will be able to do something like the following to cross compile to ARM Cortex-M:</p> +<pre style="background-color:#2b303b;"> +<code class="language-bash" data-lang="bash"><span style="color:#bf616a;">rustup</span><span style="color:#c0c5ce;"> target add thumb7m-none-eabi +</span><span style="color:#bf616a;">cargo</span><span style="color:#c0c5ce;"> build</span><span style="color:#bf616a;"> --target</span><span style="color:#c0c5ce;"> thumbv7m-none-eabi +</span></code></pre> +<p><strong>Tracking issue</strong>: <a href="https://github.com/rust-lang/rust/issues/49382">rust-lang/rust#49382</a>.</p> +<h3 id="unstable-feature-2-compiler-builtins">Unstable Feature #2: <code>compiler-builtins</code></h3> +<p><code>extern crate compiler_builtins</code> is unstable to directly use. The fix we have decided on is to inject that as part of the prelude you get from <code>#![no_std]</code>.</p> +<p>So, today <code>#![no_std]</code> expands to something like this:</p> +<pre style="background-color:#2b303b;"> +<code class="language-rust" data-lang="rust"><span style="color:#c0c5ce;">#![</span><span style="color:#bf616a;">no_std</span><span style="color:#c0c5ce;">] +</span><span style="color:#b48ead;">extern crate</span><span style="color:#c0c5ce;"> core; +</span></code></pre> +<p>With our change the expansion will run like this:</p> +<pre style="background-color:#2b303b;"> +<code class="language-rust" data-lang="rust"><span style="color:#c0c5ce;">#![</span><span style="color:#bf616a;">no_std</span><span style="color:#c0c5ce;">] +</span><span style="color:#b48ead;">extern crate</span><span style="color:#c0c5ce;"> core; + +</span><span style="color:#65737e;">// but this doesn&#39;t #![feature(compiler_builtins_lib)] +</span><span style="color:#b48ead;">extern crate</span><span style="color:#c0c5ce;"> compiler_builtins; +</span></code></pre> +<p>In the future we might want to merge <code>compiler-builtins</code> into <code>core</code> but that requires more effort and can still be done if we do the <code>#![no_std]</code> prelude approach right now.</p> +<p><strong>Tracking issue:</strong> <a href="https://github.com/rust-lang/rust/issues/49380">rust-lang/rust#49380</a></p> +<h3 id="unstable-feature-3-panic-fmt">Unstable Feature #3: <code>panic_fmt</code></h3> +<p>There's an accepted RFC (#2070) for a stable mechanism to select the behavior of <code>panic!</code> in <code>no_std</code> context, and there's a know issue where the arguments of <code>panic_fmt</code> are kept in the binary even when they are unused by the <code>panic_fmt</code> implementation (cf. <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/41">rust-lang/embedded-wg#41</a>).</p> +<p>The main concern here was whether we'll be able to fix the binary size problem with the accepted design or if we'll need some new design. The compiler team thinks that this can be fixed with the existing design using MIR only rlibs but it's unlikely this will get fixed in time for the edition release. <a href="https://github.com/nagisa">nagisa</a> will likely propose an alternate solution that involves having Cargo select the panic provider crate.</p> +<h2 id="non-critical-unstable-features">Non critical unstable features</h2> +<p>There are some other unstable features that don't prevent you from doing embedded development, however they come up often when doing no-std development. We had a chat with people on the compiler team about them.</p> +<h3 id="unstable-feature-4-const-fn">Unstable Feature #4: <code>const fn</code></h3> +<p>This feature has been proposed for stabilization (cf. <a href="https://github.com/rust-lang/rust/issues/24111#issuecomment-376649804">rust-lang/rust#24111</a>).</p> +<h3 id="unstable-feature-5-asm">Unstable Feature #5: <code>asm!</code></h3> +<p><strong>Background</strong>: Some assembly operations can be implemented as external assembly files that are then called into using FFI; other ops though do need to be inlined into the function from which they are called to prevent losing semantics. Using external assembly file can be done on the stable channel. The second type of operation requires the unstable <code>asm!</code> macro.</p> +<p>The compiler team is not 100% sure on whether they want to stabilize inline assembly for the edition release. The embedded WG has proposed an alternative proposal: expose <em>some</em> assembly operations that need to be inlined as &quot;Rust intrinsics&quot; -- in a similar fashion to how SIMD is being implemented; these intrinsics would be in the <code>core::asm::$ARCH</code> module and they could either be implemented by lowering to a LLVM intrinsic or using inline assembly. For example:</p> +<pre style="background-color:#2b303b;"> +<code class="language-rust" data-lang="rust"><span style="color:#b48ead;">pub mod </span><span style="color:#c0c5ce;">asm { + </span><span style="color:#b48ead;">pub mod </span><span style="color:#c0c5ce;">arm { + #[</span><span style="color:#bf616a;">inline</span><span style="color:#c0c5ce;">(always)] + </span><span style="color:#b48ead;">pub fn </span><span style="color:#8fa1b3;">cpsid</span><span style="color:#c0c5ce;">() { + </span><span style="color:#b48ead;">unsafe </span><span style="color:#c0c5ce;">{ + asm!(&quot;</span><span style="color:#a3be8c;">cpsid i</span><span style="color:#c0c5ce;">&quot; ::: &quot;</span><span style="color:#a3be8c;">memory</span><span style="color:#c0c5ce;">&quot; : &quot;</span><span style="color:#a3be8c;">volatile</span><span style="color:#c0c5ce;">&quot;); + } + } + } +} +</span></code></pre> +<p>These would be stable APIs with an unstable implementation. If LLVM assembler syntax changes, the implementations of these functions would have to be updated.</p> +<p>The embedded WG will submit an RFC proposing the <code>asm</code> module and that will include a list of assembly operations that (a) are common and (b) need to be inlined for different architectures.</p> +<h3 id="unstable-feature-6-used">Unstable Feature #6: <code>#[used]</code></h3> +<p>This experimental feature has been in the compiler for a while and it's required in some scenarios when using LTO to prevent the compiler from dead-stripping some function / <code>static</code> that needs to be in the final binary.</p> +<p>We'll try to get it stabilized by the edition release but it's not a high priority feature.</p> +<h2 id="stability-of-the-embedded-targets">Stability of the Embedded Targets</h2> +<p>We don't only want to make embedded Rust possible on stable; we also want to make sure the embedded targets don't regress. So we are going to add tests to rust-lang/rust CI to make sure regression block PRs from landing.</p> +<p>That effectively will make some of the embedded targets into the tier 1 platform. The core team is fine with adding the <code>thumb*</code> targets (ARM Cortex-M) to tier 1. Less maintained, still in development and not fully mature targets like AVR, MSP430 and RISCV will become tier 2 -- they'll be tested but won't block PRs and rust-std binaries will be produced but it's not guaranteed there will be binaries available for all nightly / beta / stable releases.</p> +<p>We'll open an issue to discuss with the infra team the exact tests we want to add and track progress on that, but have already told them about the kind of tests we want to add and they thought those kind of tests are possible to implement. The kind of tests we discussed were:</p> +<ul> +<li>It compiles and links</li> +<li>Runs the cross compiled binary in QEMU doesn't crash and exits with exit code 0.</li> +<li>Tracking the binary size of a program compiled with <code>-Os</code> / <code>-Oz</code> and notify someone or fail the build if the size changes by +/- 5-10% or something.</li> +</ul> +<h2 id="llvm-backends-that-are-not-yet-in-rustc">LLVM backends that are not yet in rustc</h2> +<p>There are two embedded LLVM backends that have not yet been enabled in rustc for different reasons: AVR and RISCV.</p> +<p>In the case of AVR the main reason is that some LLVM codegen bugs prevent you from building core for AVR. These bugs are related to 128-bit integers and formatting floats. The libs team discussed this some time ago and they decided they are fine with landing arch specific <code>#[cfg]</code> attributes to remove 128-bit integers and other things like float APIs.</p> +<p>In the case of RISCV the LLVM backend is currently under active development and our current version of LLVM doesn't fully support RISCV. We would have to backport several patches to make RISCV work on our LLVM version. The core team feels OK with backporting those patches as long as they have already landed in upstream LLVM, and are not still under review.</p> +<h2 id="tooling">Tooling</h2> +<p>Getting tooling for e.g. binary inspection (e.g. <code>objdump</code>) can be hard on some platforms (e.g. Windows) specially for architecture which currently are not too widely used (e.g. RISCV). We can improve the situation here by shipping llvm tools with the Rust toolchain -- with one set of those tools you can inspect all the architectures that Rust supports. These are the thoughts of the core / infra team regarding this:</p> +<ul> +<li>We put these tools in the sysroot and have them always shipped with the Rust toolchain so no <code>rustup component add</code> required -- this is already the case with <code>lld</code>. It might not be possible to provide these tools on all platforms but it's very likely they'll be available on tier 1 platforms.</li> +<li>We do <em>not</em> add these tools to the user <code>$PATH</code>. Instead some Cargo subcommand will be created by the embedded WG (e.g. <code>cargo objdump</code>) and that subcommand will look for <code>llvm-objdump</code> in the sysroot and do the right thing.</li> +<li>We make no guarantees about the semantics and interface of these tools being preserved over time (e.g. CLI changes, user facing output format changes, etc.).</li> +</ul> +<h3 id="the-embedded-rust-book">The Embedded Rust Book</h3> +<p>We decided on an initial audience for the embedded book; we will be targeting people that know some embedded stuff <em>and</em> some Rust. The main reason for this is that if someone knows one and not the +other then they can go and read existing Rust documentation or the Discovery book and then read the embedded book. For more details check <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/56">rust-lang-nursery/embedded-wg#56</a>.</p> + + + + + The Embedded Working Group Newsletter - 1 + Thu, 15 Mar 2018 00:00:00 +0000 + https://blog.rust-embedded.org/newsletter-1/ + https://blog.rust-embedded.org/newsletter-1/ + <p>This is the first newsletter of the <a href="https://github.com/rust-lang-nursery/embedded-wg">Embedded WG</a>! We will be releasing this newsletter on a bi-weekly basis, and we are looking to highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!</p> +<span id="continue-reading"></span> +<p>If you want to mention something in <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/65">the next newsletter</a>, make sure to leave a comment on the issue!</p> +<h2 id="highlights">Highlights</h2> +<ul> +<li><a href="https://github.com/helena-project/tock">Tock-OS</a> has released the <a href="https://www.tockos.org/blog/2018/talking-tock-35/">1.0 of their kernel</a>, gotten the Rust Userspace library back in order, and are working on a <a href="https://www.tockos.org/blog/2018/talking-tock-36/">new register interface</a></li> +<li><a href="https://github.com/Emilgardis">Emilgardis</a>, <a href="https://github.com/jamesmunns">jamesmunns</a> and <a href="https://github.com/ryankurte">ryankurte</a> have become collaborators of the <a href="https://github.com/japaric/svd">svd</a> and <a href="https://github.com/japaric/svd2rust">svd2rust</a> projects.</li> +<li><a href="https://github.com/hannobraun">hannobraun</a>, <a href="https://github.com/ilya-epifanov">ilya-epifanov</a>, <a href="https://github.com/thejpster">thejpster</a>, <a href="https://github.com/therealprof">therealprof</a> have become collaborators of the <a href="https://github.com/japaric/embedded-hal">embedded-hal</a> project.</li> +<li><a href="https://github.com/dvc94ch">dvc94ch</a> has created the <a href="https://github.com/riscv-rust">riscv-rust</a> organization for all your embedded RISCV needs!</li> +<li><a href="https://github.com/dylanmckay">dylanmckay</a> has begun <a href="https://github.com/avr-rust/rust/pull/91">rebasing</a> the avr-rust/rust fork onto a recent rust-lang/rust version, bringing in LLVM 6.0 support.</li> +</ul> +<h2 id="embedded-projects">Embedded Projects</h2> +<p>If you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/65">the next newsletter</a>, we would love to show it off!</p> +<h3 id="embedded-hal-drivers"><code>embedded-hal</code> drivers</h3> +<p>This is a list of recently released drivers that are part of the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/39">Weekly Driver Initiative</a>. There are currently 5 Released Drivers, 14 WIP Drivers, and lots of TODOs!</p> +<ul> +<li><a href="https://github.com/pcein">pcein</a> has <a href="http://pramode.in/2018/02/24/an-introduction-to-writing-embedded-hal-based-drivers-in-rust/">released</a> the third weekly driver for the <a href="https://crates.io/crates/adc-mcp3008"><code>adc-mcp3008</code></a>, an 8-channel 10-bit ADC.</li> +<li><a href="https://github.com/japaric">japaric</a> has <a href="http://blog.japaric.io/wd-4-enc28j60/">released</a> the fourth weekly driver for the <a href="https://crates.io/crates/enc28j60"><code>enc28j60</code></a>, an Ethernet controller with SPI interface.</li> +<li><a href="https://github.com/dbrgn">dbrgn</a> has <a href="https://blog.dbrgn.ch/2018/3/13/rust-mcp3425-driver/">released</a> the fifth weekly driver for the <a href="https://crates.io/crates/mcp3425"><code>mcp3425</code></a>, a 16-bit ADC with I2C interface.</li> +</ul> +<h2 id="thanks">Thanks</h2> +<ul> +<li>Thanks to everyone who has been commenting on the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues">Embedded WG Issues</a>, especially for the <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/56">Embedded Rust Book</a> tracking issue!</li> +<li><a href="https://github.com/varkor">varkor</a> has fixed a <a href="https://github.com/rust-lang/rust/issues/41315">long standing LLVM bug</a>, that artificially increased the binary size of Rust programs, and backported the patch to rustc.</li> +<li>LLD is now being shipped with the Rust toolchain. <a href="https://github.com/FenrirWolf">FenrirWolf</a> <a href="https://github.com/japaric/xargo/pull/200">patched Xargo</a> so that Xargo users can make use of it too.</li> +</ul> +<h2 id="help-wanted">Help Wanted</h2> +<p>If you have an embedded project that could use contributors or maintainers, leave a comment for <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/65">the next newsletter</a>!</p> +<ul> +<li>We are <a href="https://github.com/japaric/cortex-m-rt/issues/53">pretty close</a> to being able to use LLD to link Rust programs compiled for ARM Cortex-M but there are some <a href="https://github.com/japaric/cortex-m-rt/issues/53#issuecomment-371972935">LLD bugs</a> that still need to be fixed. Help reporting these bugs upstream would be greatly appreciated!</li> +<li>Incremental compilation is in the roadmap for this year but it doesn't work with <code>no_std</code> binaries due to an <a href="https://github.com/rust-lang/rust/issues/18807">old rustc bug</a> related to linking. Help us fix it! There's a proposed solution <a href="https://github.com/rust-lang/rust/issues/47074#issuecomment-354588718">here</a>.</li> +<li>We want to explore stabilizing some assembly operations in core as an alternative to the unstable asm! macro. We would love some help identifying the assembly operations that need to be provided this way as some can be implemented in external assembly files without losing +semantics. Details in issue <a href="https://github.com/rust-lang-nursery/embedded-wg/issues/63">#63</a>.</li> +</ul> + + + + + diff --git a/static/screenshot-cortex-a.png b/screenshot-cortex-a.png similarity index 100% rename from static/screenshot-cortex-a.png rename to screenshot-cortex-a.png diff --git a/search_index.en.js b/search_index.en.js new file mode 100644 index 0000000..5c0c428 --- /dev/null +++ b/search_index.en.js @@ -0,0 +1 @@ +window.searchIndex = {"fields":["title","body"],"pipeline":["trimmer","stopWordFilter","stemmer"],"ref":"id","version":"0.9.5","index":{"body":{"root":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}},"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":3},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":3}}},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3}}},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1},"1":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}}},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951}},"df":1},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,".":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1},"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":2}}},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1},"6":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}},"x":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}}}},"9":{"docs":{},"df":0,")":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}}}}}}},"1":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":9,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.0}},"df":6,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772}},"df":2}}},"2":{"docs":{},"df":0,"7":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1},"8":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":2},"9":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":3}},"7":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":5,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2},"x":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":3},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4,"0":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"8":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":1}},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":4},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":4,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2,"7":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}},"8":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":2,"7":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":3,"1":{"docs":{},"df":0,"7":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1},"8":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.6457513110645907}},"df":7},"9":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":4}},"2":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.23606797749979}},"df":2},"2":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1,"9":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1,"8":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"3":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2,":":{"docs":{},"df":0,"5":{"docs":{},"df":0,"9":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1},"1":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":3,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1}}},"8":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}}},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}}},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":6,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2},"9":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":1},"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}},"4":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":5,"0":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":2,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}}}}}},"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"8":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1}}}}},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":4,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"5":{"docs":{},"df":0,"9":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":4,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":2}},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}}},"8":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951}},"df":4,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,".":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}}}}}},"p":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,"h":{"docs":{},"df":0,"z":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}},"3":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"7":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}},"x":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}},"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772}},"df":3}}}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":5}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":7}}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":3}}}}}}},"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":3}},"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":15}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}},"u":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":2}},"v":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":8}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":2},"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":2}}}}},"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":18,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951}},"df":1}}},"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951}},"df":3}}}}},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":3}}},"c":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2},"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":18,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":3}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":31}}}}}},"x":{"docs":{},"df":0,"l":{"docs":{},"df":0,"3":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772}},"df":1}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0}},"df":1}}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":7}}}},"o":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":4}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":2},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772}},"df":2}}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951}},"df":5},"w":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":10}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951}},"df":1},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":6}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951}},"df":6}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2}}},"q":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.7320508075688772}},"df":1}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1,";":{"docs":{},"df":0,"&":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}}}},"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951}},"df":1}},"z":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"/":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":5}},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":12}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":9},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"3":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1,"c":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":13}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772}},"df":2}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":10}}}}}}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":3,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"k":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}}}},"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":4}},"g":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":3.1622776601683795}},"df":1,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":3.7416573867739413},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":12,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1},"v":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":5}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":2.0}},"df":3}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951}},"df":1}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}},"k":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":4,"!":{"docs":{},"df":0,"(":{"docs":{},"df":0,"\"":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":8}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":4}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":2}}}}}},"h":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":2,"/":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"*":{"docs":{},"df":0,".":{"docs":{},"df":0,"{":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,",":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,"2":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":6}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":2}}},"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0}},"df":2,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":27}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951}},"df":2}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":5}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0}},"df":2},"y":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":30}}}}},"x":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"9":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}},"b":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951}},"df":4,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0}},"df":4}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}}}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":5}}}}}},"d":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1,"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":9},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":15},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}}}}}}},"c":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":7,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":4}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":5}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.872983346207417},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":7,".":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"p":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":4}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":5}}}}},"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":5,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":9}}},"d":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951}},"df":1,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":12}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"z":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"g":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":31,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951}},"df":1}}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1,"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951}},"df":2}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951}},"df":3,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":25,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}},"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.23606797749979}},"df":14,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"→":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"x":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1},"y":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}},"d":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":1}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":6,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.23606797749979}},"df":2}},"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":5}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3}},"u":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":3}}}},"g":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":7,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951}},"df":2}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":4.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":18,".":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772}},"df":1}}}}},"m":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":1}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}},"y":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951}},"df":1}}}},"c":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":3.4641016151377544},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":9,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":6}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}}}},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":16,"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0}},"df":1}}}}}}}}},"v":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772}},"df":2},"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772}},"df":1,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":4}},"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":3}}}}}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}}}},"c":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"8":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}}},"d":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":31}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}},"f":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":1,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"y":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3},"g":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":14,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.605551275463989}},"df":2}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":13}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}}}},"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.6457513110645907}},"df":6}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":20}}},"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":12}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2,"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":4}},"n":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951}},"df":3}}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":14,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951}},"df":1}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":2}}}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":13}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":3.4641016151377544},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.449489742783178}},"df":35}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":3}},"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":3.4641016151377544},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":2}}}}}}}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":5}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":5}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1},"s":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4}}}},"f":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":5}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951}},"df":3}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":2}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":6,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0}},"df":1}}},"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":6}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":6}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":3.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":7}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":4}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772}},"df":16}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":32},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":11,"+":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}},":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"$":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}}}},"f":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951}},"df":2}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.4142135623730951}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":5.385164807134504},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":3.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":24}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":5}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5}}}},"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"u":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951}},"df":1}}}},"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-12/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-13/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-15/":{"tf":3.4641016151377544},"https://blog.rust-embedded.org/newsletter-16/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-21/":{"tf":3.7416573867739413},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-25/":{"tf":3.872983346207417},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-29/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-5/":{"tf":4.123105625617661},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-7/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-9/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":4.898979485566356},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.6457513110645907}},"df":35,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":3},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":4}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0}},"df":1,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":3}},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":3,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":2},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":3}},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":4}},"5":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":4}},"7":{"docs":{},"df":0,"+":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}},"8":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1,"+":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":3}}},"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"+":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,"+":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":2}}},"8":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":2}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}},"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1},"8":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"2":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}},"4":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}},"9":{"docs":{},"df":0,"+":{"docs":{},"df":0,"7":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}},"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"+":{"docs":{},"df":0,"7":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"+":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"+":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}},"8":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":3}}}}}}}}}}}}}},"c":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":4}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":5}}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}}}}}},"s":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":29}}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":6,"i":{"docs":{},"df":0,"z":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}}},"y":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":5}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":4}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":6,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951}},"df":2}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772}},"df":2},"s":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}},"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":5}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3}},"m":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951}},"df":2}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":2,"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}}}}}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.1622776601683795}},"df":5}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":10}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":19}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}}}}}}}}},"v":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.8284271247461903}},"df":25}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":27,"e":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}}}},"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":8}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"v":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1,")":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":2}},"v":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":11}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":22}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":3}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951}},"df":8}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"7":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2}},"o":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":4,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.449489742783178}},"df":7}}}}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":6}},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8}},"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}},"w":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":3,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-12/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-13/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-19/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-20/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-25/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-26/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":33}}}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":3}},"n":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":5},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":3}}},"v":{"docs":{},"df":0,"c":{"docs":{},"df":0,"9":{"docs":{},"df":0,"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":4}}}},"m":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951}},"df":1}}}}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":4}}}}},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":5}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":4.69041575982343},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":4,"h":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}},"n":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"s":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":2,"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":5},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"h":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951}},"df":1}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":32}}}}}}}},"d":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951}},"df":1}}}}},"g":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.23606797749979}},"df":5,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2}}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":2}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":6}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":6}}}}},"e":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}},"b":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":5.0990195135927845},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-1/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-10/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":3.4641016151377544},"https://blog.rust-embedded.org/newsletter-13/":{"tf":3.4641016151377544},"https://blog.rust-embedded.org/newsletter-14/":{"tf":4.69041575982343},"https://blog.rust-embedded.org/newsletter-15/":{"tf":4.242640687119285},"https://blog.rust-embedded.org/newsletter-16/":{"tf":4.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":3.4641016151377544},"https://blog.rust-embedded.org/newsletter-18/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/newsletter-19/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":5.477225575051661},"https://blog.rust-embedded.org/newsletter-20/":{"tf":3.4641016151377544},"https://blog.rust-embedded.org/newsletter-21/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-22/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-23/":{"tf":3.7416573867739413},"https://blog.rust-embedded.org/newsletter-24/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-25/":{"tf":3.7416573867739413},"https://blog.rust-embedded.org/newsletter-26/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-27/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-28/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":4.242640687119285},"https://blog.rust-embedded.org/newsletter-30/":{"tf":3.7416573867739413},"https://blog.rust-embedded.org/newsletter-31/":{"tf":4.242640687119285},"https://blog.rust-embedded.org/newsletter-4/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-5/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/newsletter-6/":{"tf":4.47213595499958},"https://blog.rust-embedded.org/newsletter-7/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-8/":{"tf":3.7416573867739413},"https://blog.rust-embedded.org/newsletter-9/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":4.69041575982343},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":4.47213595499958},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":5.656854249492381}},"df":37,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951}},"df":1}}}},"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1,"#":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1}}}}}}},":":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":11}}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}}}}}}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}}}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951}},"df":1}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951}},"df":2}}},"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"8":{"docs":{},"df":0,"j":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1,"/":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}}}}}}}},"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}}}}}},"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":2}}}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":7,"[":{"docs":{},"df":0,"e":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":2,"3":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4}},"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":2}}}}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":7},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}}}}}},"v":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":4}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":4,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":3}}}}}}}},"w":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}},"x":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":16}}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6}},"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772}},"df":3}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2},"s":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":5}},"n":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":2,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":3}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1},"s":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":3}},"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":7}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":3}}}}}}},"f":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3},"4":{"docs":{},"df":0,"0":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3},"r":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":6}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":5,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"/":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}}}}}},"c":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-16/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.872983346207417},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":32,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5}}}}},"l":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3},"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951}},"df":4}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951}},"df":5}},"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}},"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.449489742783178}},"df":6,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":7}},"d":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":1},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":4}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":15}}},"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":2},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}},"x":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":3.872983346207417},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":11}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0}},"df":2},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":5}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951}},"df":2}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.7320508075688772}},"df":3}},"w":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":4},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":7,"s":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4}}},"l":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":8}}}},"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":2}}},"k":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":2},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":5}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951}},"df":3}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4}}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":3}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":6}}}}}},"n":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":3,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951}},"df":1}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":3}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4}}},"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":10}}}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":8}}}}},"g":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":5}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":4}}},"c":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"b":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":16}}},"r":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":5}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"v":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.23606797749979}},"df":4}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"_":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0}},"df":1}}}}}}}}},"n":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":4,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":4}},"l":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":2},"g":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":5}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":5}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}}},"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.23606797749979}},"df":34,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":2}}},"w":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":3}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}}}}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4}}}},"h":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":4.898979485566356},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-12/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-19/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-25/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-31/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":33,"/":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1},"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":2}}}},"n":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":1,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":7}}}}}}}},"p":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":5}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":5,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":10}}}},"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951}},"df":1}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}}},"c":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951}},"df":2}},"d":{"docs":{},"df":0,"c":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":35,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":27,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}},"d":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951}},"df":6,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951}},"df":32}}}}},"↔":{"docs":{},"df":0,"︎":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.7320508075688772}},"df":2}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":4}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"3":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,"/":{"docs":{},"df":0,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1}}}}}}}}},"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1}}}}}}}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,"m":{"docs":{},"df":0,"5":{"docs":{},"df":0,"x":{"docs":{},"df":0,"f":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}},"g":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}},"l":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":3}}}},"w":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,".":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":2},"/":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2}},"2":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":6,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"i":{"docs":{},"df":0,"2":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{},"df":0,"(":{"docs":{},"df":0,"d":{"docs":{},"df":0,"p":{"docs":{},"df":0,".":{"docs":{},"df":0,"i":{"docs":{},"df":0,"2":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}}}}}}},"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":23,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":19}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":7}}}},"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":23}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":2}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}}}},"x":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3}}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772}},"df":4,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772}},"df":1,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":31,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":1}}}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"(":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":4}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":5}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":3}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951}},"df":2,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":4}},"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-13/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":13}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":2}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951}},"df":1}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":6}}}}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772}},"df":3}}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":7}}}}},"o":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":2,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5,".":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"q":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-10/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":19}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":13},"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}}}}}}},"j":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":1},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}}}}}},"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":5,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951}},"df":5}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":2}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951}},"df":8,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}},"j":{"docs":{},"df":0,"k":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}},"k":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":8}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":6}}}}}},"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}}}}}}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}},"k":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"k":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.7320508075688772}},"df":3}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":5}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}},"y":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":5}},"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":12,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}}}}},"l":{"docs":{},"df":0,"3":{"docs":{},"df":0,"g":{"docs":{},"df":0,"d":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}},"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"w":{"docs":{},"df":0,"j":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}},"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":11},"g":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":17}}}},"/":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{},"df":0,"#":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3,"#":{"docs":{},"df":0,"2":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"4":{"docs":{},"df":0,"9":{"docs":{},"df":0,"3":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"7":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1}}}}}}}}}}},"_":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":1}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5}}}}},"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8,"_":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":5}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2}}}},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}}}},"c":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}},"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":13}},"d":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3,".":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951}},"df":3},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.449489742783178}},"df":14}}}}},"f":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":4,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5,"u":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":11,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":3.872983346207417},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":6,"=":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951}},"df":1}}}}}}},"u":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":5}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":10}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":6},"v":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0}},"df":5,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}},"g":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":4,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":4,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":3}}}},"o":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":13},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979}},"df":1}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3},"s":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":30}},"w":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":3}}}},"p":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1,"5":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":2}},"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{},"df":0,"h":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}}}},"9":{"docs":{},"df":0,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"y":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}},"x":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"g":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":5.0990195135927845},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":23,"0":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"2":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":2},"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}}}},"3":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772}},"df":2}},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951}},"df":2},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":8}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":4,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":12}}}}}},"j":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3,"/":{"docs":{},"df":0,"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}}}}}}}}},"k":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.23606797749979}},"df":34}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}}}}}},"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":7,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}},"h":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"k":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":2}},"h":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951}},"df":3},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":3.4641016151377544}},"df":5,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951}},"df":1}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}},"x":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}},"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}},"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}},"6":{"docs":{},"df":0,"9":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{},"df":0,"9":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1}}}}},"y":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}}}}}},"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{},"df":0,"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}},"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"9":{"docs":{},"df":0,"8":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":4}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}}}},"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":5}},"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":7}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951}},"df":29}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}},"u":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951}},"df":2}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":9}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"z":{"docs":{},"df":0,"z":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2,"'":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},":":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}}}},"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}}}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":3.0}},"df":15}}}}}}},"f":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":2}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}}}},"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951}},"df":1,"k":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}}}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":2,"u":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}}},"k":{"docs":{},"df":0,"r":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"x":{"docs":{},"df":0,"9":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"7":{"docs":{},"df":0,"6":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"f":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951}},"df":1}}}}}}},"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}},"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":3,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":2}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951}},"df":4}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951}},"df":8}}}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":4}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":21},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":3}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951}},"df":2}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":10}},"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951}},"df":2,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"y":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"5":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}}}}},"r":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2,"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}}}}},"n":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":3}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":4,"/":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}}}}},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}}}}}},"l":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2},"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3}},"n":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":2}}}},"b":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":34}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":4}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"t":{"docs":{},"df":0,"y":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":1}}}}}}},"w":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-16/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":35,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3}}},"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1,"b":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-10/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-11/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-12/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-13/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-16/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-17/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-19/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-20/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-26/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-27/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-28/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-29/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-3/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-30/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-7/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":32}}}}}},"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":32}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772}},"df":1}}}}},"e":{"docs":{},"df":0,"u":{"docs":{},"df":0,"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}}}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":10,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,",":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}}}}}}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":14}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":5,"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":4.795831523312719},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":5,"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":7,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}},"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.23606797749979}},"df":1}}}}}}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951}},"df":2}}},"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":10},"h":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"w":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":36,"?":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":4,"5":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,"8":{"docs":{},"df":0,"2":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1,"8":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":2}},"4":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}},"9":{"docs":{},"df":0,"1":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":3}},"x":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":9}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"y":{"docs":{},"df":0,"/":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}}}}}},"v":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":2}}}}}},"x":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":2,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"j":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951}},"df":1}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772}},"df":1}}}},"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":2}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772}},"df":2}}}},"f":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.7320508075688772}},"df":2}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951}},"df":1}}}}}},"k":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1},"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":2,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":9,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":3},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":11,"s":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":9}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":3,"i":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":3}}}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":5}}},"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.4142135623730951}},"df":1}}}}},"g":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":8,"i":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":2}}},"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"/":{"docs":{},"df":0,"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"/":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"s":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}},"s":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":7,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":26,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":2}}}}}}},"w":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772}},"df":1}}}}}}}},"x":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4,"i":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":2}}}}}}}}}},"z":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":5,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951}},"df":2,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2}},"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}},"g":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":4}}}}},"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":6,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"m":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":2}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}}}}}}}}}},"k":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1,"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":2,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"s":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":35,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}}}}}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951}},"df":1},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":4}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":2}},"h":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":4},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"9":{"docs":{},"df":0,"6":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1},"d":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"4":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}},"f":{"docs":{},"df":0,"8":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"(":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":7,"e":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":4}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}},"p":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":14}}}}},"m":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}},"y":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2}}}}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":8,"'":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"@":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,".":{"docs":{},"df":0,"u":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}},"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,".":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"g":{"docs":{},"df":0,"9":{"docs":{},"df":0,"f":{"docs":{},"df":0,"x":{"docs":{},"df":0,"c":{"docs":{},"df":0,"8":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":6}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3},"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":2}},"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951}},"df":2,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951}},"df":1,"e":{"docs":{},"df":0,"’":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":5}},"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6},"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":3.4641016151377544}},"df":12}}}}}},"c":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":8}}},"u":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":2}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951}},"df":2},"y":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":7,"_":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1},"b":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}}}}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":13}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":32}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4}}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":4.0}},"df":5,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":7,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951}},"df":1}},"i":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":2}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":4}},"r":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":2}}}},"t":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2,"s":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}}}}},"o":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":1}}},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":6,".":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":4}}}},"c":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":3,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":1,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}}}}}},"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":4,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":2}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":15,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":33}}}}},"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-10/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-12/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-13/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-16/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-17/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-20/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-27/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-3/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-7/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.23606797749979}},"df":35}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"2":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":5}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":3}}}}},"u":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":16}}}}},"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1},"a":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":17}}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":17}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":2},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":2}},"w":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2}},"y":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":3}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}}},"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":3}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951}},"df":1,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1},"k":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":2,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":6}}}}}}},"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2},"a":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}},"c":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2}}},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":8}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}}}},"w":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,".":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"b":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3}},"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":6,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}},"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}}},"b":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":5}},"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":8}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":1}},"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":18}}},"u":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":5,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3}}}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":4}},"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}},"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":5,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3}}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":4},"x":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-26/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-28/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-29/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/newsletter-31/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":34,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":3}},"2":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"+":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"+":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}},"5":{"docs":{},"df":0,"+":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"7":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}},"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,"+":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"+":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}},"4":{"docs":{},"df":0,"5":{"docs":{},"df":0,"+":{"docs":{},"df":0,"9":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"2":{"docs":{},"df":0,"+":{"docs":{},"df":0,"7":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":2},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}}}}}}}}}}},"v":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":2}},"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":2}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":2}}},"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1},"v":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":7}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951}},"df":1}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":3}}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":30}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}}}},"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":19}}},"i":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":11}}}},"s":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1}}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.6457513110645907}},"df":4}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":3}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":2}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}},"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1,"c":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":7,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1}}}}}},"g":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":5}}}}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":5,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}}}},"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":3}}}}},"b":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}}},"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"y":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}},"p":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":1,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.0}},"df":1}}}}},"s":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":3.0}},"df":12,":":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"x":{"docs":{},"df":0,".":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}}}}}}},"s":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.23606797749979}},"df":8,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1},"f":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":6}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":5}},"o":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951}},"df":2}}}}}}}}}}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":18,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":4}}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-14/":{"tf":4.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/newsletter-16/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-17/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-18/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":5.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-23/":{"tf":3.872983346207417},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-27/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/newsletter-7/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":4.242640687119285},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":4.58257569495584}},"df":37,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":4},"/":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}}},"2":{"docs":{},"df":0,"0":{"docs":{},"df":0,"2":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}},"_":{"docs":{},"df":0,"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"z":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}}}}}},"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}}},"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}}}},"c":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":7,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":3}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772}},"df":1}}}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951}},"df":1}}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":5}}}}},"y":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3}}}}}}},"ö":{"docs":{},"df":0,"i":{"docs":{},"df":0,"j":{"docs":{},"df":0,"e":{"docs":{},"df":0,"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951}},"df":1}}},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":2,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1,"2":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}},"5":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3},"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}},"w":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.6457513110645907}},"df":1}},"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"e":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":4}}}}},"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1},"k":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":3}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":5}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":17,"d":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}}},"k":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2}},"g":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951}},"df":2}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":3}}},"f":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":5}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":3}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951}},"df":2}}}}}}}}},"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":18},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":2}}}}},"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":12,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}}}}},"p":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":11,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":2}}},"v":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951}},"df":4,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":8,"_":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":4}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":9}}}},"g":{"docs":{},"df":0,"p":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"1":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":15,"d":{"docs":{},"df":0,"_":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"(":{"docs":{},"df":0,"i":{"docs":{},"df":0,"2":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":6}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1},"w":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":29,"c":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":4}}},"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"4":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"3":{"docs":{},"df":0,"5":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":1}}}},"g":{"docs":{},"df":0,"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772}},"df":1}}}}}},"m":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}},"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":2}}}}},"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1,"g":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"v":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1},"x":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951}},"df":1,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}}},"h":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}},"z":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772}},"df":6}}},"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":2}},"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":4,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}},"b":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}},"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":23}}}}}}},"o":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":7}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3}},"v":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":29},"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":5}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}},"r":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":7,"e":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":4}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}},"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":4}},"f":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":5}}},"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}}},"i":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951}},"df":5,"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}},"r":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3,"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"8":{"docs":{},"df":0,"9":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":10}},"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":4.123105625617661},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":18}},"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":7}},"g":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.23606797749979}},"df":11}},"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":4,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{},"df":0,"p":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":7,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}},"u":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":3}},"y":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2}},"d":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":21,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1,":":{"docs":{},"df":0,":":{"docs":{},"df":0,"{":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{},"df":0,",":{"docs":{},"df":0,"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1}}}}}}}}}}}}}}}},"g":{"docs":{},"df":0,"b":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.7320508075688772}},"df":1}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":11}}},"m":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1,"3":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":5,"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"x":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951}},"df":1}}},"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1,"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}}}},"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":4,"0":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":1}},"3":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}},"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}}}}}},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2,"0":{"docs":{},"df":0,"1":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}},"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1}}}},"h":{"docs":{},"df":0,"7":{"docs":{},"df":0,"4":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"4":{"docs":{},"df":0,"x":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"f":{"docs":{},"df":0,"0":{"docs":{},"df":0,"4":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,"2":{"docs":{},"df":0,"9":{"docs":{},"df":0,"x":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":2},"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}}}}}}}}}}}},"o":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":2}},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}}}}}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":3}}},"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}}}}}},"u":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":4}}},"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"b":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":3}}}}}}},"m":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":2}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}},"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}}}}}},"h":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.7320508075688772}},"df":9}},"g":{"docs":{},"df":0,"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}},"m":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951}},"df":1}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1}}}},"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-16/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-23/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":34}}}}},"r":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":31},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":3,"2":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":8}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}}}},"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":6}}}}},"y":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}},"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":3}}}}},"s":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2},"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":14}}}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":2}},"k":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":9,"n":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.0}},"df":9}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"i":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":3}}}}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.6457513110645907}},"df":21,".":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"v":{"docs":{},"df":0,"7":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"s":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":5}}},"c":{"docs":{},"df":0,"7":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"/":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}},"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":10,"s":{"docs":{},"df":0,"/":{"docs":{},"df":0,"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":2}}}}}}},"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":2}}}},"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"m":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":2}}}}}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":5}}}}},"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0}},"df":1}}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":11,"i":{"docs":{},"df":0,"m":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}},"x":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951}},"df":2}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2}}}},"n":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":33,"f":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}}},"t":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":3}}},"e":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":5,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":2}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":4},"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"j":{"docs":{},"df":0,"p":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":2}}}},"p":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951}},"df":4}}}}}}}},"y":{"docs":{},"df":0,"'":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951}},"df":2}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8},"k":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":6}},"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":4},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"s":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":7}},"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}},"e":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":3,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":2,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1},"7":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"v":{"docs":{},"df":0,"6":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":2}},"7":{"docs":{},"df":0,"e":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951}},"df":1}},"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":3}},"8":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":2}}}}}}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}},"m":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":12,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772}},"df":2}}},"p":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"l":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1,";":{"docs":{},"df":0,"d":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,".":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"4":{"docs":{},"df":0,"c":{"docs":{},"df":0,"1":{"docs":{},"df":0,"2":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}}}}},"s":{"docs":{},"df":0,"5":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":3,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":2}},"o":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3}},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951}},"df":1}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1},"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":15,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6}}}}},"k":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":3}}}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":4}}},"r":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}},"u":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}}}}}}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":10}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951}},"df":31,"b":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":2}}}},"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":2}},"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":4.123105625617661},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":7}},"n":{"docs":{},"df":0,"g":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951}},"df":1}}},"c":{"docs":{},"df":0,"e":{"docs":{},"df":0,"i":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":2}}}},"f":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}},"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951}},"df":1}},"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}},"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":8,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772}},"df":2,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"f":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951}},"df":1}}}}}}}}},"y":{"docs":{},"df":0,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":1}}}}}}},"u":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":2}}}}},"n":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":1}},"r":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":3,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":7}}}}},"w":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951}},"df":1}},"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}},"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"y":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"d":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}}}}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":19}}}}},"o":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":12}},"y":{"docs":{},"df":0,"p":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951}},"df":6,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":4,"d":{"docs":{},"df":0,"i":{"docs":{},"df":0,"f":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":19}}}}}}}}}}}}}}}},"i":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"3":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":2}},"6":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":2}},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951}},"df":1}}},"b":{"docs":{},"df":0,"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"p":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951}},"df":1}}},"f":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"m":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951}},"df":1}}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1},"k":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951}},"df":1},"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}}}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951}},"df":1}}},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}}}}}},"n":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"o":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}}}},"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":4},"v":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1}}}}},"k":{"docs":{},"df":0,"n":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951}},"df":4}}}}},"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}},"i":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}}},"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1},"s":{"docs":{},"df":0,"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"v":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}},"s":{"docs":{},"df":0,"a":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"c":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951}},"df":1}},"z":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":1}},"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.605551275463989},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":5}}}}},"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":5}}},"u":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}},"p":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.0}},"df":16,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":5}}},"d":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":3.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":13}}},"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":6}}}}}}},"r":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951}},"df":1}},"s":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-15/":{"tf":3.3166247903554},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-3/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.7416573867739413},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.6457513110645907}},"df":29,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}},"g":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":4}},"b":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":5,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}},"e":{"docs":{},"df":0,"_":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"n":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772}},"df":1}}}}}}}}}}}}},"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}},"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":11,"s":{"docs":{},"df":0,".":{"docs":{},"df":0,"r":{"docs":{},"df":0,"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":14}}}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}}}},"i":{"docs":{},"df":0,"z":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"&":{"docs":{},"df":0,"g":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}},"t":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1},"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":3}}},"v":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1},"b":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1}},"w":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951}},"df":1}}}},"x":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"v":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":5,"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":3},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}},"1":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"3":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":2,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":1}},"0":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}}}},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}}},"4":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"7":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.0}},"df":1,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1}}},"8":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1},"9":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}}}},"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"a":{"docs":{},"df":0,"1":{"docs":{},"df":0,"0":{"docs":{},"df":0,"8":{"docs":{},"df":0,"x":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772}},"df":1}}}}},"d":{"docs":{},"df":0,"z":{"docs":{},"df":0,"i":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}}},"l":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":2}},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1},"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}},"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":2}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}},"o":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":2}}},"k":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1}}}}},"e":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1,"&":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{},"df":0,";":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}}},"m":{"docs":{},"df":0,"l":{"docs":{},"df":0,"6":{"docs":{},"df":0,"0":{"docs":{},"df":0,"3":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1}}}},"7":{"docs":{},"df":0,"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":2}}}},"r":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"o":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":17}}}}}},"g":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"i":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":6}}},"e":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":2}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"y":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}}}},"i":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":2}},"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":3}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}}},"u":{"docs":{},"df":0,"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951}},"df":1}}}},"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.8284271247461903}},"df":2,"(":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}},"s":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":3}},"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2,"_":{"docs":{},"df":0,"f":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"_":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"g":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}},"l":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}}}}}}},"l":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":2}}}},"n":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951}},"df":30}},"p":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":2}},"s":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":3}},"t":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951}},"df":1}}},"v":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1,"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"y":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8}},"e":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2},"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.0}},"df":9}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":4},"v":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":2.449489742783178}},"df":3}},"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1}},"b":{"docs":{},"df":0,"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}}},"s":{"docs":{},"df":0,"i":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}},"o":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":8,"l":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":32}}}},"l":{"docs":{},"df":0,"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":4}}},"l":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8}},"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"y":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}}},"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}},"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}},"g":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-4/":{"tf":2.23606797749979},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.23606797749979}},"df":35,"#":{"docs":{},"df":0,"4":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"'":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.4142135623730951}},"df":1}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"'":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.4142135623730951}},"df":2}}},"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":3}}}}},"i":{"docs":{},"df":0,"r":{"docs":{},"df":0,"l":{"docs":{},"df":0,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"q":{"docs":{},"df":0,"u":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}}}}}}},"o":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":3}}}},"i":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1,"d":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1},"g":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}},"f":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951}},"df":2}},"i":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"f":{"docs":{},"df":0,"r":{"docs":{},"df":0,"i":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1}}},"l":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1,"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"m":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}}}},"n":{"docs":{},"df":0,"d":{"docs":{},"df":0,"f":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"c":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}}}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1}}},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.4142135623730951}},"df":1}}}},"p":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":4,"w":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{},"df":0,"2":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}},"3":{"docs":{},"df":0,"+":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}},"0":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":5,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1}},"5":{"docs":{},"df":0,"+":{"docs":{},"df":0,"5":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,"+":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1}}},"9":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0}},"df":1}}}},"4":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1}},"1":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1}}},"6":{"docs":{},"df":0,"+":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"9":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1}}}}},"6":{"docs":{},"df":0,"1":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1}}},"3":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1}}},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1,"+":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}}},"8":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1}}},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}},"7":{"docs":{},"df":0,"0":{"docs":{},"df":0,"+":{"docs":{},"df":0,"2":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}},"1":{"docs":{},"df":0,"+":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}}},"8":{"docs":{},"df":0,"4":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{},"df":0,"3":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}},"5":{"docs":{},"df":0,"+":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}}}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"s":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":2}}}}}},"s":{"docs":{},"df":0,"h":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1}}}}}},"t":{"docs":{},"df":0,"h":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":6}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":8}}}}},"z":{"docs":{},"df":0,"o":{"docs":{},"df":0,"f":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}},"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0}},"df":1},"o":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1},"n":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":2}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":2}}}},"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":2.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-14/":{"tf":2.6457513110645907},"https://blog.rust-embedded.org/newsletter-15/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-18/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":3.1622776601683795},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-21/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-5/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/newsletter-6/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":2.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-9/":{"tf":2.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":2.8284271247461903},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":2.449489742783178},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":2.449489742783178}},"df":37},"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1,"'":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1}}},"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951}},"df":1}}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{},"df":0,"n":{"docs":{},"df":0,"'":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}}}}},"r":{"docs":{},"df":0,"a":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":2,"p":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.4142135623730951}},"df":2}}}}},"i":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.4142135623730951}},"df":13,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"n":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":4}}}}},"o":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.7320508075688772},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":5}}}}},"x":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1,"8":{"docs":{},"df":0,"6":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1,"_":{"docs":{},"df":0,"6":{"docs":{},"df":0,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":3}}}}},"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"g":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":4}}}},"b":{"docs":{},"df":0,"u":{"docs":{},"df":0,"i":{"docs":{},"df":0,"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1}}}}},"i":{"docs":{},"df":0,"a":{"docs":{},"df":0,"o":{"docs":{},"df":0,"_":{"docs":{},"df":0,"m":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1}}}}}},"m":{"docs":{},"df":0,"c":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1,"4":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1}}},"t":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1}},"y":{"docs":{},"df":0,"e":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":1,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":4.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.7320508075688772}},"df":6}}},"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"'":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1},"l":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":2}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":4},"v":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1}},"r":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":2},"t":{"docs":{},"df":0,"u":{"docs":{},"df":0,"b":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1}}}}}},"z":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.4142135623730951},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":2,"a":{"docs":{},"df":0,"c":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1}}},"e":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.4142135623730951}},"df":4}}},"m":{"docs":{},"df":0,"u":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.4142135623730951}},"df":1}},"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}}}}}}},"title":{"root":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0}},"df":1,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0}},"df":1},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0}},"df":1},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0}},"df":1},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0}},"df":1},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0}},"df":1},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0}},"df":1},"8":{"docs":{"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0}},"df":1},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0}},"df":1}},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0}},"df":1,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0}},"df":1,"1":{"docs":{},"df":0,"9":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0}},"df":1}},"2":{"docs":{},"df":0,"1":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0}},"df":1}}},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0}},"df":1},"2":{"docs":{"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0}},"df":1},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0}},"df":1},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0}},"df":1},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0}},"df":1},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0}},"df":1},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0}},"df":1},"8":{"docs":{"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0}},"df":1},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0}},"df":1}},"3":{"docs":{"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0}},"df":1,"0":{"docs":{"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0}},"df":1},"1":{"docs":{"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0}},"df":1}},"4":{"docs":{"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0}},"df":1},"5":{"docs":{"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0}},"df":1},"6":{"docs":{"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0}},"df":1},"7":{"docs":{"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0}},"df":1},"8":{"docs":{"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0}},"df":1},"9":{"docs":{"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":1},"b":{"docs":{},"df":0,"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"k":{"docs":{},"df":0,"a":{"docs":{},"df":0,"g":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}}}}},"c":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"t":{"docs":{},"df":0,"e":{"docs":{},"df":0,"x":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}}}},"d":{"docs":{},"df":0,"e":{"docs":{},"df":0,"f":{"docs":{},"df":0,"a":{"docs":{},"df":0,"u":{"docs":{},"df":0,"l":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}}}}},"e":{"docs":{},"df":0,"m":{"docs":{},"df":0,"b":{"docs":{},"df":0,"e":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":35}}}}},"g":{"docs":{},"df":0,"r":{"docs":{},"df":0,"o":{"docs":{},"df":0,"u":{"docs":{},"df":0,"p":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":31}}}}},"h":{"docs":{},"df":0,"a":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}},"l":{"docs":{},"df":0,"i":{"docs":{},"df":0,"n":{"docs":{},"df":0,"k":{"docs":{},"df":0,"e":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}}}},"l":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}},"m":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1},"n":{"docs":{},"df":0,"e":{"docs":{},"df":0,"w":{"docs":{},"df":0,"s":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"t":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":31}}}}}}},"o":{"docs":{},"df":0,"w":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}},"p":{"docs":{},"df":0,"a":{"docs":{},"df":0,"t":{"docs":{},"df":0,"h":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}},"s":{"docs":{},"df":0,"a":{"docs":{"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"tf":1.0}},"df":1}}},"r":{"docs":{},"df":0,"e":{"docs":{},"df":0,"l":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"s":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}}},"u":{"docs":{},"df":0,"s":{"docs":{},"df":0,"t":{"docs":{"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":3}}}},"s":{"docs":{},"df":0,"t":{"docs":{},"df":0,"a":{"docs":{},"df":0,"b":{"docs":{},"df":0,"l":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}},"t":{"docs":{},"df":0,"o":{"docs":{},"df":0,"w":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{},"df":0,"d":{"docs":{"https://blog.rust-embedded.org/the-path-towards-stable/":{"tf":1.0}},"df":1}}}}}},"v":{"docs":{},"df":0,"1":{"docs":{},"df":0,".":{"docs":{},"df":0,"0":{"docs":{"https://blog.rust-embedded.org/embedded-hal-v1/":{"tf":1.0}},"df":1}}}},"w":{"docs":{},"df":0,"o":{"docs":{},"df":0,"r":{"docs":{},"df":0,"k":{"docs":{"https://blog.rust-embedded.org/newsletter-1/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-10/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-11/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-12/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-13/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-14/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-15/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-16/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-17/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-18/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-19/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-2/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-20/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-21/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-22/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-23/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-24/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-25/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-26/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-27/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-28/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-29/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-3/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-30/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-31/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-4/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-5/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-6/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-7/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-8/":{"tf":1.0},"https://blog.rust-embedded.org/newsletter-9/":{"tf":1.0}},"df":31}}}},"y":{"docs":{},"df":0,"e":{"docs":{},"df":0,"a":{"docs":{},"df":0,"r":{"docs":{"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"tf":1.0},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"tf":1.0}},"df":2}}}}}}},"documentStore":{"save":true,"docs":{"https://blog.rust-embedded.org/":{"body":"","id":"https://blog.rust-embedded.org/","title":""},"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"body":"The default linker for the 4 ARM Cortex-M targets listed below has changed from\narm-none-eabi-gcc to rust-lld in the latest nightly.\n\nthumbv6m-none-eabi\nthumbv7m-none-eabi\nthumbv7em-none-eabi\nthumbv7em-none-eabihf\n\nThis will break the builds of binaries and cdylibs that were using the\nold default linker (arm-none-eabi-gcc) and additionally pass extra flags to\nthe linker using any of these rustc flags: -C link-arg, -C link-args, -Z pre-link-arg or -Z pre-link-args. Building libraries (rlibs and\nstaticlibs) is not affected by this change.\n\nThis change won't affect stable users when it reaches the 1.30 release because,\nas of 1.28, it's not possible to build binaries or cdylibs for those targets on\nthe stable channel. Building libraries for those targets is possible on stable\nbut it's not affected by this change.\nRationale\nThis breaking change was intentional.\nWe, the embedded WG, wanted to reduce the number of external tools required to\nbuild embedded programs for the ARM Cortex-M architecture. By switching the\ndefault linker to the LLD linker that's shipped with the Rust toolchain the user\nno longer needs to install an ARM linker (like arm-none-eabi-gcc or\narm-none-eabi-ld) to build Rust programs.\nBefore landing this change we first consulted with the community if they\nthought this breaking change was worth it. We received over 20 positive responses\nrepresenting the Cortex-M team (part of the embedded WG), the Tock OS project,\nthe embed-rs organization and independent developers.\nThe consensus was that it was worth to make the default configuration more self\ncontained and that if we were to make the change it had to be made before it\nbecame possible to build binaries on stable otherwise it wouldn't be possible\nto make this change without breaking stable builds.\nHow to fix your build\nIf you are affected by this change you'll observe a linker error with a message\nsimilar to one shown below:\n$ # these are the custom linker flags of the project\n$ cat .cargo/config\n[target.thumbv7m-none-eabi]\nrunner = 'arm-none-eabi-gdb'\nrustflags = [\n \"-C\", \"link-arg=-Wl,-Tlink.x\",\n \"-C\", \"link-arg=-nostartfiles\",\n]\n\n[build]\ntarget = \"thumbv7m-none-eabi\"\n$ cargo build\nerror: linking with `rust-lld` failed: exit code: 1\n |\n = note: \"rust-lld\" \"-flavor\" \"gnu\" (..)\n = note: rust-lld: error: unknown argument: -Wl,-Tlink.x\n rust-lld: error: unknown argument: -nostartfiles\n\nThere are two ways to fix the problem.\nOption A: switch back to GCC\nThe easiest way is to switch back to using arm-none-eabi-gcc as the linker. To\ndo so pass the flag -C linker=arm-none-eabi-gcc to rustc. In the above example\nyou can do that in the .cargo/config file.\n$ # these are the custom linker flags of the project\n$ cat .cargo/config\n[target.thumbv7m-none-eabi]\nrunner = 'arm-none-eabi-gdb'\nrustflags = [\n \"-C\", \"linker=arm-none-eabi-gcc\", # ADDED\n \"-C\", \"link-arg=-Wl,-Tlink.x\",\n \"-C\", \"link-arg=-nostartfiles\",\n]\n\n[build]\ntarget = \"thumbv7m-none-eabi\"\n$ cargo build && echo It works now\nIt works now\nOption B: tweak the additional linker arguments\nThe other option is to tweak the additional linker arguments so they'll be\naccepted by LLD. In the above example the -nostartfiles flag can be dropped\nbecause that's the default behavior of LLD, and the flags prefixed by -Wl,\nwill have to lose their prefix.\n$ # these are the custom linker flags of the project\n$ cat .cargo/config\n[target.thumbv7m-none-eabi]\nrunner = 'arm-none-eabi-gdb'\nrustflags = [\n \"-C\", \"link-arg=-Tlink.x\", # CHANGED\n# \"-C\", \"link-arg=-nostartfiles\", # REMOVED\n]\n\n[build]\ntarget = \"thumbv7m-none-eabi\"\n$ cargo build && echo It works now\nIt works now\n\nWith this approach your build will no longer depend on an external linker.\nShould I prefer option A or B?\nIf you are linking to a system installed C library like newlib-arm-none-eabi\nthen you should continue to use GCC. The default library search path of\narm-none-eabi-gcc includes the path to those libraries.\nIf you are not linking to any C code then you should prefer LLD then you won't\nneed to install the arm-none-eabi toolchain.\n","id":"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/","title":"PSA: Cortex-M Breakage (LLD as the default linker)"},"https://blog.rust-embedded.org/embedded-hal-v1/":{"body":"The Rust Embedded Working Group is proud to announce the release of embedded-hal version 1.0 together with the\ncompanion crates embedded-hal-bus, embedded-hal-async and embedded-hal-nb.\nCheck out the repository, the API documentation and the migration guide.\nThe embedded-hal crates provide traits (interfaces) for using peripherals commonly available in microcontrollers\nsuch as GPIO, UART, SPI or I2C. They allow writing drivers (for sensors, displays, actuators, network adapters, etc.) in\na generic way, so they work on any microcontroller with an embedded-hal implementation without\nmodifying them. It's a central piece of the Embedded Rust ecosystem, ensuring interoperability throughout.\nThe 1.0 release has been in the works since 2020. Now that it's out, we consider all\ntraits in it to be stable. The plan is to extend embedded-hal with more traits in future 1.x releases,\nnot doing more breaking changes (i.e. there are no plans for a 2.0 release). This will provide a stable\nbase for building HALs and drivers.\nSo, what's new in embedded-hal 1.0?\n\n\nFerris with a soldering iron by Barnaby Walters.\nFocus on drivers\nPrevious versions of embedded-hal had a dual goal of standardizing HAL APIs for end users, and allowing writing generic drivers. \nExperience has shown that these goals sometimes conflict with each other. As the latter brings much more value, 1.0 focuses on that.\nWe've simplified some traits and merged others to remove interoperability gotchas.\nWe've removed traits that were found to not be usable for generic drivers (most notably timers). The plan is to add\nthem back in the future, with a better design. See the migration guide for details and links to the tracking issues.\nAsync\nA new addition is the embedded-hal-async crate, containing async versions of the traits. With the Rust 1.75 release,\nasync traits are available on Rust stable. They can be used without heap allocations or dynamic\ndispatch (unlike previous macro-based polyfills like the async-trait crate), so they are a great fit for bare-metal embedded usage.\nMost embedded-hal-async traits are async versions of their blocking counterparts.\nHowever, one highlight is the digital::Wait trait, with methods like wait_for_high() and wait_for_low(). This trait adds support for using \"IRQ\" GPIO pins typically used by SPI and I2C devices to send an interrupt to the microcontroller. This frequently-requested feature turned out to be hard to abstract with traits, but is now feasible in an ergonomic way with async.\nSPI bus sharing\n\nThe SpiDevice trait now allows sharing a SPI bus between multiple devices, each selected with its own CS pin. The design allows for unrelated drivers to talk to different devices in the same bus without conflicts and without being aware of each other. \nThe trait is agnostic about the kind of mutex/locking mechanism. The embedded-hal-bus crate provides implementations for commonly used mutexes, but it is possible to write your own for e.g. the mutex of your favourite RTOS.\nError handling\nGeneric drivers can now inspect errors, thanks to them being required to implement an Error trait\nthat allows querying the error \"kind\" out of a pre-selected set. HAL implementations can still use custom error types,\nand map errors that don't fit in these categories to the Other kind.\nAll error types are also required to implement Debug, so .unwrap() and similar are now always available in generic drivers.\nembedded-io\nThe embedded-hal project also hosts the embedded-io crates. They provide traits for byte-oriented I/O streams. Since serial\nports (UART) are essentially byte streams, the serial-specific traits in embedded-hal have been removed in favor of embedded-io.\nembedded-io has not reached 1.0 yet, but we expect that to happen in 2024.\nThanks\nThanks to the HAL team (@therealprof, @ryankurte, @eldruin, @dirbaio, @MabezDev), and to everyone who helped with testing, feedback and contributions for making embedded-hal 1.0 possible.\nThanks to the Rust Foundation for sponsoring Dario Nieuwenhuis (@dirbaio)'s work on embedded-hal through the Fellowship grants program.\nAnd lastly, thanks to all the people releasing and maintaining HAL implementations and drivers using embedded-hal. You are the ones who make embedded-hal actually useful in the real world!\n","id":"https://blog.rust-embedded.org/embedded-hal-v1/","title":"embedded-hal v1.0 now released!"},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"body":"It's been a busy year for many of the members of the Embedded-WG this year, and we had a chance to catch up at OxidizeConf a few weeks ago. We discussed two main things, Moving off of Mozilla IRC, and our goals for (part of) 2019.\nGoals for 2019\nIn 2018, the Embedded WG pushed hard to get the Cortex-M targets supported as stable targets in the upstream Rust project. Since then, due to work and life responsibilities, a number of us have been particularly busy in 2019.\nAt Oxidize, we discussed what our 2019 goals should be. There were suggestions to get some the foundational level crates like cortex-m, cortex-m-rt, and tools like svd2rust to a \"1.0 state\". However, while there were a number of improvements we could think of, we couldn't draw any clear lines of what it would take for us to be comfortable cutting a 1.0 release of these projects.\nBased on the two points above, we discussed a slightly different plan: Focusing on building out the ecosystem in 2019, by building more \"fun\" stuff, like example projects, cool applications, and extracting and publishing reusable components from these projects to fill in the embedded Rust ecosystem.\nBy focusing on building out, instead of trying to perfect what we already have, we hope to find out the things we don't know we are missing, and inspire other members of the community to begin working and building with Embedded Rust. We'll keep this as a focus through the summer (until September or October 2019). This can be thought of as a parallel to the upstream \"Libs Blitz\" that the Rust project successfully completed in 2017.\nOur weekly meetings will likely relax a bit, and will generally change focus to quickly discuss any high priority issues, then open up to a more informal \"show and tell\", where people can discuss the things they have been building and would like to share. We hope you'll all join us to share the wonderful things you build this summer in embedded Rust!\nMoving off Mozilla IRC\nAt the end of April, Mozilla announced that they would be shutting down irc.mozilla.org. The Rust project as a whole will generally be moving on to other platforms such as Discord and Zulip.\nThe Embedded Working Group is actually one of the few (if not only) working groups that still primarily rely on IRC. We have a few hundred people who idle in the room, and tend to have fairly active discussions there, including our weekly status meetings. We have discussed moving to other platforms previously, but have been unable to get any sort of consensus on what to move to instead. Those discussions lead to a fruitful evaluation of alternatives and led to a pre-selection of suitable services.\nTo move things forward RFC 0351 Chat Vote has been proposed and accepted by the WG which was subsequently implemented by opening voting issue to poll the public opinion on this matter. Anyone with a GitHub account is invited to cast vote(s) until 23:59 CEST on Sunday, 2019-06-23, the detailed rules are explained in the issue and fair discussion is very welcome.\n","id":"https://blog.rust-embedded.org/embedded-rust-in-2019/","title":"Embedded Rust in 2019"},"https://blog.rust-embedded.org/newsletter-1/":{"body":"This is the first newsletter of the Embedded WG! We will be releasing this newsletter on a bi-weekly basis, and we are looking to highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue!\nHighlights\n\nTock-OS has released the 1.0 of their kernel, gotten the Rust Userspace library back in order, and are working on a new register interface\nEmilgardis, jamesmunns and ryankurte have become collaborators of the svd and svd2rust projects.\nhannobraun, ilya-epifanov, thejpster, therealprof have become collaborators of the embedded-hal project.\ndvc94ch has created the riscv-rust organization for all your embedded RISCV needs!\ndylanmckay has begun rebasing the avr-rust/rust fork onto a recent rust-lang/rust version, bringing in LLVM 6.0 support.\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\nembedded-hal drivers\nThis is a list of recently released drivers that are part of the Weekly Driver Initiative. There are currently 5 Released Drivers, 14 WIP Drivers, and lots of TODOs!\n\npcein has released the third weekly driver for the adc-mcp3008, an 8-channel 10-bit ADC.\njaparic has released the fourth weekly driver for the enc28j60, an Ethernet controller with SPI interface.\ndbrgn has released the fifth weekly driver for the mcp3425, a 16-bit ADC with I2C interface.\n\nThanks\n\nThanks to everyone who has been commenting on the Embedded WG Issues, especially for the Embedded Rust Book tracking issue!\nvarkor has fixed a long standing LLVM bug, that artificially increased the binary size of Rust programs, and backported the patch to rustc.\nLLD is now being shipped with the Rust toolchain. FenrirWolf patched Xargo so that Xargo users can make use of it too.\n\nHelp Wanted\nIf you have an embedded project that could use contributors or maintainers, leave a comment for the next newsletter!\n\nWe are pretty close to being able to use LLD to link Rust programs compiled for ARM Cortex-M but there are some LLD bugs that still need to be fixed. Help reporting these bugs upstream would be greatly appreciated!\nIncremental compilation is in the roadmap for this year but it doesn't work with no_std binaries due to an old rustc bug related to linking. Help us fix it! There's a proposed solution here.\nWe want to explore stabilizing some assembly operations in core as an alternative to the unstable asm! macro. We would love some help identifying the assembly operations that need to be provided this way as some can be implemented in external assembly files without losing\nsemantics. Details in issue #63.\n\n","id":"https://blog.rust-embedded.org/newsletter-1/","title":"The Embedded Working Group Newsletter - 1"},"https://blog.rust-embedded.org/newsletter-10/":{"body":"This is the tenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on internals.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nWe have a blog! We'll be posting newsletters, notices for upcoming changes, and embedded related articles there in the upcoming future. Use RSS? It has an RSS feed! Check out the blog on github to make any corrections or to contribute an article\nNightly Rust has switched to lld for Cortex-M targets as a default. See the blog post for how to handle this change\nThere have been updates to cortex-m, cortex-m-rt, and cortex-m-quickstart! Check out the linked changelogs to see what is new. Also, the latest release of each of these no longer require arm-none-eabi-gcc!\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\nSupport for aarch64-unknown-none has landed upstream! It is now possible to write bare-metal Rust code for 64-bit ARM architectures\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nDevice Cratesreleased140\nHAL Impl Cratesreleased12+1\nBoard Support Cratesreleased90\nDriver Crates Releasedreleased110\nDriver Crates WIPWIP39+1\nno-std cratesreleased13+1\n\nHelp Wanted\n\nTake a minute to check out the wg help wanted issues as labeled on our issue tracker!\n\n","id":"https://blog.rust-embedded.org/newsletter-10/","title":"The Embedded Working Group Newsletter - 10"},"https://blog.rust-embedded.org/newsletter-11/":{"body":"This is the eleventh newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on internals.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nrustc now supports 4 Cortex-R targets thanks to the work of paoloteti in the Cortex-R space! You can build programs for these targets using nothing but the Rust toolchain\nJames Munns gave a talk at RustConf 2018, covering the basics of embedded systems, and how Rust's Zero Cost Abstractions are a perfect match for bare metal systems\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\nSupport for the Arduino MKRZERO board has landed in the atsamd21-rs repository! This is a Board Support Crate for various development board based on the Atmel/Microchip samd21 Cortex-M microcontroller\nBranan Riley is working on the fourth chapter of his Exploring Rust on Teensy series, which will focus on using futures-rs to represent DMA transfers\nEmil Fresk shared some shots of his next Visual Inertial PCB, which includes an STM32 running control algorithms written in Rust!\nJonathan Pallant added a bare-metal four-channel synthesizer for his Monotron project, and even included a short demo audio clip!\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nDevice Cratesreleased16+2\nHAL Impl Cratesreleased120\nBoard Support Cratesreleased90\nDriver Crates Releasedreleased110\nDriver Crates WIPWIP41+2\nno-std cratesreleased130\n\nHelp Wanted\n\nTake a minute to check out the wg help wanted issues as labeled on our issue tracker!\n\n","id":"https://blog.rust-embedded.org/newsletter-11/","title":"The Embedded Working Group Newsletter - 11"},"https://blog.rust-embedded.org/newsletter-12/":{"body":"This is the twelfth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nWe now have a category for Embedded on the users.rust-lang.org forum! This is a great place to ask larger questions, or to share more details about your projects!\nYou can now build embedded binaries on stable with the 1.30-beta release of Rust! Check it out and open an issue if you run in to any issues with your projects!\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\nDiego Barrios Romero has released his eeprom24x crate, an embedded-hal compatible driver for EEPROM memory chips such as the Microchip/Atmel AT24C32, 24AA32A, AT24C256, or STMicroelectronics' M24C32\nTrangar managed to drive 56 ArtNet Torches using Rust, based on his ArtNet Protocol crate\nThe no_std synthesizer from the last newsletter has been implemented on-hardware by Jonathan Pallant, giving the Monotron a PWM audio driver!\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nDevice Cratesreleased160\nHAL Impl Cratesreleased120\nBoard Support Cratesreleased90\nDriver Crates Releasedreleased12+1\nDriver Crates WIPWIP40-1\nno-std cratesreleased130\n\nHelp Wanted\n\nInterested in implementing a new target for Embedded Rust? Nuvoton has a development board for the Cortex-M23. Check out the thumbv8m tracking issue if you want to help!\n\n","id":"https://blog.rust-embedded.org/newsletter-12/","title":"The Embedded Working Group Newsletter - 12"},"https://blog.rust-embedded.org/newsletter-13/":{"body":"This is the thirteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nThe min_const_fn feature has landed, allowing for stable use of const fn functions in an embedded context in the upcoming 1.31 release of Rust!\nFrank Pagliughi has kicked off rust-industrial-io, a crate providing an interface to libiio on linux, which is used for communication with industrial sensors and actuators\ngregokent has started development on cortex-r-rt, a runtime crate for Cortex-R processors\nThe HAL Impl crate for the Texas Instruments TM4C123 now works on 1.30-beta! Now is a great time to ensure that your embedded crates will work flawlessly with the 2018 Edition of Rust!\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\ne-matteson has released their keypad driver, which can be used with keypad matrix circuits. Check out more details on reddit\nDaniel Gallagher has recently released two handy Bluetooth crates in an intro blog post:\n\nbluenrg, an embedded-hal crate used to interface with STMicro's series of microcontrollers\nBluetooth HCI, a helper crate for interfacing with the Bluetooth Host-Controller interface\n\n\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nDevice Cratesreleased160\nHAL Impl Cratesreleased13+1\nBoard Support Cratesreleased11+2\nDriver Crates Releasedreleased15+3\nDriver Crates WIPWIP400\nno-std cratesreleased14+1\n\nHelp Wanted\n\nInterested in implementing a new target for Embedded Rust? Nuvoton has a development board for the Cortex-M23. Check out the thumbv8m tracking issue if you want to help!\n\n","id":"https://blog.rust-embedded.org/newsletter-13/","title":"The Embedded Working Group Newsletter - 13"},"https://blog.rust-embedded.org/newsletter-14/":{"body":"This is the fourteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nThis is a special \"spotlight\" edition of the newsletter, where we look at a few topics in a bit more detail. Let us know what you think of the new format, and if there is anything you'd like to see included in the next newsletter!\nDiscuss on users.rust-lang.org, on twitter, or on reddit!\nEmbedded Rust Applications on Stable!\n\nRust 1.30 is here! Proc macros, no_std binaries, and a progress bar for cargo! 🎊🎉🦀 https://t.co/IXm5xFYlhU— Rust Language (@rustlang) October 25, 2018\n\nNow that #[panic_handler] is stabilized in 1.30, you can write Cortex-M bare-metal applications with the stable compiler. All our Rust Embedded crates, such as cortex-m, cortex-m-rt and embedded-hal should be ready to use on stable, but please note our two tutorial books Discovery and The Embedded Rust Book still require 1.30 beta or 1.31 beta as they use 2018 edition syntax (which isn't stabilized until the 1.31 release).\nIf you are able to trial 1.31 beta, you can help us test:\n\nMinimal const functions (useful for initializing static variables)\n2018 edition syntax (including changes to use and extern crate)\n\nThe Newest Embedded WG Team: Cortex-A!\n\n\nThe Embedded Working Group has launched a Cortex-A team, to focus on supporting developers working on bare-metal, micro kernel, and other low-level tasks using ARM's Cortex-A series of microprocessors.\nThe team kicked off with four members: @andre-richter, @parched, @raw-bin, and @wizofe, and have already started assembling initial goals for their team.\nThe Monotron Visits Rust Belt Rust\n\nAstonishing. Smashed my high score! pic.twitter.com/WG9FXc8Kao— Jonathan Pallant (@therealjpster) October 20, 2018\n\n@thejpster's project, the monotron, travelled to Ann Arbor Michigan for Rust Belt Rust 2018. Since its last conference appearance, it has gained a whole new list of features, including a serial application loader, a 3 channel wave table synthesizer, Atari Joystick support, and more!\nCheck out the video above for a demo of Snake on the monotron hardware.\nPeripheral Ownership Woes? Not With shared-bus!\n\nextern crate shared_bus;\n\n// Create your bus peripheral as usual:\n// let i2c = I2c::i2c1(dp.I2C1, (scl, sda), 90.khz(), clocks, &mut rcc.apb1);\n\nlet manager = shared_bus::CortexMBusManager::new(i2c);\n\n// You can now acquire bus handles:\nlet mut handle = manager.acquire();\n// handle implements `i2c::{Read, Write, WriteRead}`, depending on the\n// implementations of the underlying peripheral\n\n// Now, this works! :+1:\nlet port_a = Pcf8574(manager.acquire(), 0x39).unwrap();\nlet port_b = Pcf8574(manager.acquire(), 0x38).unwrap();\n\nIn most embedded-hal compatible drivers, the driver takes either ownership or a mutable reference to the peripheral used to interact with a component, such as I2C or SPI. For some protocols, such as I2C, which might have multiple devices connected to the same peripheral, managing ownership can be difficult (see embedded-hal/35 for discussion).\nTo address this, @Rahix developed shared-bus, a crate which provides safe shared access to these peripherals through the use of a mutex. This allows for access of the underlying peripheral in as many drivers as you need! Check out the release blog post for more details, and for examples on how to use this for your projects.\nThe Embedded Rust Community is Growing!\n\nHappy Tuesday! Quick poll: What are you using #embedded @rustlang for right now?RTs appreciated!— Rust Embedded Working Group (@rustembedded) October 16, 2018\n\nAs we get closer to our goal of stable embedded development with Rust for the 2018 edition launch, the embedded community is ramping up. We did a quick twitter poll which received hundreds of responses, and heard from developers using or evaluating embedded rust for personal and work projects.\nThe Embedded WG has also grown, starting off this year with 8 developers on a single team, to a group of 27 developers across 11 teams, each with their own area of focus within the embedded rust space.\nNow is a great time to start working with Embedded Rust, and we can't wait to see what the next year brings!\nembedded-hal Ecosystem Crates\n\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nDevice Cratesreleased160\nHAL Impl Cratesreleased130\nBoard Support Cratesreleased110\nDriver Crates Releasedreleased16+1\nDriver Crates WIPWIP46+6\nno-std cratesreleased17+3\n\n","id":"https://blog.rust-embedded.org/newsletter-14/","title":"The Embedded Working Group Newsletter - 14"},"https://blog.rust-embedded.org/newsletter-15/":{"body":"This is the fifteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nEmbedded at Rust All Hands 2019\nSome members of the Embedded Working Group attended the Rust All Hands two weeks ago. There they had the chance to discuss the needs of the embedded community (as identified in this survey) with the different Rust teams and other WGs. Here's a summary of what was discussed:\n\n\"const generics\"\n\nThe ability to parameterize over values, for example you could use this feature to write a fixed capacity Vec: struct Vec<T, const N: usize> { buffer: [T; N], len: usize }. There are a few compiler refactors going on that are required to land this in nightly so the status is \"WIP\". We'll have future meetings with the compiler team to try to identify and prioritize the parts of the feature that embedded developers need.\n\nconst fn with trait bounds on stable.\n\nFor example, impl<T> Struct<T> where T: Trait { pub const fn new() -> Self { .. } }. A lengthy pre-RFC discussion has concluded and a proper RFC has been proposed.\n\ncore::mem::MaybeUninit on stable.\n\nThe plan is to stabilize a minimal, uncontroversial subset of the API to make this available on stable ASAP.\n\nstd::io in core / alloc.\n\nIt's not possible to move std::io::{Read,Write} into alloc or core because the API depends on OS specific bits (e.g. last_os_error). An option may be to add a new set of Read / Write traits to core, maybe with associated error types, and then try to bridge these to std::io::{Read,Write} using blanket implementations / super traits, but this needs more research.\n\nfix rust-lang/cargo#5730\n\nThis bug breaks no_std builds that use build scripts unless the authors of the build dependencies are aware of the issue and actively work around it. The Cargo team is well aware of the problem. Unfortunately, it's hard to fix and the fix will likely be opt-in because it changes the current semantics.\n\nStabilize RFC 2282 - \"Cargo profile dependencies\"\n\nThis feature lets you optimize dependencies when using the dev profile; useful to keep dev binaries small enough to fit in Flash without sacrificing all debuggability. A new build profile will be added to cover the configuration of proc macros, build scripts, compiler plugins and their dependencies. The new profile solves the remaining unresolved question around RFC 2282.\n\nStabilize core::arch::arm\n\nThis module contains functions for instructions like wfi and nop, and SIMD instructions; stabilizing this removes the pressure for stable inline assembly (asm!). A member of the libs team is interested in this and will help us push it towards the finish line. A PR in this space has recently landed.\n\nAsserts in const fn context become compiler errors.\n\nWe understood that there are still several design / implementation issues that need to be discussed before this is stabilized, but in the meantime you can use the perma-unstable -Z unleash-the-miri-inside-of-you flag to do all sort of stuff in const context.\n\nstd-aware Cargo.\n\n@jamesmunns has written a pre-rfc for an incremental implementation of this feature based on our discussions with people from the libs and Cargo teams and the WASM WG.\n\nImprove searching for no_std crates on crates.io.\n\nThe backend supports searching within a category (like the no_std category) but there's no UI for it right now. This and fixing a bug where searches only return items found until a exact match was found (instead of returning all relevant matches) are in the crates.io team TODO list.\n\nFix: infinite loops (e.g. loop {}) are lowered to an abort instruction.\n\nIdeally, this should be fixed in LLVM proper but it's hard to fix. It's possible to fix this in rustc but the fix is likely to regress the performance of loops. The compiler team will follow up with two unstable flags to evaluate the (performance) impact of fixing this. The first flag applies the fix to only loops in return position of divergent function and the second flag applies the fix to all loops.\n\nMath support in core\n\nThat is 0f32.sin() should \"Just Work\" in no_std crates. There are a few questions about how to best implement this without degrading performance of applications that link to std (we want those to use the arch optimized routines in e.g. glibc's libm instead of the generic Rust implementation) and we need a champion to do the research.\n\nCargo build hooks\n\nThis refers to the ability to run custom code after cargo build. We covered use cases, their requirements and discussed the trade-offs of a more general Cargo tasks (e.g. cargo $task) mechanism vs a more targeted post-build script (e.g. post-build.rs) mechanism. Expect more news (a (pre-)RFC) from the WASM WG on this front.\n\nSlimmer core::fmt.\n\nThe current implementation of core::fmt uses trait objects and function pointers to make all uses of core::fmt fast to compile but this makes core::fmt impossible to inline which makes no_std programs that use formatting large in (binary) size. It might be possible to leverage std-aware Cargo to fix this: we could add a Cargo feature to core to replace the current implementation with one that's fully inlineable but as featureful as the current one -- this should produce smaller binaries.\nFor a bit more of detail you can check the logs and minutes from two meetings ago; they include our notes from the All Hands\nHighlights\n\nThe Embedded WG has started receiving submissions for the embedded showcase! We are looking for cool embedded Rust projects with visuals (pictures or videos) that can serve as examples of what can be done in Rust.\n\n\nThe stm32-rs organization has emerged to collate work on STM32 crates.\n\n\nSimilarly, the lpc-rs organization has emerged to work on LPC microcontrollers by NXP.\n\n\nAlso, the nrf-rs organization has emerged to focus on the nRF family of microcontrollers by Nordic Semiconductors.\n\n\n@adamgreig has released an experimental PAC (Peripheral Access Crate) alternative for STM32 microcontrollers: stm32ral that compiles in about 3 seconds. (PACs are known for compile times in the order of hundreds of seconds.)\n\n\nAs of nightly-2019-02-05 the embedded Rust Book is included as part of the docs shipped with the Rust toolchain! This is the online version.\n\n\nThe Rust compiler now has cross compilation support for 64-bit RISCV. Install the bare metal targets with rustup target (see rustup target list).\n\n\nThe Rust compiler also gained compilation support for x86_64 UEFI in the form of the x86_64-unknown-uefi target.\n\n\nFormatting numbers with core::fmt has become slimmer. Some users have reported binary size reductions of up to 26% (800B) in ARMv6-M binaries.\n\n\nThe copterust org has shared a bunch of driver crates for interfacing sensors commonly found in flight controllers (drones).\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\n\nVersion v0.4.1 of Real Time For the Masses (RTFM), a concurrency framework for building real time systems, has been released! This version fixes a soundness hole and includes a Russian translation of the RTFM book.\n\n\n@jamwaffles has published a driver crate for the SH1106, an OLED display, and an introduction blog post for their crate.\n\n\n@thejpster has released embedded-sdmmc, a pure-Rust #[no_std] SD card and FAT16/FAT32 library\n\n\n@hannobraun has published two crates: ieee802154, a partial implementation of the IEEE 802.15.4 standard, and dw1000, an embedded-hal driver for the Decawave DW1000 wireless transceiver chip.\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nDevice Cratesreleased160\nHAL Impl Cratesreleased15+2\nBoard Support Cratesreleased13+2\nDriver Crates Releasedreleased19+3\nDriver Crates WIPWIP59+13\nno-std cratesreleased23+6\n\n","id":"https://blog.rust-embedded.org/newsletter-15/","title":"The Embedded Working Group Newsletter - 15"},"https://blog.rust-embedded.org/newsletter-16/":{"body":"This is the sixteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nHighlights\n\nKnow of something that isn't awesome in embedded Rust yet? Let us know by adding it to the Not Yet Awesome Embedded Rust List!\n\n\nThe Embedded WG continues to receive submissions for the embedded showcase. We are looking for cool embedded Rust projects (applications, not libraries or tools) with visuals (pictures or videos) that can serve as examples of what can be done in Rust.\n\n\n\n42 Technology announced that they have got Rust running on the new Cortex-M33 powered Nordic nRF9160 LTE SiP.\n\n\nJames Munns has posted the first video of a series of streams developing a home wireless sensor node network. The stream focuses on teaching embedded, Rust, and IoT topics.\n\n\nEmbedded Projects\n\n\n@hannobraun published dwm1001, a board support crate for the Decawave DWM1001 module, which features a Nordic nRF52832 microcontroller and a Decawave DW1000 radio transceiver.\n\n\nThe RTFM (Real Time For the Masses) team has released cortex-m-rtfm v0.4.2; the most important new feature in this release are reproducible builds. They are also looking for user input on several open RFCs.\n\n\n\n@japaric has released cargo-call-stack v0.1.1. cargo-call-stack is a static, whole program stack analysis tool; this version ships many new improvements: filtering, cleaner graphs, support for programs that use recursion, dynamic dispatch or function pointer calls, plus numerous bug fixes.\n\n\n@jamwaffles has published version v0.4.7 of the embedded-graphics crate. This version ships with BMP support! For more details read the announcement blog post.\n\n\n@tarcieri extracted the micromath crate out of the accelerometer crate. It provides a fast, embedded-friendly arithmetic library (utilizing approximations which trade precision for improved performance and reduced code size), 2D/3D vector types, and statistical analysis functions.\n\n\n@shella created pyportal, a board support crate for the Adafruit PyPortal, which features an ILI9341 LCD touchscreen and ESP32 Wifi controller.\n\nIf you have an embedded project or blog post you would like to have featured in the next Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nPeripheral Access Cratesreleased19+3\nHAL Impl Cratesreleased18+3\nBoard Support Cratesreleased13~\nDriver Crates Releasedreleased20+1\nDriver Crates WIPWIP61+2\nno-std cratesreleased24+1\n\n","id":"https://blog.rust-embedded.org/newsletter-16/","title":"The Embedded Working Group Newsletter - 16"},"https://blog.rust-embedded.org/newsletter-17/":{"body":"This is the seventeenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nHighlights\n\nThe embedded showcase gained its first entry! The rusty clock project, an alarm clock that features pressure, temperature and humidity on an e-paper display and 5 programmable alarms. We are still looking for cool embedded projects to serve that can serve as examples of what can be done in Rust. Don't hesitate to submit yours!\nOxidizeConf, the first embedded Rust conference, has announced speakers! Check out the lineup here!\nAntoine van Gelder wrote about using Peripheral Access Crates to program interrupts on the STM32F3 Discovery board\nJames Munns gave a talk at Rust Berlin about what happens before main() in embedded Rust projects\n\nEmbedded Projects\n\n\n@jjkt is working on zmu, an emulator for microcontroller based systems. Zmu is work in progress but can already emulate substantial parts of Cortex M - based MCUs core architecture features.\n\n\n@japaric released v0.1.2 of cargo-call-stack, a static stack usage analyzer, and published a blog post with details about its implementation.\n\n\nWesley Moore wrote a blog post about getting Rust running on the TI SensorTag, see the project on sourcehut!\n\n\n@tarcieri released a board support crate for the Adafruit NeoTrellis M4 along with a platform-independent driver for its adxl343 accelerometer and support for using the accelerometer to detect the device's orientation.\n\n\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\n\nTypeStatusCountDiff\nPeripheral Access Cratesreleased18~\nHAL Impl Cratesreleased19~\nBoard Support Cratesreleased13~\nDriver Crates Releasedreleased21+1\nDriver Crates WIPWIP63+2\nno-std cratesreleased25+1\n\n","id":"https://blog.rust-embedded.org/newsletter-17/","title":"The Embedded Working Group Newsletter - 17"},"https://blog.rust-embedded.org/newsletter-18/":{"body":"This is the eighteenth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\n\n\n\n\n\n\nThe winner of the Chat Vote: Matrix\nAbout a month ago, due to Mozilla's plans to discontinue Mozilla IRC, we released RFC 0351: Chat Vote and started a public vote on which chat platform to use for the Rust Embedded Working Group in the future.\nThe winner of that vote was Matrix, with 160 votes, followed by IRC with 103 votes and Discord with 74 votes. As Matrix has won by more than 3 votes, it will become the new official chat platform for Rust Embedded! The name of our new channel is #rust-embedded:matrix.org, and you can join it right now using a client like Riot.\nWe will be trialling the new Matrix channel for the next two weeks, using it as our primary and official communication channel. After the trial period, we will evaluate any issues that came up during it, and decide how to proceed. More details about the organization of the channel can be found in the operational notes.\nSince IRC ended in second place, and it's our current platform, we'll also be establishing a bridge between the Matrix channel and IRC during the trial. This way, users have the option to continue using IRC if they so desire.\nTo avoid the administrative overhead of having to switch bridged channels later, we will soon bridge directly to the #rust-embedded channel on Freenode, not to the Mozilla IRC channel. The bridge will be activated once we've worked out the Freenode channel registration.\nWhile Matrix is a federated protocol, we are not planning on running our own infrastructure for now - instead, we will be using the matrix.org IRC bridge, and users are free to register on matrix.org or any other homeserver of their choosing. If this turns out to be a problem during the trial period, we may reconsider this decision.\nWe're also looking into a static log viewer, that would allow us to publish search-engine-indexable channel logs for public reading, similar to the public logs that we currently have. This may require us to self-host a static log generator such as matrix-static. Suggestions for other solutions are welcome!\nHighlights\n\n\nWe've had a bunch of Embedded Rust related events over the past couple of months. EWG member @thejpster was at ACCU 2019 (the Association of C and C++ Users Annual Conference), in Bristol, UK, on 12 April, delivering a talk on Embeddded Rust and the Monotron. Jonathan was then speaking at the Centre for Computing History in Cambridge, UK on 18 April, followed by hosting Oxidize at the end of April! Next up, Monotron is visiting Rust Conf in Portland, USA in late August. Don't forget, if you've been giving or attending Embedded Rust talks, drop us a line for the next newsletter!\n\n\nThe embedded showcase gained 3 new entries! We are still looking for cool embedded projects to serve that can serve as examples of what can be done in Rust. Don't hesitate to submit yours!\n\n\nEmbedded Projects\n\n\n@laanwj, @Disasm and @burrbull are working on Rust support for the Kendryte K210 RISC-V chips.\n\n\n@Disasm and @almindor updated riscv-rust-quickstart: now you can run Rust on the HiFive1 Rev B board.\n\n\n@Disasm released stm32-usbd: a fork of stm32f103xx-usb adopted for multiple STM32 device families.\n\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\n\nTypeStatusCountDiff\nPeripheral Access Cratesreleased22+4\nHAL Impl Cratesreleased25+6\nBoard Support Cratesreleased18+5\nDriver Crates Releasedreleased25+4\nDriver Crates WIPWIP67+4\nno-std cratesreleased26+1\n\n","id":"https://blog.rust-embedded.org/newsletter-18/","title":"The Embedded Working Group Newsletter - 18"},"https://blog.rust-embedded.org/newsletter-19/":{"body":"This is the 19th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nEmbedded Projects\n\n\nGoogle is working on a Coreboot replacement called Oreboot, i.e. Coreboot minus the 'C'. Slides for a talk about oreboot are also available.\n\n\n@eldruin released a platform-agnostic driver for the VEML6075 UVA and UVB light sensor (so you can optimize your suntan) and published a blog post with some pictures of the device in action.\n\n\n@therealprof wrote a blog post about porting an Embedded HAL impl of the digital::v1 traits for GPIOs to digital::v2.\n\n\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nPeripheral Access Cratesreleased30+8\nHAL Impl Cratesreleased26+1\nBoard Support Cratesreleased19+1\nDriver Crates Releasedreleased27+2\nDriver Crates WIPWIP68+1\nno-std cratesreleased28+2\n\n","id":"https://blog.rust-embedded.org/newsletter-19/","title":"The Embedded Working Group Newsletter - 19"},"https://blog.rust-embedded.org/newsletter-2/":{"body":"This is the second bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\ndbrgn has kicked off an investigation on how to mock embedded-hal to make testing sensors easier\nemilgardis and ryankurte are busy refactoring the svd-parser crate\njaparic, hannobraun, and jamesmunns from the Embedded WG attended the 2018 Rust All Hands in Berlin, working on our goal to make stable embedded rust development possible in 2018. See the bottom of this post for more details!\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\nembedded-hal drivers\nThis is a list of recently released drivers that are part of the Weekly Driver Initiative. There are currently 5 Released Drivers, 14 WIP Drivers, and lots of TODOs!\n\ndanielgallagher0 has released their hts221 humidity and temperature sensor driver\nMrBuddyCasino has released their I2C based mcp9808 temperature sensor driver\nIlya Epifanov has released their I2C based si5351 CMOS clock generator driver, check out the si5351 docs for more info\nEdwin Amsler is working on their axp209 PMIC driver\ndbrgn is working on their Sensirion sgp30 low-power gas sensor driver\npcein has started work on their pcd8544 for SPI based LCD controllers used in displays like the Nokia 5110\nnordmoen is working on their driver for the hc-sr04 ultrasonic distance sensor\n\nembedded-hal Board/Chip Support Crates\n\nDoumanAsh has started work on their stm32l4x6-hal chip support crate\n\nThanks\n\nThanks to all of the Rust Team and Working Group members who took time at the All Hands to tackle some important Embedded Issues\nThanks to Alex Chrichton who pushed a fix to a linker issue mentioned in our last newsletter\n\nHelp Wanted\n\nSimon Sapin posted some working code for the DS3234 SPI RTC, and is looking for someone to turn it into a maintained crate!\n\nIf you have an embedded project that could use contributors or maintainers, leave a comment for the next newsletter!\nSpecial Feature: The Embedded WG at the 2018 Rust All Hands\nThis week 15 or so Rust teams/working groups met for the Rust All Hands event in Berlin. Some members of the embedded WG were present and we had a chance to talk to the compiler, core and infra teams.\nThese are the highlights of our talks.\nEmbedded Rust on stable\nWe had previously identified 3 unstable features / issues that tie embedded development to the nightly channel in https://github.com/japaric/stable-embedded-rust. We talked to the other Rust teams about the possibility of addressing these issues in time for the 2018 edition release and the conclusion was that they thought that the timeline was possible. These are the 3 unstable features we are referring to:\nUnstable Feature #1: xargo\nWe'll ship a rust-std component (pre-compiled core+compiler-builtins) for the thumb* and msp430 targets. This removes the need for xargo so people will be able to do something like the following to cross compile to ARM Cortex-M:\nrustup target add thumb7m-none-eabi\ncargo build --target thumbv7m-none-eabi\n\nTracking issue: rust-lang/rust#49382.\nUnstable Feature #2: compiler-builtins\nextern crate compiler_builtins is unstable to directly use. The fix we have decided on is to inject that as part of the prelude you get from #![no_std].\nSo, today #![no_std] expands to something like this:\n#![no_std]\nextern crate core;\n\nWith our change the expansion will run like this:\n#![no_std]\nextern crate core;\n\n// but this doesn't #![feature(compiler_builtins_lib)]\nextern crate compiler_builtins;\n\nIn the future we might want to merge compiler-builtins into core but that requires more effort and can still be done if we do the #![no_std] prelude approach right now.\nTracking issue: rust-lang/rust#49380\nUnstable Feature #3: panic_fmt\nThere's an accepted RFC (#2070) for a stable mechanism to select the behavior of panic! in no_std context, and there's a know issue where the arguments of panic_fmt are kept in the binary even when they are unused by the panic_fmt implementation (cf. rust-lang/embedded-wg#41).\nThe main concern here was whether we'll be able to fix the binary size problem with the accepted design or if we'll need some new design. The compiler team thinks that this can be fixed with the existing design using MIR only rlibs but it's unlikely this will get fixed in time for the edition release. nagisa will likely propose an alternate solution that involves having Cargo select the panic provider crate.\nNon critical unstable features\nThere are some other unstable features that don't prevent you from doing embedded development, however they come up often when doing no-std development. We had a chat with people on the compiler team about them.\nUnstable Feature #4: const fn\nThis feature has been proposed for stabilization (cf. rust-lang/rust#24111).\nUnstable Feature #5: asm!\nBackground: Some assembly operations can be implemented as external assembly files that are then called into using FFI; other ops though do need to be inlined into the function from which they are called to prevent losing semantics. Using external assembly file can be done on the stable channel. The second type of operation requires the unstable asm! macro.\nThe compiler team is not 100% sure on whether they want to stabilize inline assembly for the edition release. The embedded WG has proposed an alternative proposal: expose some assembly operations that need to be inlined as \"Rust intrinsics\" -- in a similar fashion to how SIMD is being implemented; these intrinsics would be in the core::asm::$ARCH module and they could either be implemented by lowering to a LLVM intrinsic or using inline assembly. For example:\npub mod asm {\n pub mod arm {\n #[inline(always)]\n pub fn cpsid() {\n unsafe {\n asm!(\"cpsid i\" ::: \"memory\" : \"volatile\");\n }\n }\n }\n}\n\nThese would be stable APIs with an unstable implementation. If LLVM assembler syntax changes, the implementations of these functions would have to be updated.\nThe embedded WG will submit an RFC proposing the asm module and that will include a list of assembly operations that (a) are common and (b) need to be inlined for different architectures.\nUnstable Feature #6: #[used]\nThis experimental feature has been in the compiler for a while and it's required in some scenarios when using LTO to prevent the compiler from dead-stripping some function / static that needs to be in the final binary.\nWe'll try to get it stabilized by the edition release but it's not a high priority feature.\nStability of the Embedded Targets\nWe don't only want to make embedded Rust possible on stable; we also want to make sure the embedded targets don't regress. So we are going to add tests to rust-lang/rust CI to make sure regression block PRs from landing.\nThat effectively will make some of the embedded targets into the tier 1 platform. The core team is fine with adding the thumb* targets (ARM Cortex-M) to tier 1. Less maintained, still in development and not fully mature targets like AVR, MSP430 and RISCV will become tier 2 -- they'll be tested but won't block PRs and rust-std binaries will be produced but it's not guaranteed there will be binaries available for all nightly / beta / stable releases.\nWe'll open an issue to discuss with the infra team the exact tests we want to add and track progress on that, but have already told them about the kind of tests we want to add and they thought those kind of tests are possible to implement. The kind of tests we discussed were:\n\nIt compiles and links\nRuns the cross compiled binary in QEMU doesn't crash and exits with exit code 0.\nTracking the binary size of a program compiled with -Os / -Oz and notify someone or fail the build if the size changes by +/- 5-10% or something.\n\nLLVM backends that are not yet in rustc\nThere are two embedded LLVM backends that have not yet been enabled in rustc for different reasons: AVR and RISCV.\nIn the case of AVR the main reason is that some LLVM codegen bugs prevent you from building core for AVR. These bugs are related to 128-bit integers and formatting floats. The libs team discussed this some time ago and they decided they are fine with landing arch specific #[cfg] attributes to remove 128-bit integers and other things like float APIs.\nIn the case of RISCV the LLVM backend is currently under active development and our current version of LLVM doesn't fully support RISCV. We would have to backport several patches to make RISCV work on our LLVM version. The core team feels OK with backporting those patches as long as they have already landed in upstream LLVM, and are not still under review.\nTooling\nGetting tooling for e.g. binary inspection (e.g. objdump) can be hard on some platforms (e.g. Windows) specially for architecture which currently are not too widely used (e.g. RISCV). We can improve the situation here by shipping llvm tools with the Rust toolchain -- with one set of those tools you can inspect all the architectures that Rust supports. These are the thoughts of the core / infra team regarding this:\n\nWe put these tools in the sysroot and have them always shipped with the Rust toolchain so no rustup component add required -- this is already the case with lld. It might not be possible to provide these tools on all platforms but it's very likely they'll be available on tier 1 platforms.\nWe do not add these tools to the user $PATH. Instead some Cargo subcommand will be created by the embedded WG (e.g. cargo objdump) and that subcommand will look for llvm-objdump in the sysroot and do the right thing.\nWe make no guarantees about the semantics and interface of these tools being preserved over time (e.g. CLI changes, user facing output format changes, etc.).\n\nThe Embedded Rust Book\nWe decided on an initial audience for the embedded book; we will be targeting people that know some embedded stuff and some Rust. The main reason for this is that if someone knows one and not the\nother then they can go and read existing Rust documentation or the Discovery book and then read the embedded book. For more details check rust-lang-nursery/embedded-wg#56.\n","id":"https://blog.rust-embedded.org/newsletter-2/","title":"The Embedded Working Group Newsletter - 2"},"https://blog.rust-embedded.org/newsletter-20/":{"body":"This is the 20th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nEmbedded Projects\n\nJens Reimann has assembled a docker image for developing Rust on the ESP8266 and ESP32 series of devices, including stable alloc support!\n\n\nLucas Brendel working on peripheral access crates as well as a shared embedded HAL for the Infineon XMC4 series of microcontrollers in the xmc-rs organization. Peripheral access crates are available and the HAL is in the very early stages of development.\n\n\n42 Technology have published the source code for their Nordic nRF9160 demonstration application, along with a Rust crate which wraps up Nordic's proprietary C driver library. They also have a piece comparing Embedded Rust and Embedded C published in the German language magazine IOT Design this month.\n\n\ntheJPster's Monotron got a write-up in Hackaday. Moves are also afoot for a next-generation Monotron - codename Neotron 1000 - complete with a book! Check it out if you're interested developing a modern-day version of CP/M, written in Rust.\n\n\nprobe-rs finally has released on crates.io. The library enables you to inspect, debug and flash ARM cores. Flash the ARM core your future embedded Rust project with cargo-flash, fully integrated into cargo. Flashing works for the nRF51822, nRF52832, nRF52840, STMF042 and STMF429xI using a DAPLink or an ST-Link.\nThe upcomming 0.3.0 release will also enable your to flash any ARM core (provided an an ARM CMSIS-Pack exists in a known registry).\n\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\n\nTypeStatusCountDiff\nPeripheral Access Cratesreleased31+1\nHAL Impl Cratesreleased28+2\nBoard Support Cratesreleased190\nDriver Crates Releasedreleased28+1\nDriver Crates WIPWIP70+2\nno-std cratesreleased280\nno-std crates WIPWIP3+3\n\n","id":"https://blog.rust-embedded.org/newsletter-20/","title":"The Embedded Working Group Newsletter - 20"},"https://blog.rust-embedded.org/newsletter-21/":{"body":"This is the 21st newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nHighlights\n\nDon't forget to join our Community Chat on Matrix, with more than 250 Embedded Rustaceans!\n@andre-richter added two new tutorials for the Operating System development tutorials in Rust on the Raspberry Pi series:\n\nTutorial 11: Virtual Memory\nTutorial 12: CPU Exceptions: Part 1\n\n\n@jamesmunns streamed some work on developing interrupt and panic code on youtube\n\nEmbedded Projects\n\n@eldruin released a platform-agnostic driver for the OPT300x family of ambient light sensors and published a blog post with a picture of the device taking lux measurements.\n@mciantyre published a custom runtime and peripheral access crates to support development on the Teensy 4. Check out the repo to see how it works, discuss the approach, and try it out.\n@japaric released version v0.1.0 of ufmt, a smaller (6-40x) and faster (2-9x) alternative to core::fmt that's free of dynamic dispatch, recursion (where possible) and panicking branches. ufmt is not a drop-in replacement for core::fmt but it provides uDebug and uDisplay traits and a family of uwrite! macros. In this release the uwrite! macros, and the rest of the crate, work on the stable channel.\n@jamesmunns released two embedded crates:\n\npanic-persist: A panic handler crate inspired by panic-ramdump that logs panic messages to a region of RAM defined by the user, allowing for discovery of panic messages post-mortem using normal program control flow.\ncmim, or Cortex-M Interrupt Move: A crate for Cortex-M devices to move data to interrupt context, without needing a critical section to access the data within an interrupt, and to remove the need for the \"mutex dance\"\n\n\n@tarcieri released aead v0.2, providing generic traits for Authenticated Encryption with Associated Data (AEAD) ciphers, which now supports ergonomic alloc-free operation via an integration with the heapless crate. This trait is now implemented by several crates providing pure Rust implementations of AEAD modes which may be interesting to embedded users seeking to encrypt/data data in heapless buffers, including the chacha20poly1305 and aes-siv crates (and forthcoming support in the aes-ccm crate).\n\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nPeripheral Access Cratesreleased32+1\nHAL Impl Cratesreleased29+1\nBoard Support Cratesreleased190\nDriver Crates Releasedreleased30+1\nDriver Crates WIPWIP69-1\nno-std cratesreleased30+2\nno-std crates WIPWIP30\n\n","id":"https://blog.rust-embedded.org/newsletter-21/","title":"The Embedded Working Group Newsletter - 21"},"https://blog.rust-embedded.org/newsletter-22/":{"body":"This is the 22nd newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nHighlights\n\n@andre-richter added a new tutorial for the Operating System development tutorials in Rust on the Raspberry Pi series:\n\nTutorial 13: Integrated Testing - Kernel Unit tests, Integration tests and Console tests using QEMU.\n\n\n@jamesmunns sketched out a few introductory notes about foundational Embedded Rust Crates like r0, cortex-m, PACs, and HALs. See part 1 and part 2 on Twitter!\n@jamesmunns wrote about the cost of Formatting in Embedded Rust as part of the #rust2020 effort, and how to reduce code size while maintaining panic debug-ability\nCraig Bishop wrote an overview of Getting Started on the STM32L0, which contains an excellent breakdown of what makes up an Embedded Rust project\n\nEmbedded Projects\n\n\n@andre-richter released v0.1.0 of qemu-exit. This library provides functions to gracefully exit a running QEMU session from within your Rust binary with an user-defined exit code. This can be used for unit or integration tests that run inside QEMU. Currently supports aarch64 and x86_64 architectures.\n\n\n@eldruin released a platform-agnostic driver for the Si4703 FM radio turner (receiver) and published a blog post including a picture of an example setup.\n\n\n@eldruin released a platform-agnostic driver for the PCA9685 PWM LED/Servo controller driver and published a blog post including a video of the device controlling RGB LEDs and several Servo motors simultaneously.\n\n\n@eldruin released a platform-agnostic driver for Vishay's VEML6030 and VEML7700 ambient light sensors and published a blog post about it.\n\n\n@nickray released salty (API, book, code), a library for fast Ed25519 signatures on Cortex-M4 and Cortex-M33 microcontrollers. It presents the ed25519-dalek API, but is self-contained and uses the fastest currently published field operations implementation, due to Bjoern Haase, based on the UMAAL DSP instruction (a: u32, b: u32, c: u32, d: u32) -> (a * b + c + d): u64. Testing is done on the musca-b1 Cortex-M33 microcontroller, simulated in QEMU v4. Additionally, a C API is included.\n\n\n@nickray released littlefs2 (API, code), an idiomatic Rust API for the littlefs filesystem for microcontrollers, modeled after std::fs. The upstream library claims to be resilient against power-loss, and supports features like dynamic wear-leveling with bad block detection, inline files for efficient use of storage, and custom user attributes on files and directories.\n\n\n@nickray released nisty (API, code), a companion library to salty with similar API, but for NIST P-256 signatures on Cortex-M4 and Cortex-M33 microcontrollers. It offers deterministic signatures, idiomatic conversions, and uses micro-ecc as backend implementation, which also has UMAAL DSP instruction optimizations.\n\n\nprobe-rs has finally released 0.3.0 on crates.io. Its cargo-flash extension has improved by a large margin! Flashing speed has increased 10x and it is possible to virtually flash any ARM core thanks to the use of CMSIS-Pack flash algorithms.\n\nYou can create your own target description from a CMSIS-Pack with the use of target-gen\nBuilt in algorithms support the nRF51xxx, nRF91xxx, nRF52xxx, STM32F1xx, LPC8xx and LPC55S66 and LPC55S69 series using a DAPLink or an ST-Link.\nPlease file a PR if you extracted an algorithm for your chip and tested it!\nWe are looking for contributors. We have lots of non-ARM-specific stuff to do as well, such as improving erroring, useability and documentation including a webpage on the newly acquired probe.rs domain.\nJoin us on #probe-rs:matrix.org\n0.4.0 will finally feature GDB support :) Stay tuned!\n\n\n\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nPeripheral Access Cratesreleased39+7\nHAL Impl Cratesreleased31+2\nBoard Support Cratesreleased190\nDriver Crates Releasedreleased33+3\nDriver Crates WIPWIP67-2\nno-std cratesreleased32+2\nno-std crates WIPWIP30\n\n","id":"https://blog.rust-embedded.org/newsletter-22/","title":"The Embedded Working Group Newsletter - 22"},"https://blog.rust-embedded.org/newsletter-23/":{"body":"This is the 23rd newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nHighlights\n\n@lupyuen has been doing very cool things with Rust and the PineTime smart watch - see Porting druid Rust Widgets to PineTime Smart Watch and Optimising PineTime’s Display Driver with Rust and Mynewt.\nThe Raspberry Pi OS dev tutorial got a new chapter on Kernel Unit, Integration and Console tests using QEMU\nGoogle announced OpenSK, an open source security key based on TockOS in Embedded Rust\nFerrous Systems announced the second iteration of Oxidize, an embedded Rust conference in Berlin Germany, will take place in July of 2020. Read the Announcement Blog Post for more details\nPLCnext shared a Sample Rust Runtime and a how-to guide for running deterministic real-time Rust\non an industrial Linux device\n\nEmbedded Projects\n\n@almindor released a platform-agnostic driver for the MAX7219 segmented display and published a blog post including a picture of an example setup.\nembedded-hal-mock has released 0.7.1 on crates.io with support for error expectations. This means that you can now unit test the error handling logic of your embedded-hal driver crates.\n@rubberduck203 added VS Code configurations to the cortex-m-quickstart and published a blog post. Debugging Cortex-M projects in editor with VS Code now works out of the box.\n@rubberduck203 released a quickstart template for the STM32F3DISCOVERY board with pre-configured linker script & build targets.\n@jkristell released version 0.6 of the Infrared crate and published a blog post on how to add remote control support to an embedded Rust project.\nSteven Walter gave a talk at Rust Belt Rust about introducing Rust into an existing embedded Linux project.\n@arosspope released an implementation of the game snake for the stm32f3 discovery board using RTFM.\nRust firmware for Stabilizer has been released. Stabilizer is an open hardware, high speed, multi channel, STM32H743 based feedback controller for Quantum Physics applications. The firmware features RTFM v0.5 and smoltcp. Support for several analog front end mezzanines like current stabilization or Pound-Drever-Hall locks is being developed.\n@42technology announced they have ported Cloudflare's Rust-language QUIC library (known as 'quiche') to the Nordic nRF9160, producing possibly the world's first QUIC demonstration on that platform.\natsamd-hal 0.8.2 released, which includes work by @twitchyliquid64 and @jacobrosenthal implementing USB support for SAMD21 and SAMD51 devices.\n@Disasm released longan-nano and seedstudio-gd32v board support crates with examples for the corresponding RISC-V boards.\n\n\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nPeripheral Access Cratesreleased42+3\nHAL Impl Cratesreleased32+1\nBoard Support Cratesreleased21+2\nDriver Crates Releasedreleased36+3\nDriver Crates WIPWIP71+4\nno-std cratesreleased34+2\nno-std crates WIPWIP30\n\n","id":"https://blog.rust-embedded.org/newsletter-23/","title":"The Embedded Working Group Newsletter - 23"},"https://blog.rust-embedded.org/newsletter-24/":{"body":"This is the 24th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nWe've been on an unscheduled hiatus for the past six months or so, but it's time for us to return! Today we're doing a quick fast-forward of all of the great things that have been released while we've been on break.\nFor the next few weeks, we'll be doing a special \"catch-up\" schedule, meaning we'll be releasing articles weekly until we've caught up with all of the recent changes. Once we've wrapped that up, we'll go back to a regular monthly cadence.\nWe've also added a few new folks to the resources team say hello to @hargoniX, @eldruin and @kalkyl who will be helping out with the newsletter!\nWant to have your project mentioned? Make sure you let us know so we can include it!\nDiscuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nThe Great Catch-Up!\nHere's a whirlwind overview of some of the things that have been released and changed over the past six months or so!\nWe'll cover some of these updates in more detail over the coming weeks!\nRenames\n\nThe RTFM framework has been renamed to RTIC - Real Time Interrupt-driven Concurrency!\n\nResources\n\nWe've added phil's OS blog to our list of resources\n@hargoniX has added a blog post on embedded driver writing\n\nTooling\n\nthe probe-rs organization has added a lot of wonderful new tooling, including cargo-flash and cargo-embed\ncargo-hf2 for \"A small cargo subcommand to download cargo builds to Microsoft UF2 bootloaders via HID USB\"\nThe Knurling-rs project for embedded tooling has kicked off by releasing probe-run\n\nBindings\n\nFreeRTOS-rust as RTOS bindings (not to be confused with FreeRTOS.rs )\n\nNew Possibilities\n\nIt is now possible to run async/await on embedded!\nApplications can now be compiled for AVR in mainline Rust nightly builds!\n\nPACs\n\nmsp430fr2355 PAC has been added\nambiq-apollo1-pac, ambiq-apollo2-pac and ambiq-apollo3p-pac have been added\n\nHALs\n\nmsp430fr2x5x-hal has been added\n\nBSPs\n\na BSP for the onebitsy\nSeveral Adafruit BSPs:\n\nmetro_m0\npygamer\nfeather-f405\nfeather_m0\nfeather_m4\ncircuit_playground_express\nedgebadge\ngemma_m0\nitsybitsy_m0\nitsybitsy_m4\ntrinket_m0\n\n\nSeveral arduino BSPs:\n\narduino_mkrvidor4000\narduino_mkrzero\narduino_nano33iot\n\n\nThe samd21_mini BSP\nThe xiao_m0 BSP\n\nGeneral abstraction crates\n\nThe atat crate for parsing AT commands\n\nDrivers\n\nADXL313\nAnyLeaf\ndht-sensor\nMAX6955\nMCP25LCXX\nTC72\nST7789\nDW1000\nAdafruit-7segment\n\nWIP Drivers\n\nBMI160\nepd-waveshare\nHRS3300\nHDC20xx\nISL29125\nLSM9DS1\nltr-559\nlvgl\nMAX170xx\nMAX3010x\nMCP4725\nMLX9061x\nublox-cellular-rs\n\nno_std crates\n\ndebouncr\nembedded-crc-macros\nembedded-websocket\nendian_codec\ngdbstub\nmicrofft\nsmbus-pec\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nPeripheral Access Cratesreleased46+4\nHAL Impl Cratesreleased33+1\nBoard Support Cratesreleased38+17\nDriver Crates Releasedreleased45+9\nDriver Crates WIPWIP84+13\nno-std cratesreleased41+7\nno-std crates WIPWIP3+0\n\n","id":"https://blog.rust-embedded.org/newsletter-24/","title":"The Embedded Working Group Newsletter - 24"},"https://blog.rust-embedded.org/newsletter-25/":{"body":"This is the 25th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nAs a note, some of these stories have happened over the past months. We're still working on catching up, but wanted to share them with you!\nDiscuss on #rust-embedded:matrix.org, users.rust-lang.org, on twitter, or on reddit!\n\nIf you want to mention something in the next newsletter, send us a pull request!\nHighlights\n\n@hannobraun wrote an article about his DW1000 driver.\n@andre-richter added a new tutorial to the Operating System development tutorials in Rust on the Raspberry Pi series:\n\nTutorial 14: Exceptions Part 2: Peripheral IRQs - Including drivers for the BCM and GICv2 interrupt controllers.\n\n\nIn recent nightlies,rust-std support for the two bare-metal aarch64 targets has landed.\n\nAdd them using rustup target add aarch64-unknown-none-softfloat or rustup target add aarch64-unknown-none.\nSee it in action here for building a kernel without the need for third-party tools like xbuild or xargo.\n\n\n@therealprof wrote an introduction article about the \"USB-C pill\".\n@bobmcwhirter wrote an article about using an ESP8266 as a WiFi offload with an STM32F401RE\nFerrous Systems released defmt, a highly efficient Rust logging framework for embedded devices\n\nEmbedded Projects\n\n@rubberduck203 released the experimental switch-hal crate, which provides a zero-cost abstraction over Active High/Active Low GPIO, allowing application developers to more clearly express their intent and for drivers to avoid making runtime decisions about driving a line high or low based on the pin's active level.\n@rubberduck203 has also released the stm32f3-discovery board support crate as an alternative to the unmaintained f3 crate.\nThe stm32f3-discovery-quickstart template has been updated to utilize both the stm32f3-discovery board support crate and the switch-hal crate. It also now includes VS Code tasks for cleaning, building examples, and building in release mode.\n@proman21 has released a beta version of samd-timer, an abstraction for the Timer peripherals present on Atmel SAM microcontrollers. This library provides lower-level control over these timers than atsamd-hal, while remaining compatible with the HAL clock system.\n@dbrgn and @rnestler released a first version of the shtcx embedded-hal driver for Sensirion SHTCx series humidity/temperature sensors. The driver is feature-complete, but currently supports only a blocking API. The crate will be updated with an alternative non-blocking API soon.\n@ra-kete released the microfft crate, a library for computing fast fourier transforms on embedded devices.\n@dajamante added an obstacle avoiding robot with more details in this article.\n@therealprof released the display-interface crate, an abstraction over the different possibilities to drive a display.\n@bugadani released the embedded-text crate, a text rendering library built on top of embedded-graphics.\n@bobmcwhirter released the drogue-esp8266, a WiFi-offload embedded-nal implementation crate.\n\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nPeripheral Access Cratesreleased47+1\nHAL Impl Cratesreleased330\nBoard Support Cratesreleased380\nDriver Crates Releasedreleased52+7\nDriver Crates WIPWIP85+1\nno-std cratesreleased410\nno-std crates WIPWIP30\n\n","id":"https://blog.rust-embedded.org/newsletter-25/","title":"The Embedded Working Group Newsletter - 25"},"https://blog.rust-embedded.org/newsletter-26/":{"body":"Highlights\n\n\n@cecton wrote a blog post targeted to experienced developers but embedded development beginners: Rust, Arduino and Embedded Development as a Beginner: Part 1\n\n\n@brainstorm and @joshajohnson Created a RTIC example for an HID mouse with a blackberry trackball bbtrackball-rs.\n\n\nThe knurling-rs tooling initiative by Ferrous Systems has grown: after defmt, the project has publicly released three new tools:\n\nflip-link, a linker wrapper that adds zero-cost stack overflow protection to your project\nprobe-run, a Cargo runner that seamlessly runs embedded programs on your target device as if they were native ones\ndefmt-test, a proc-macro to write and run unit tests on embedded devices\n\n\n\nThe Rust Embedded Working Group's MSRV (Minimum Supported Rust Version)\npolicy has been updated and now only requires that crates build on the\nlatest stable Rust release. See msrv for more details.\n\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\n\n@eldruin released a platform-agnostic driver for the CCS811 indoor air quality sensor and published a blog post including example setups.\n@diondokter released a first version of device-driver which can aid driver developers in developing device drivers. For now only register interfaces are supported as is laid out in this twitter thread.\n@dbrgn released version 0.2 of the debouncr crate. It now supports stateful debouncing, meaning that the user can now choose whether every bouncing→stable transition should be detected as an edge, or only high↔︎low transitions.\n\n\nGet Involved\nThis is the 26th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on #rust-embedded:matrix.org!\nIf you want to mention something in the next newsletter, send us a pull request!\n","id":"https://blog.rust-embedded.org/newsletter-26/","title":"The Embedded Working Group Newsletter - 26"},"https://blog.rust-embedded.org/newsletter-27/":{"body":"Highlights\n\n\n@hannobraun published Last Month in Flott - March 2021, the monthly newsletter for Flott. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).\n\n\nThe cortex-m crate has been\nupdated to 0.7, including a recent release of 0.7.2, please update your\ndependencies and let us know if you encounter any issues!\n\n\nThe Embedded Rust documentation and books have moved URLs, and are now all\navailable from https://docs.rust-embedded.org.\n\n\nThis blog has also moved URLs, and is now available at\nhttps://blog.rust-embedded.org\n\n\nOur weekly meetings continue at 8PM Berlin Time on our Matrix channel,\n#rust-embedded:matrix.org. Join us to catch up on the latest developments\nin the Embedded Rust ecosystem!\n\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\n\n@hannobraun released RampMaker 0.2, a library for generating stepper motor acceleration profiles, and Stepper 0.5, the universal stepper motor interface. Both libraries are part of the Flott motion control toolkit.\nembassy, an async/await executor\ndesigned for embedded usage and currently supporting nRF and STM32F4 devices,\nis nearing its first crates.io release. Feedback and testing would be welcome!\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.\nGet Involved\nThis is the 27th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\n\n\n\n\n\nIf you want to mention something in the next newsletter, send us a pull request!\n\n","id":"https://blog.rust-embedded.org/newsletter-27/","title":"The Embedded Working Group Newsletter - 27"},"https://blog.rust-embedded.org/newsletter-28/":{"body":"Highlights\n\nLast Month in Flott, the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\n\nCrate device-driver has released version 0.2.0!\n(Since 0.1.0, added customizable bit ordering and more pac-like write and modify interface)\nAfter almost a year stm32f4xx-hal has released version 0.9.0! Get it while it's hot. 🔥🌶️\nembedded-graphics 0.7.0-beta.1 released as the first stable step towards the long awaited 0.7.0! \nThere should be no major/breaking changes after this release as we work mostly on documentation, bugfixes and polish. See the release notes here.\nsvd2rust 0.18.0 was released, bringing a number of changes to PAC\ngeneration; if you maintain a PAC please try it out!\nshared-bus 0.2.1 was released, with support for concurrency frameworks like RTIC. Check the relevant documentation for more details.\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.\nGet Involved\nThis is the 28th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on #rust-embedded:matrix.org!\nIf you want to mention something in the next newsletter, send us a pull request!\n\n","id":"https://blog.rust-embedded.org/newsletter-28/","title":"The Embedded Working Group Newsletter - 28"},"https://blog.rust-embedded.org/newsletter-29/":{"body":"Highlights\n\n\nLast Month in Flott, the monthly newsletter for Flott has been published. Flott is an open source toolkit for motion control software in Rust (designed to run everywhere, including microcontrollers).\n\n\nThe microbit crate has released v0.9.0, moved under the nrf-rs organisational umbrella, and gained micro:bit v2 support. 🎉\n\n\nThe switch-hal crate released v0.4.0, adding StatefulOutputSwitch for platforms that support StatefulOutputPin.\n\n\nThe probe-rs project, which provides debugging and flash programming for a variety of embedded targets, released version v0.11.0, with a number of performance and functionality improvements.\n\n\ncortex-m released version 0.7.3, improving ease-of-use for the Delay implementation and fixing native builds on non-x86 hosts.\n\n\ncortex-m-rt released version 0.6.15, backporting various fixes to the linker script and helping prepare for a new 0.7 release soon.\n\n\ncross has posted a call for help looking for new maintainers: if you use cross and would like to help out, please check it out!\n\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\n\nWindfisch published their Midikraken, an extensible up-to-16-port MIDI-USB-Interface that also will support standalone operation (e.g. MIDI routing) soon. The project uses Rust's RTIC framework to drive a STM32F103 microcontroller board (a.k.a. \"Blue Pill\") and is open-source and open-hardware. The firmware is in active development and lots of cool new features are down the way! Kits for self-assembly will likely be sold some day in the future.\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.\nThis is the 29th newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nGet Involved\nIf you want to mention something in the next newsletter, send us a pull request!\n","id":"https://blog.rust-embedded.org/newsletter-29/","title":"The Embedded Working Group Newsletter - 29"},"https://blog.rust-embedded.org/newsletter-3/":{"body":"This is the third bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nCrates for the Embedded Rust Ecosystem are now being tracked in the Awesome Embedded Rust repository\nProgress has been made as part of the Embedded Rust on Stable initiative, including:\n\nextern crate compiler_builtins is now included in the no_std prelude\nxargo no longer needed for ARM Cortex-M development\n\n\nWe also made some progress on simplifying the embedded development setup: You can now link Embedded Rust programs using lld\nWilfried kicked off a blog series about using embedded rust\nAndre Richter is writing a tutorial for using Rust to write bare metal Raspberry Pi 3 applications\nThe Embedonomicon and the Embedded Rust Books are now kept in the Embedded WG repository, and pull requests are welcome!\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\njaparic released an initial version of cargo-binutils, which will allow you to use LLVM's binutils (like nm, size, objcopy, etc.) in the format cargo objcopy (once issue 49584 has landed)\nmyeisha released the first version of their thumb2-stack-size tool, which helps determine the maximum stack size used in embedded code\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCount\nDevice Cratesreleased13\nHAL Impl Cratesreleased10\nDriver Crates Releasedreleased7\nDriver Crates WIPWIP26\n\nHelp Wanted\n\nWe need help working on RFC2070, stabilizing usage of custom Panic behavior. nagisa is willing to mentor!\nIf you use inline assembly in your Embedded Rust programs, help us capture what assembly operations are used most often so we can stabilize them as intrinsics\n\n","id":"https://blog.rust-embedded.org/newsletter-3/","title":"The Embedded Working Group Newsletter - 3"},"https://blog.rust-embedded.org/newsletter-30/":{"body":"\nHighlights\n\n@dkhayes117 joined the embedded working group's RISC-V team\nRust std support added for the ESP32\nRust on Espressif chips update\nState of LoRaWAN support\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\n\ncortex-m-rt v0.7.0 was released, with a number of bug fixes.\nembedded-hal 0.2.6 released with some backports from the upcoming 1.0\nrelease: the new Transactional SPI and I2C interface, 10-bit I2C addressing\nmode, set_state method for OutputPin, and new IoPin trait.\nembedded-hal 1.0.0-alpha.5 released, with a number of new features and\nchanges as we work towards the final 1.0 release.\nlinux-embedded-hal 0.3.1 and 0.3.2 released with some backports and updates including\nan implementation of the Transactional SPI and I2C interface and a bugfix\nfor active-low output pins.\nlinux-embedded-hal 0.4.0-alpha.1 released adapted to the embedded-hal 1.0.0-alpha.5\nrelease and a bugfix for active-low output pins.\ngpio-cdev 0.5.0 released with some updates, including updating to tokio 1.0.\nsysfs-gpio 0.6.0 released with some updates, including updating to tokio 1.0.\ni2cdev 0.5.0 released with some updates.\nspidev 0.5.0 released with some updates.\ndrogue-tls 0.3.0 released with some updates.\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.\nGet Involved\nThis Embedded WG blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on #rust-embedded:matrix.org!\nIf you want to mention something in the next newsletter, send us a pull request!\n","id":"https://blog.rust-embedded.org/newsletter-30/","title":"The Embedded Working Group Newsletter - 30"},"https://blog.rust-embedded.org/newsletter-31/":{"body":"Highlights\n\nAdaCore and Ferrous Systems have joined forces to support Rust in safety- and mission-critical environments.\n\nAnnouncement from AdaCore\nAnnouncement from Ferrous Systems\n\n\nAUTOSAR announces new Working Group for Programming Language Rust in Automotive Software context.\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to add it to the next newsletter, we would love to show it off!\n\n\nsvd2rust released v0.20.0.\n\n\nThe new version of the Discovery book\ntargeting the micro:bit development board was released.\n\n\nembedded-hal 1.0.0-alpha.6 and 1.0.0-alpha.7 released, with a number of new features and\nchanges as we work towards the final 1.0 release. Most notably,\nCAN (Controller Area Network) traits were added and some traits\nwith unconstrained associated types were removed.\n\n\nembedded-hal 0.2.7 released, including CAN (Controller Area Network) traits which were backported.\n\n\nembedded-dma 0.2.0 released, including const generics support and resolves some confusion around 'static.\n\n\nA project to develop asynchronous versions of the embedded-hal traits has been started.\nSee the current roadmap and please join the effort!\n\n\nlinux-embedded-hal 0.4.0-alpha.2 released updating embedded-hal to version 1.0.0-alpha.7.\n\n\nNew Rust Embedded ecosystem for the radiation-hardened Vorago VA108xx family of devices:\nva108xx PAC,\nva108xx-hal HAL\nand vorago-reb1 BSP\nwith blogpost\n\n\nNew device driver crate for the MAX116xx\n10-bit ADC devices with blogpost\n\n\nThe RIOT operating system now has upstream support for Rust applications.\nThis encompasses support in the build system,\nhigh-level wrappers that make the OS's C mechanisms safe and idiomatic to use,\nand additional examples maintained externally.\nThe wrappers implement high-level traits (e.g. from embedded-hal, embedded-nal and mutex-traits) where practical.\n\n\nA blog post by Tweede Golf about comparing Embassy with FreeRTOS.\n\n\neeprom24x I2C EEPROM driver 0.5.0 released, adding support for STM M24C01 and M24C02 devices as well as implementing the embedded-storage traits.\n\n\nmeasurements 0.10.4 and 0.11.0 released, most notably adding support for humidity and density.\n\n\n9names released a platform-agnostic driver for Wii Extension Controllers and published a blog post. This driver supports Nunchuk controllers as well as the many variants of the Classic Controller (Original/Pro/NES/SNES).\n\n\nDrogue Device now features an async Bluetooth Mesh stack.\n\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository.\nGet Involved\nThis Embedded WG blog is where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\nDiscuss on #rust-embedded:matrix.org!\nIf you want to mention something in the next newsletter, send us a pull request!\n","id":"https://blog.rust-embedded.org/newsletter-31/","title":"The Embedded Working Group Newsletter - 31"},"https://blog.rust-embedded.org/newsletter-4/":{"body":"This is the fourth bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nThe Embedded WG IRC meetings are now explicitly public, and the agendas for the next meeting can be found in the WG Issues, like this issue for the next meeting\nDavid shared his utility Form, which takes a single lib.rs (like those created by svd2rust or bindgen), and splits it into structured modules. Check out the nrf52 Chip Support Crate as an example, and try it out for your generated projects!\nastro shared managed, A library that provides a way to logically own objects, whether or not heap allocation is available\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\nDaniel started work on bluetooth-hci, an abstraction layer for HCI based Bluetooth Controllers, and is using it in his bluenrg crate for STMicro's BlueNRG RF modules\ncr1901 shared his AT2XT project, an adapter that allows use of low cost PS2 keyboards with older computers that expect (now very expensive) XT keyboards. The firmware for this project is based on rtfm, and runs on an msp430 microcontroller. Check out the short blurb by cr1901 summarizing the project\nhannobraun released v0.3 of his lpc82x Chip Support Crate for NXP's LPC82x family of microcontrollers, as well as v0.1 of lpc82x-hal. Check out the lpc82x-hal announcement here!\njaparic released v0.3.1 of heapless which now contains fixed capacity implementations of HashMap and HashSet that work on no_std, do not require an allocator, and use u32 hashes (instead of the default u64).\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCount\nDevice Cratesreleased12\nHAL Impl Cratesreleased10\nBoard Support Cratesreleased6\nDriver Crates Releasedreleased7\nDriver Crates WIPWIP27\n\nHelp Wanted\n\nThe Embedded WG is looking for contributors for the Rustfest Impl Period. If you will be attending RustFest in Paris, let us know!\nProgress is being made towards Stable Embedded Rust, try out the current preview, and we would love some feedback!\n\n","id":"https://blog.rust-embedded.org/newsletter-4/","title":"The Embedded Working Group Newsletter - 4"},"https://blog.rust-embedded.org/newsletter-5/":{"body":"This is the fifth bi-weekly newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nWe had a bonus Embedded-WG Newsletter this week about the path forward towards stable Embedded Rust, and what you can do as a crate maintainer to help with the effort!\nThe Tock-OS project posted about their MMIO Registers, contrasting them to crates generated by svd2rust\nThere were a couple of great posts about developing with Rust on Embedded targets from 219 Design and nercury\nIf Game Boy Advance development with Rust sounds interesting to you, make sure you check out the rusty-TONC and stdgba projects\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\nKjetil Kjeka shared their crate uX pronounced as \"unsigned X\" for working with non standard integer types (like u7, u63, etc) which act like the built in unsigned integer types\nAdam Greig shared two crates:\n\nstm32-rs, a tool for cleaning up Chip Support Crates for STM32 microcontrollers and making it easier to work between multiple devices\nblethrs, an ethernet bootloader for STM32F4 chips, using the smoltcp networking stack\n\n\nJames Waples released a driver for ssd1306 based OLED displays, read the announcement blog for more info\nJohn Scarrott released a Chip Support Crate for the nRF52840 chip from Nordic Semiconductor\nKerem posted a new Chip Support Crate for the Nordic Semiconductor nRF51, and joined development of the existing nrf51-hal HAL Impl Crate\nTeo Röijezon released a combo of a stm32f0x0 Chip Support Crate, as well as a stm32f0x0-hal HAL Impl Crate\nRahul Thakoor shipped a driver crate for mma7660fc based 3-axis accelerometers. Check out the mma7660fc blog announcement\nwhitequark shared their log_buffer crate for storing UTF-8 text in a ring buffer, and accessing it as &strs\nMichael shared proptest, a tool for performing Property Based Testing, which now has no_std support thanks to a PR from Zack Pierce\ntheJPster has been working on Monotron - a small 8-bit style home computer with a ROM written in Rust - ready for his talk at RustFest. For this, he's been working on crates for generating VGA video, decoding PS/2 keyboard scancodes and interactive text-based menu systems.\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCount\nDevice Cratesreleased12\nHAL Impl Cratesreleased10\nBoard Support Cratesreleased6\nDriver Crates Releasedreleased9\nDriver Crates WIPWIP29\n\nHelp Wanted\n\nMake sure to check out the path forward post, and report any issues you find!\nRaspberry Fields is a festival of digital making, centered around the Raspberry Pi. It's taking place on Saturday 30 June and Sunday 1 July, in Cambridge, England. theJPster would love to set up a Rust stall, to talk to everyone about the advantages Rust offers and how they can get in to Rust on the Raspberry Pi. But to make that work, he needs your help! If you're interested, contact @therealjpster on Twitter or email pi@thejpster.org.uk.\nSome members of the embedded WG will attend the RustFest impl days in two weeks. If you want to make Rust awesome for embedded development come help us! We have tasks with mentors and some hardware to give away!. Let us know if you are interested in helping out by commenting on that issue.\n\n","id":"https://blog.rust-embedded.org/newsletter-5/","title":"The Embedded Working Group Newsletter - 5"},"https://blog.rust-embedded.org/newsletter-6/":{"body":"This is the sixth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\nThis newsletter covers the past ~6 weeks.\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nJacob Creedon gave an introduction talk about using Rust with embedded systems at the Teardown Conference in Portland, check out Jacob's Slides or the Video of Jacob's Talk\nThe Embedded WG's own theJPster talked about the Monotron at RustFest Paris, you can see JP's Slides, or check out the Video of JP's Talk\nJorge Aparicio, Vadzim Dambrouski and Hanno Braun from the embedded WG also attended RustFest Paris and the following impl days. They worked towards embedded Rust on stable, better embedded Rust tooling and better MSP430 support; gave away some hardware; and chatted with lots of people interested in embedded Rust.\nThe #[panic_implementation] feature has landed and has been proposed for stabilization (FCP merge). This feature lets you define the behavior of panic! in #[no_std] context and it's the final piece for making embedded Rust development possible on the stable channel. :tada:\nThe Discovery book has been updated to work with the preview of stable embedded Rust.\nA new llvm-tools rustup component is now available on recent nightly releases. It contains LLVM tools to inspect Rust binaries regardless of their target architecture. One set of tools for ARM Cortex-M, MSP430, x86_64 and other architectures!\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\nrudihorn shared light-cli, a lightweight, no_std, and heapless CLI tool\nPaolo Teti shared ti-hercules-bsp, a board support package for Texas Instruments TMS570 MCUs, used by safety critical industries such as automotive and aerospace\nMarcel Buesing posted their driver crate for the bme680 environmental sensor\nRoy Smeding is working on support for the stm32f334 chip from STMicro\nThe Embedded WG's own Jonathan Soo announced his project, Bobbin SDK, a set of tools to make it easier to share code between different chips from the same or different vendors\nEitan Mosenkis did a major update of their esp-rs script which produces a project to compile Rust code for the ESP8266 via the mrustc Rust to C compiler.\nHanno Braun released v0.2 of lpc82x-hal, which includes a radical simplification of the API, allowing for stronger compile-time state guarantees. Check out the lpc82x-hal announcement for more info!\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCount\nDevice Cratesreleased14\nHAL Impl Cratesreleased11\nBoard Support Cratesreleased6\nDriver Crates Releasedreleased9\nDriver Crates WIPWIP30\n\nHelp Wanted\n\nWe are seeking input about the user interface the cargo-binutils subcommands should expose. These subcommands provide access to the LLVM tools provided by the llvm-tools rustup component mentioned above.\nAre you using embedded Rust in production? We are collecting commercial testimonials about embedded Rust for the webpage the embedded WG will have on the revamped rust-lang.org website. Even if you can't give details about the product you are building we would still love to hear from you!\n\n","id":"https://blog.rust-embedded.org/newsletter-6/","title":"The Embedded Working Group Newsletter - 6"},"https://blog.rust-embedded.org/newsletter-7/":{"body":"This is the seventh newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nWe have launched the Embedded WG Twitter! We'll be publishing things like our newsletter here, so go ahead and follow to stay up to date. If you have something you're working on and want to share, feel free to @ us so we can retweet it!\nWork started on porting MUSL's libm (for math functions like sin, cos, etc.) has started, and already has 26 of 32 functions ported! This crate will hopefully be included in the core of Rust, so it can be used by no_std targets such as embedded or wasm.\nThe Atomic*.{load,store} API is now available for the thumbv6m and msp430 targets.\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\nThis week we have two Multirotor Flight Controller projects starting in Rust! They are both based on the stm32f3 family of chips from STMicro.\n\nEmil Fresk posted on Twitter about his project TrustFlight, which is an open source, Rust based software library for controlling the TrustFlight HW he designed.\nJosh Mcguigan announced in his Blog Post that he is planning to develop a firmware package for the BetaFPV F3, which is an off the shelf flight controller\n\n\nWe also have two projects aiming to make use of Rust on the Raspberry Pi a little easier:\n\nAdam Gausmann shared his Rustberry project on Reddit, which includes register maps and an I/O library for the Raspberry Pi\nRahul Thakoor shared his rust_gpiozero crate on Medium, which is based on the Python library of similar name. He has also started writing a series of tutorials for developers new to working with physical hardware.\n\n\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nDevice Cratesreleased140\nHAL Impl Cratesreleased110\nBoard Support Cratesreleased60\nDriver Crates Releasedreleased90\nDriver Crates WIPWIP300\n\nHelp Wanted\n\nHelp contribute to development of Rust's libm to get math functions built in to core for no_std targets!\n\n","id":"https://blog.rust-embedded.org/newsletter-7/","title":"The Embedded Working Group Newsletter - 7"},"https://blog.rust-embedded.org/newsletter-8/":{"body":"This is the eighth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nlibm, the no_std port of MUSL's math library led by japaric has finished its' first release! It can now be used by embedded (or wasm!) targets that need support for math functions.\ndroogmic is working on microrust, a port of japaric's Discovery book for the BBC MicroBit, based on the Nordic nRF51\nHideki Sekine and Vaishali Thakkar have landed initial support for an Embedded CI Harness in the rust-lang/rust repo as part of the Increasing Rust's Reach project. This opens the door for tests that will help prevent regressions in rustc and cargo for ARM Cortex-M targets\nCMSIS intrinsics for ARM Cortex processors have landed in stdsimd. Check out the the docs in nightly soon† for info, thanks to Paolo Teti and japaric!\nAshley Williams released cargo-generate, a CLI tool for generating Cargo projects from a template, reducing the need to manually write boilerplate code. If you write some embedded templates, let us know!\n\n†: The CMSIS intrinsics will show up in the docs after the next successful nightly build (after 2018-07-30)\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\nDavid McGillicuddy has released his crate, eight-segment, an embedded-hal driver for displaying digits on 8 segment displays like the HDSP H-101\nJames Waples announced the newest release of his embedded-graphics library in a tweet. This version fixes some small issues, as well as provides functionality to save memory\nMart Roosmaa released bolos-rs, a 3rd party Rust SDK for the Ledger Nano cryptocurrency wallet. Check out his Medium post for more info!\nThe cc1101 crate can now recieve radio packets! Check out the reddit post by Daniel Svensson, as well as his blog post for more info\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nDevice Cratesreleased140\nHAL Impl Cratesreleased110\nBoard Support Cratesreleased8+2\nDriver Crates Releasedreleased11+2\nDriver Crates WIPWIP35+5\nno-std cratesreleased12+12\n\nHelp Wanted\n\nThe Embedded-WG is looking for someone to write an RFC for ARM Intrinsics to get them stabilized\nJonathan Pallant is looking for ideas to implement for the Monotron project. Check out the monotron blog post for more details!\nThe libm project is looking for help with refactoring in order to better support chips without hardware double-floating-point support\n\n","id":"https://blog.rust-embedded.org/newsletter-8/","title":"The Embedded Working Group Newsletter - 8"},"https://blog.rust-embedded.org/newsletter-9/":{"body":"This is the ninth newsletter of the Embedded WG where we highlight new progress, celebrate cool projects, thank the community, and advertise projects that need help!\n\nIf you want to mention something in the next newsletter, make sure to leave a comment on the issue.\nHighlights\n\nThe Embedded Working Group has moved! You can find our new coordination repo at rust-embedded/wg on GitHub, and crates maintained by the working group in the rust-embedded organization\nThe Embedded Working Group has grown! We are now 18 people grouped in the following 6 teams to allow for better focus on these topics:\n\nThe Cortex-M team develops and maintains the core of the Cortex-M crate ecosystem\nThe HAL team develops and maintains crates that ease the development of Hardware Abstraction Layers, Board Support Crates and drivers\nThe MS430 team develops and maintains the core of the MSP430 crate ecosystem\nThe RISCV team develops and maintains the core of the RISCV crate ecosystem\nThe Resources team develops, maintains and curates resources on embedded Rust\nThe Tools team maintains and develops core embedded tools\n\n\n\nEmbedded Projects\nIf you have an embedded project or blog post you would like to have featured in the Embedded WG Newsletter, make sure to mention it on the tracking issue for the next newsletter, we would love to show it off!\n\nrust-lang/rust#52787 has landed, adding support in nightly for the RISC-V architecture as a bare-metal target!\n\nembedded-hal Ecosystem Crates\nAs part of the Weekly Driver Initiative, crates that are part of the embedded-hal ecosystem are now tracked in the Awesome Embedded Rust repository. Here is a current snapshot of what is available there:\nTypeStatusCountDiff\nDevice Cratesreleased140\nHAL Impl Cratesreleased110\nBoard Support Cratesreleased9+1\nDriver Crates Releasedreleased110\nDriver Crates WIPWIP38+3\nno-std cratesreleased120\n\nHelp Wanted\n\nWe're considering changing to LLD as the default linker for thumb targets. Check out the RFC at rust-embedded/wg#160, and let us know what you think\n\n","id":"https://blog.rust-embedded.org/newsletter-9/","title":"The Embedded Working Group Newsletter - 9"},"https://blog.rust-embedded.org/the-path-towards-stable/":{"body":"Cortex-M library development now possible on beta and the path towards stable embedded Rust\n\nTL;DR\n\n1.27 = embedded (Cortex-M) library development on stable\n1.28 or 1.29 = embedded (Cortex-M) application development on stable\nWe are making breaking changes in the ecosystem in order to move towards development on the\nstable channel\nIf you are a crate maintainer / author, make sure you test your crates with the new versions of\ncortex-m (and similar) on the current beta release of Rust\nIf the latest version of a dependency doesn't compile on beta, file an issue and/or ping us on\nthe #rust-embedded IRC channel\nThanks for your patience!\n\n\nWe are happy to announce that library development for the Cortex-M targets is now possible on the\nbeta channel! :tada:\n\nFor example, to cross compile a library crate for the Cortex-M3 you would run these commands:\n$ # switch to the beta channel\n$ rustup default beta\n\n$ # install the rust-std component (pre-compiled core) for the target\n$ rustup target add thumbv7m-none-eabi\n\n$ # get some source to build\n$ cargo clone cortex-m --vers 0.5.0 && cd cortex-m\n\n$ # then It Just Works\n$ cargo build --target thumbv7m-none-eabi\n\nWhat about embedded application development? There is just a single unstable feature that prevents\nus from building a no_std binary on stable: the panic_fmt lang item. This unstable feature will\nsoon be removed in favor of the #[panic_implementation] feature (implementation PR), which is\nslated for stabilization in time for the edition release (we are hoping to stabilize it as early as\n1.28 but we'll see).\nMaking the Cortex-M ecosystem work on stable\n\"no_std binaries are possible on stable\" is very different from \"my embedded application\nbuilds on stable\". The later requires all the dependencies to also compile on stable. So we are\nstarting to migrate the Cortex-M ecosystem to work on stable. All the crates listed below are now\ncompiling on the beta channel.\nLegend: crate-name - link to CHANGELOG - link to stabilization PR - ~removed unstable features~\n\ncortex-m-quickstart - CHANGELOG - PR\n\n\ncortex-m-rt - CHANGELOG - PR - ~asm!~ ~core_intrinsics~ ~global_asm!~\n~lang_items~ ~linkage~ ~naked_functions~ ~used~\n\n\ncortex-m-semihosting - CHANGELOG - PR\n\n\ncortex-m - CHANGELOG - PR - ~asm!~ ~const_fn~\n\n\nembedded-hal - CHANGELOG - PR - ~never_type~\n\n\nf3 - CHANGELOG - PR\n\n\nl3gd20 - CHANGELOG - PR - ~Unsized~\n\n\nlsm303dlhc - CHANGELOG - PR - ~Unsized~\n\n\nstm32f103xx - CHANGELOG - PR - ~const_fn~ ~global_asm!~ ~try_from~\n~use_extern_macros~ ~used~\n\n\nstm32f30x-hal - CHANGELOG - PR - ~never_type~\n\n\nstm32f30x - CHANGELOG - PR - ~const_fn~ ~global_asm!~ ~try_from~\n~use_extern_macros~ ~used~\n\n\nsvd2rust (output of) - CHANGELOG - PR - ~const_fn~ ~global_asm!~\n~try_from~ ~use_extern_macros~ ~used~\n\nThere's a lot of breaking changes there but the most visible one is cortex-m-rt because it changes\nhow applications are structured. Check the cortex-m-quickstart template for instructions on\nhow to set up an embedded application using the latest versions of everything.\nThere are still a lot of crates that will need to be updated to work on beta. Among the more general\npurpose ones we have heapless and cortex-m-rtfm, which needs to be update to work with\ncortex-m-rt v0.5.0.\nHow you can help us\nTry to compile your Cortex-M crate using the beta channel! If your crate is an application the build\nwill certainly fail, but check if all the dependencies, excluding the panic handler crate,\ncompile on beta. If any dependency doesn't compile on the beta channel let the author know, but\nfirst check if there's a new version of the crate that already compiles on the beta channel. And if\nyou feel up to the task you could even send a PR to the dependency to make it compile on beta -- the\nlist of stabilization PRs in the previous section may give you a clue on how to move the crate to\nbeta.\nIf you are the author of a Cortex-M device crate, a crate generated using svd2rust, moving it to\nstable only requires regenerating it using svd2rust v0.13.0. Do note that the generation process\nhas changed for the Cortex-M target; also make sure you bump the minor version when you publish a\nnew version.\nIf you are the author of a driver crate or a HAL implementation, please update your crate to use\nv0.2.0 of embedded-hal and test that it builds on beta. Make sure you bump the minor version when\nyou publish a new version of your crate -- bumping the version of the embedded-hal dependency is a\nbreaking change (drivers that depend on embedded-hal v0.1.0 can't be used with HAL implementation\ncrates that depend on embedded-hal v0.2.0).\nIf you are porting an application to the newest cortex-m-* crates you may hit these errors:\n\n\"error: requires start lang_item\" on binary crates. You need to switch from the standard main\ninterface to #![no_main] + entry!. Use the examples in the quickstart template as a\nreference.\n\n\n\"error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple\nvariants\". const fn is not a stable feature so it's not used in the API by default. The\ncortex-m provides a \"const-fn\" feature to opt into this unstable feature and expose const\nfunctions in the API; other dependencies should / probably provide a similar feature.\n\nWhat does this all mean for you?\nTo those of you who have been doing embedded development on nightly: things will get much easier\nfrom now on. We have reduced the number of unstable features in core crates of the Cortex-M\necosystem to zero. Although you will have to continue to use nightly for application development\nyou can expect zero breakage from these crates when updating the nightly compiler. There is one\nexpected breakage coming soon though: panic_fmt will be removed as announced above. This will\nbreak the panic handler crates; however, the breakage will be isolated to those crates and\nthe fix will consist of simply updating the dependency version.\nTo those of you who have been meaning to dive into embedded Rust development: we'll soon be done\nwith our \"embedded Rust on stable\" tasks and we'll move our focus to documenting the embedded\ndevelopment process, tooling and ecosystem. The embedded Rust book will become the resource\nto get started on embedded Rust, but it doesn't quite exist right now.\nWhat about architectures other than ARM Cortex-M?\nThe path carved for ARM Cortex-M can be followed by the other architectures (ARM Cortex-R, AVR,\nMSP430, RISCV, etc.). Each architecture presents its own extra set of challenges though:\n\n\nMSP430 being the second oldest embedded / no_std target is the closest one to make it to stable\n(as a tier 2 target) by the edition release. The main blocker is that extern \"msp430-interrupt\"\nis not available on stable but I think that may be possible to work around using external C /\nassembly files + FFI.\n\n\nBoth AVR and RISCV are blocked from being included in the Rust compiler due to either the\nimmaturity of the LLVM backend or LLVM backend bugs. Not many (embedded) Rust developers can also\nhack LLVM backends so we are short handed on the AVR front; OTOH, the RISCV is being actively\ndeveloped by third parties so it's probably just a matter of time before we add it to rustc.\n\n\nARM Cortex-R LLVM backend is probably in good shape due to the similarities between its\ninstruction set and the ARM Cortex-M instruction set, so adding the target to the compiler should\nbe straightforward. However, the crate ecosystem is nonexistent at this point so there's a lot of\nwork to be done on that front.\n\n\n\nThis work is part of the embedded WG effort towards making embedded development possible on\nthe stable channel. (We are almost done! :tada:)\n","id":"https://blog.rust-embedded.org/the-path-towards-stable/","title":"The Path Towards Stable"},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"body":"As 2021 draws to a close, we thought we'd take a look back at what's happened\nover the last year in Embedded Rust, both within the working group and in the\nlarger community.\nMeetings\nWe continued our weekly Rust Embedded Working Group meetings on our Matrix channel. They take place at 8pm Berlin time every Tuesday, and are open to the public. You can find all the minutes on Github.\nNewsletters\nThe blog saw five new newsletters posted, keeping everyone up to date with what's hot in Embedded Rust. Make sure you bookmark or subscribe with your favourite RSS reader so you never miss an update! Please do also keep your contributions coming, as we love hearing about what everyone gets up to in Embedded Rust outside of the official Rust Embedded Working Group projects.\nPlatform Support\nOutside of the working group, platform support communities provide vendor-specific support for particular microcontrollers and development boards.\n2021 saw a brand-new microcontroller vendor hit the scene - Raspberry Pi! Their debut RP2040 microcontroller has two Cortex-M0 cores, and certainly made us all think about how we can try to make our software safe to use on multi-core systems. A new rp-rs community sprang up and continues to make good progress supporting all areas of the RP2040 with good quality examples.\nThis year also saw Espressif officially adopt Rust and they hired @mabez from the esp-rs community to help out!\nOther platform support communities continued to develop this year:\n\natsamd-rs for Atmel ARM SAM-D and SAM-E microcontrollers (Matrix chat)\navr-rust for Atmel AVR microcontrollers (Matrix chat)\nesp-rs for Espressif ESP8266 and ESP32 Wi-Fi chips (Matrix chat)\nimxrt-rs for NXP ARM iMX.RT microcontrollers\nlpc55 for NXP ARM LPC55xx microcontrollers (Matrix chat)\nnrf-rs for Nordic ARM nRF51, 52 and 9160 Bluetooth/LTE devices (Matrix chat)\nriscv-rust for all kinds of RISC-V devices\nrp-rs for Raspberry Pi's RP2040 microcontroller (Matrix chat)\nstm32-rs for all of ST Micro's 32-bit ARM microcontrollers (Matrix chat)\n\nIf you're a platform support community not on the list please get in touch, we'd love to hear from you!\nOther Embedded Projects\nWhile not officially part of the Embedded Working Group, the following projects all continued to develop over 2021:\n\nThe concurrency framework RTIC (GitHub, Matrix) hit version 1.0!\nThe async framework Embassy (GitHub, Matrix) has been under heavy development and now supports STM32, nRF and RP2040 platforms.\nThe debug and programming library and tools from probe-rs (GitHub, Matrix) released v0.11 and v0.12 of their library and tools including cargo-embed.\nThe Knurling project (GitHub) has had several releases of their tools such as probe-run.\nThe smoltcp embedded TCP/IP stack released v0.7 and v0.8, with many improvements including to the DHCP client and adding IEEE 802.15.4 support.\nembedded-graphics (Matrix), a graphics library for embedded applications, had a major new v0.7 release (see the migration notes).\nThe Hubris RTOS and its companion debugger Humility, by Oxide Computer, had their first release.\n\nOur Repositories\nWe continued to work on and maintain a number of key Embedded Rust repositories. The following repos all had commits during 2021:\n\nembedded-hal: The Embedded Hardware Abstraction Layer is a set of traits for describing common peripherals in a hardware-independent way. It continues its march towards 1.0 status, with a series of 1.0-alpha releases. It should hit 1.0 milestone some time in 2022! 120 commits over 27 files this year.\ndiscovery: This book on Discovering Embedded Programming using Rust had a re-write this year - it's now based around the BBC micro:Bit! 251 commits over 187 files this year.\nbook: Our guide to all things Embedded Rust continues to be updated and improved, with 39 commits this year.\nembedonomicon: Our guide to all the low-down details on how to bring-up a new #[no_std] platform with Rust saw 15 commits this year.\nsvd2rust: This tool generates our 'Peripheral Access Crates' from a System View Description file of the chip provided by the manufacturer. 122 commits over 17 files this year.\nsvd: The core libraries used by svd2rust and other tools to manipulate SVD files had 103 commits over 39 files this year.\nawesome-embedded-rust: Our list of the very best in Embedded Rust keeps growing with 97 commits this year.\ncortex-m, cortex-m-rt, and cortex-m-quickstart: Our platform support crates for the Arm Cortex-M architecture saw continued development, with 93 and 54 commits respectively, and a new v0.7 of cortex-m-rt released this year.\ncortex-a: Our platform support crate for the Arm Cortex-A architecture saw 25 commits this year.\nriscv and riscv-rt: Our platform support crates for the RISC-V architecture saw 74 and 12 commits respectively this year, with a v0.7 release of riscv.\nmsp430 and msp430-rt: Our platform support crates for the MSP430 architecture.\ngpio-cdev, rust-spidev, rust-sysfs-gpio, rust-i2cdev, and linux-embedded-hal: Support for embedded Linux continued with 177 commits across these projects.\nr0 was a cross-platform initialisation library, but we deprecated it this year to move such initialisation into platform-specific libraries such as cortex-m-rt.\n\n","id":"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/","title":"This Year in Embedded Rust: 2021"},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"body":"This year the Embedded WG set out to build the solid foundation that the\nembedded Rust ecosystem requires to thrive. As we approach the date of the 2018\nedition release we reflect on our progress and share our achievements with you\nin this post.\nDiscuss on users.rust-lang.org, on twitter, or on reddit!\nEmbedded Rust on stable\nStability -- AKA \"my crate should not break when moving to a newer toolchain\" --\nwas the single most requested feature by the embedded community during the 2018\nroadmap planning phase.\nEmbedded development has been tied to the nightly\nchannel since its very beginning, and the people that have been doing embedded\ndevelopment for a while have endured many breaking changes. Thankfully, those\ndays are over: Rust 1.30 marks the first stable release where you can build\nfully working embedded programs without relying on unstable features.\nFurthermore, we now have some unit tests that check embedded code in the\ncompiler test suite so unintentional breakage will be caught before it makes its\nway into the nightly channel.\nA smooth starting point\n\"How do I get started with embedded Rust?\" has been a common question on IRC for\na long time. It has not been an easy question to answer, though: maintaining\ndocumentation that relies on unstable features for a long period of time has\nbeen an uphill battle so newcomers have often run into outdated docs.\nBut now that stable embedded Rust is here we have put together an authoritative\nresource for getting started with embedded Rust: The Embedded Rust Book. We\nhave put a lot of effort in making the first experience as frictionless as\npossible with the help of templates and tooling.\nThe embedded Rust book is not just a getting started guide; it's also meant\nto be the document that teaches you how to effectively use the language to write\ncorrect embedded software. We are currently amassing all our hard earned\nexperience into patterns and tips that we are adding to this book.\nResources for everyone\nThe Embedded Rust Book is aimed at people that have some experience with\nembedded development, but we recognize that Rust has great potential for\nbecoming people's first choice for getting their feet wet with embedded\ndevelopment so we have updated and will continue to work on resources, like the\nDiscovery book, that are aimed at that demographic.\nWe also recognize that the target audience for embedded Rust has different\nlevels of expertise with embedded systems and a varied set of interests\nso we are also building advances resources like the embedonomicon\nand collecting more targeted resources, like crates, in the\nawesome-embedded-rust list. You can find these and other of our resources in\nour docs webpage.\nAn organized community effort\nAll this has been accomplished with the hard work of many volunteers, both WG\nmembers and other community members. The WG members, in particular, are\ncommitted to maintaining the core crates and documentation that the\necosystem relies on. All these resources have been taken under the umbrella of\nthe rust-embedded organization.\nWG teams\nThe embedded space is huge: there are several architectures used in\nthis space, many application areas, and embedded developers work with different\nsets of constraints: real-time constraints, memory constraints, energy / power\nconstraints, etc.\nFor this reason we have been creating and growing specialized teams within the\nWG by adding members with different areas of expertise. This ensures that we\nhave different perspectives when making API design decisions in core crates and\nwhen communicating the needs of the embedded community to the other Rust teams.\nHaving specialized teams also means that the crates developed by the org can be\nassigned to the people with the right technical background.\nOn the upcoming 2018 edition\nIn this last sprint towards the 2018 edition we are focusing our efforts in\nour documentation!\nYou can help us by proofreading our docs, reporting errors, giving feedback on\nthe existing content, requesting new topics and writing about topics that have\nnot yet been covered. Every little bit of help is greatly appreciated!\nOne important note: our documentation makes use of the 2018 edition which\nrequires you to use the beta channel until 1.31 is released in early December.\nWe suggest that you use the beta channel until then to get the best experience.\nBeyond 2018\nOur work doesn't stop the day Rust 1.31 comes out; the 2018 edition is just the\nstarting line of embedded Rust. As we continue to learn how to effectively use\nRust for embedded development we'll continue to refine and expand our\ndocumentation as well as the core crates we maintain and develop.\nAlso, at this point in time ARM Cortex-M is our most mature target architecture\nand the majority of crates on crates.io target this architecture, but we have\nlaid the groundwork for supporting other targets like bare metal ARM Cortex-A,\nARM Cortex-R, MSP430 and RISCV. We'll continue to work on getting these\ntargets on parity with the ARM Cortex-M target during the next year.\nFinally, we'd love to hear what you would like to see happen in the embedded\nspace in 2019. We are collecting a \"wishlist\" of things the embedded community\nwould like to see get done, fixed and / or stabilized in 2019. Need some API in\ncore to be stabilized? Would like to get some Cargo bug / papercut fixed? Let us\nknow and we'll look into making it happen! We'll use this data to set out an\nembedded Rust roadmap for 2019.\nHere's to a 2019 with more embedded Rust success stories (yes, \"more\"; wait\nfor the upcoming revamped rust-lang website ;-)). Happy embedded hacking!\n","id":"https://blog.rust-embedded.org/this-year-in-embedded-rust/","title":"This Year in Embedded Rust"}},"docInfo":{"https://blog.rust-embedded.org/":{"body":0,"title":0},"https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/":{"body":453,"title":7},"https://blog.rust-embedded.org/embedded-hal-v1/":{"body":445,"title":5},"https://blog.rust-embedded.org/embedded-rust-in-2019/":{"body":287,"title":3},"https://blog.rust-embedded.org/newsletter-1/":{"body":284,"title":5},"https://blog.rust-embedded.org/newsletter-10/":{"body":182,"title":5},"https://blog.rust-embedded.org/newsletter-11/":{"body":210,"title":5},"https://blog.rust-embedded.org/newsletter-12/":{"body":188,"title":5},"https://blog.rust-embedded.org/newsletter-13/":{"body":217,"title":5},"https://blog.rust-embedded.org/newsletter-14/":{"body":464,"title":5},"https://blog.rust-embedded.org/newsletter-15/":{"body":817,"title":5},"https://blog.rust-embedded.org/newsletter-16/":{"body":291,"title":5},"https://blog.rust-embedded.org/newsletter-17/":{"body":227,"title":5},"https://blog.rust-embedded.org/newsletter-18/":{"body":379,"title":5},"https://blog.rust-embedded.org/newsletter-19/":{"body":131,"title":5},"https://blog.rust-embedded.org/newsletter-2/":{"body":1010,"title":5},"https://blog.rust-embedded.org/newsletter-20/":{"body":238,"title":5},"https://blog.rust-embedded.org/newsletter-21/":{"body":322,"title":5},"https://blog.rust-embedded.org/newsletter-22/":{"body":477,"title":5},"https://blog.rust-embedded.org/newsletter-23/":{"body":369,"title":5},"https://blog.rust-embedded.org/newsletter-24/":{"body":348,"title":5},"https://blog.rust-embedded.org/newsletter-25/":{"body":380,"title":5},"https://blog.rust-embedded.org/newsletter-26/":{"body":201,"title":5},"https://blog.rust-embedded.org/newsletter-27/":{"body":176,"title":5},"https://blog.rust-embedded.org/newsletter-28/":{"body":159,"title":5},"https://blog.rust-embedded.org/newsletter-29/":{"body":218,"title":5},"https://blog.rust-embedded.org/newsletter-3/":{"body":225,"title":5},"https://blog.rust-embedded.org/newsletter-30/":{"body":197,"title":5},"https://blog.rust-embedded.org/newsletter-31/":{"body":308,"title":5},"https://blog.rust-embedded.org/newsletter-4/":{"body":258,"title":5},"https://blog.rust-embedded.org/newsletter-5/":{"body":398,"title":5},"https://blog.rust-embedded.org/newsletter-6/":{"body":371,"title":5},"https://blog.rust-embedded.org/newsletter-7/":{"body":241,"title":5},"https://blog.rust-embedded.org/newsletter-8/":{"body":309,"title":5},"https://blog.rust-embedded.org/newsletter-9/":{"body":203,"title":5},"https://blog.rust-embedded.org/the-path-towards-stable/":{"body":764,"title":3},"https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/":{"body":594,"title":4},"https://blog.rust-embedded.org/this-year-in-embedded-rust/":{"body":525,"title":3}},"length":38},"lang":"English"}; \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml new file mode 100644 index 0000000..b437f51 --- /dev/null +++ b/sitemap.xml @@ -0,0 +1,178 @@ + + + + https://blog.rust-embedded.org/ + + + https://blog.rust-embedded.org/2018-08-2x-psa-cortex-m-breakage/ + 2018-08-28 + + + https://blog.rust-embedded.org/embedded-hal-v1/ + 2024-01-09 + + + https://blog.rust-embedded.org/embedded-rust-in-2019/ + 2019-05-07 + + + https://blog.rust-embedded.org/newsletter-1/ + 2018-03-15 + + + https://blog.rust-embedded.org/newsletter-10/ + 2018-08-28 + + + https://blog.rust-embedded.org/newsletter-11/ + 2018-09-09 + + + https://blog.rust-embedded.org/newsletter-12/ + 2018-09-25 + + + https://blog.rust-embedded.org/newsletter-13/ + 2018-10-09 + + + https://blog.rust-embedded.org/newsletter-14/ + 2018-10-28 + + + https://blog.rust-embedded.org/newsletter-15/ + 2019-02-20 + + + https://blog.rust-embedded.org/newsletter-16/ + 2019-03-06 + + + https://blog.rust-embedded.org/newsletter-17/ + 2019-03-22 + + + https://blog.rust-embedded.org/newsletter-18/ + 2019-07-02 + + + https://blog.rust-embedded.org/newsletter-19/ + 2019-10-03 + + + https://blog.rust-embedded.org/newsletter-2/ + 2018-03-29 + + + https://blog.rust-embedded.org/newsletter-20/ + 2019-11-05 + + + https://blog.rust-embedded.org/newsletter-21/ + 2019-11-30 + + + https://blog.rust-embedded.org/newsletter-22/ + 2020-01-01 + + + https://blog.rust-embedded.org/newsletter-23/ + 2020-02-01 + + + https://blog.rust-embedded.org/newsletter-24/ + 2020-08-17 + + + https://blog.rust-embedded.org/newsletter-25/ + 2020-08-24 + + + https://blog.rust-embedded.org/newsletter-26/ + 2021-02-16 + + + https://blog.rust-embedded.org/newsletter-27/ + 2021-03-16 + + + https://blog.rust-embedded.org/newsletter-28/ + 2021-04-20 + + + https://blog.rust-embedded.org/newsletter-29/ + 2021-07-27 + + + https://blog.rust-embedded.org/newsletter-3/ + 2018-04-14 + + + https://blog.rust-embedded.org/newsletter-30/ + 2021-11-16 + + + https://blog.rust-embedded.org/newsletter-31/ + 2022-03-22 + + + https://blog.rust-embedded.org/newsletter-4/ + 2018-04-28 + + + https://blog.rust-embedded.org/newsletter-5/ + 2018-05-15 + + + https://blog.rust-embedded.org/newsletter-6/ + 2018-07-01 + + + https://blog.rust-embedded.org/newsletter-7/ + 2018-07-15 + + + https://blog.rust-embedded.org/newsletter-8/ + 2018-07-29 + + + https://blog.rust-embedded.org/newsletter-9/ + 2018-08-12 + + + https://blog.rust-embedded.org/page/1/ + + + https://blog.rust-embedded.org/page/2/ + + + https://blog.rust-embedded.org/page/3/ + + + https://blog.rust-embedded.org/page/4/ + + + https://blog.rust-embedded.org/page/5/ + + + https://blog.rust-embedded.org/page/6/ + + + https://blog.rust-embedded.org/page/7/ + + + https://blog.rust-embedded.org/page/8/ + + + https://blog.rust-embedded.org/the-path-towards-stable/ + 2018-05-13 + + + https://blog.rust-embedded.org/this-year-in-embedded-rust-2021/ + 2021-12-28 + + + https://blog.rust-embedded.org/this-year-in-embedded-rust/ + 2018-11-14 + + diff --git a/content/spi-shared-bus.svg b/spi-shared-bus.svg similarity index 100% rename from content/spi-shared-bus.svg rename to spi-shared-bus.svg diff --git a/templates/rss.xml b/templates/rss.xml deleted file mode 100644 index d8628ef..0000000 --- a/templates/rss.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - {{ config.title }} - {{ config.base_url | safe }} - {{ config.description }} - Zola - {{ config.default_language }} - - {{ last_updated | date(format="%a, %d %b %Y %H:%M:%S %z") }} - {% for page in pages %} - - {{ page.title }} - {{ page.date | date(format="%a, %d %b %Y %H:%M:%S %z") }} - {{ page.permalink | safe }} - {{ page.permalink | safe }} - {{ page.content }} - - {% endfor %} - - diff --git a/the-path-towards-stable/index.html b/the-path-towards-stable/index.html new file mode 100644 index 0000000..6fbecd4 --- /dev/null +++ b/the-path-towards-stable/index.html @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

The Path Towards Stable

+ +

Cortex-M library development now possible on beta and the path towards stable embedded Rust

+
+

TL;DR

+
    +
  • 1.27 = embedded (Cortex-M) library development on stable
  • +
  • 1.28 or 1.29 = embedded (Cortex-M) application development on stable
  • +
  • We are making breaking changes in the ecosystem in order to move towards development on the +stable channel
  • +
  • If you are a crate maintainer / author, make sure you test your crates with the new versions of +cortex-m (and similar) on the current beta release of Rust
  • +
  • If the latest version of a dependency doesn't compile on beta, file an issue and/or ping us on +the #rust-embedded IRC channel
  • +
  • Thanks for your patience!
  • +
+
+

We are happy to announce that library development for the Cortex-M targets is now possible on the +beta channel! :tada:

+ +

For example, to cross compile a library crate for the Cortex-M3 you would run these commands:

+
+$ # switch to the beta channel
+$ rustup default beta
+
+$ # install the rust-std component (pre-compiled core) for the target
+$ rustup target add thumbv7m-none-eabi
+
+$ # get some source to build
+$ cargo clone cortex-m --vers 0.5.0 && cd cortex-m
+
+$ # then It Just Works
+$ cargo build --target thumbv7m-none-eabi
+
+

What about embedded application development? There is just a single unstable feature that prevents +us from building a no_std binary on stable: the panic_fmt lang item. This unstable feature will +soon be removed in favor of the #[panic_implementation] feature (implementation PR), which is +slated for stabilization in time for the edition release (we are hoping to stabilize it as early as +1.28 but we'll see).

+

Making the Cortex-M ecosystem work on stable

+

"no_std binaries are possible on stable" is very different from "my embedded application +builds on stable". The later requires all the dependencies to also compile on stable. So we are +starting to migrate the Cortex-M ecosystem to work on stable. All the crates listed below are now +compiling on the beta channel.

+

Legend: crate-name - link to CHANGELOG - link to stabilization PR - ~removed unstable features~

+ +
    +
  • cortex-m-rt - CHANGELOG - PR - ~asm!~ ~core_intrinsics~ ~global_asm!~ +~lang_items~ ~linkage~ ~naked_functions~ ~used~
  • +
+ + + + + + + + + +
    +
  • svd2rust (output of) - CHANGELOG - PR - ~const_fn~ ~global_asm!~ +~try_from~ ~use_extern_macros~ ~used~
  • +
+

There's a lot of breaking changes there but the most visible one is cortex-m-rt because it changes +how applications are structured. Check the cortex-m-quickstart template for instructions on +how to set up an embedded application using the latest versions of everything.

+

There are still a lot of crates that will need to be updated to work on beta. Among the more general +purpose ones we have heapless and cortex-m-rtfm, which needs to be update to work with +cortex-m-rt v0.5.0.

+

How you can help us

+

Try to compile your Cortex-M crate using the beta channel! If your crate is an application the build +will certainly fail, but check if all the dependencies, excluding the panic handler crate, +compile on beta. If any dependency doesn't compile on the beta channel let the author know, but +first check if there's a new version of the crate that already compiles on the beta channel. And if +you feel up to the task you could even send a PR to the dependency to make it compile on beta -- the +list of stabilization PRs in the previous section may give you a clue on how to move the crate to +beta.

+

If you are the author of a Cortex-M device crate, a crate generated using svd2rust, moving it to +stable only requires regenerating it using svd2rust v0.13.0. Do note that the generation process +has changed for the Cortex-M target; also make sure you bump the minor version when you publish a +new version.

+

If you are the author of a driver crate or a HAL implementation, please update your crate to use +v0.2.0 of embedded-hal and test that it builds on beta. Make sure you bump the minor version when +you publish a new version of your crate -- bumping the version of the embedded-hal dependency is a +breaking change (drivers that depend on embedded-hal v0.1.0 can't be used with HAL implementation +crates that depend on embedded-hal v0.2.0).

+

If you are porting an application to the newest cortex-m-* crates you may hit these errors:

+
    +
  • "error: requires start lang_item" on binary crates. You need to switch from the standard main +interface to #![no_main] + entry!. Use the examples in the quickstart template as a +reference.
  • +
+
    +
  • "error[E0015]: calls in statics are limited to constant functions, tuple structs and tuple +variants". const fn is not a stable feature so it's not used in the API by default. The +cortex-m provides a "const-fn" feature to opt into this unstable feature and expose const +functions in the API; other dependencies should / probably provide a similar feature.
  • +
+

What does this all mean for you?

+

To those of you who have been doing embedded development on nightly: things will get much easier +from now on. We have reduced the number of unstable features in core crates of the Cortex-M +ecosystem to zero. Although you will have to continue to use nightly for application development +you can expect zero breakage from these crates when updating the nightly compiler. There is one +expected breakage coming soon though: panic_fmt will be removed as announced above. This will +break the panic handler crates; however, the breakage will be isolated to those crates and +the fix will consist of simply updating the dependency version.

+

To those of you who have been meaning to dive into embedded Rust development: we'll soon be done +with our "embedded Rust on stable" tasks and we'll move our focus to documenting the embedded +development process, tooling and ecosystem. The embedded Rust book will become the resource +to get started on embedded Rust, but it doesn't quite exist right now.

+

What about architectures other than ARM Cortex-M?

+

The path carved for ARM Cortex-M can be followed by the other architectures (ARM Cortex-R, AVR, +MSP430, RISCV, etc.). Each architecture presents its own extra set of challenges though:

+
    +
  • +

    MSP430 being the second oldest embedded / no_std target is the closest one to make it to stable +(as a tier 2 target) by the edition release. The main blocker is that extern "msp430-interrupt" +is not available on stable but I think that may be possible to work around using external C / +assembly files + FFI.

    +
  • +
  • +

    Both AVR and RISCV are blocked from being included in the Rust compiler due to either the +immaturity of the LLVM backend or LLVM backend bugs. Not many (embedded) Rust developers can also +hack LLVM backends so we are short handed on the AVR front; OTOH, the RISCV is being actively +developed by third parties so it's probably just a matter of time before we add it to rustc.

    +
  • +
  • +

    ARM Cortex-R LLVM backend is probably in good shape due to the similarities between its +instruction set and the ARM Cortex-M instruction set, so adding the target to the compiler should +be straightforward. However, the crate ecosystem is nonexistent at this point so there's a lot of +work to be done on that front.

    +
  • +
+
+

This work is part of the embedded WG effort towards making embedded development possible on +the stable channel. (We are almost done! :tada:)

+ +
+ +
+ + + + diff --git a/themes/hyde/.gitignore b/themes/hyde/.gitignore deleted file mode 100644 index 4139cd5..0000000 --- a/themes/hyde/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.idea/ -public diff --git a/themes/hyde/LICENSE b/themes/hyde/LICENSE deleted file mode 100644 index 93ab851..0000000 --- a/themes/hyde/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Vincent Prouillet - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/themes/hyde/README.md b/themes/hyde/README.md deleted file mode 100644 index 469718f..0000000 --- a/themes/hyde/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# hyde -Hyde is a brazen two-column [Gutenberg](https://github.com/Keats/gutenberg) based on the Jekyll theme of the same name that pairs a prominent sidebar with uncomplicated content. - -![Hyde screenshot](https://f.cloud.github.com/assets/98681/1831228/42af6c6a-7384-11e3-98fb-e0b923ee0468.png) - - -## Contents - -- [Installation](#installation) -- [Options](#options) - - [Sidebar menu](#sidebar-menu) - - [Sticky sidebar content](#sticky-sidebar-content) - - [Themes](#themes) - - [Reverse layout](#reverse-layout) - -## Installation -First download this theme to your `themes` directory: - -```bash -$ cd themes -$ git clone https://github.com/Keats/hyde.git -``` -and then enable it in your `config.toml`: - -```toml -theme = "hyde" -``` - -## Options - -### Sidebar menu -Set a field in `extra` with a key of `hyde_links`: -```toml -[extra] -hyde_links = [ - {url = "https://google.com", name = "Google.com"}, - {url = "https://google.fr", name = "Google.fr"}, -] -``` -Each link needs to have a `url` and a `name`. - -### Sticky sidebar content -By default Hyde ships with a sidebar that affixes it's content to the bottom of the sidebar. You can optionally disable this by setting `hyde_sticky` to false in your `config.toml`. - -### Themes -Hyde ships with eight optional themes based on the [base16 color scheme](https://github.com/chriskempson/base16). Apply a theme to change the color scheme (mostly applies to sidebar and links). - -![Hyde in red](https://f.cloud.github.com/assets/98681/1831229/42b0b354-7384-11e3-8462-31b8df193fe5.png) - -There are eight themes available at this time. - -![Hyde theme classes](https://f.cloud.github.com/assets/98681/1817044/e5b0ec06-6f68-11e3-83d7-acd1942797a1.png) - -To use a theme, set the `hyde_theme` field in `config.toml` to any of the themes name: - -```toml -[extra] -hyde_theme = "theme-base-08" -``` - -To create your own theme, look to the Themes section of [included CSS file](https://github.com/poole/hyde/blob/master/public/css/hyde.css). Copy any existing theme (they're only a few lines of CSS), rename it, and change the provided colors. - -### Reverse layout - -![Hyde with reverse layout](https://f.cloud.github.com/assets/98681/1831230/42b0d3ac-7384-11e3-8d54-2065afd03f9e.png) - -Hyde's page orientation can be reversed by setting `hyde_reverse` to `true` in the `config.toml`. diff --git a/themes/hyde/config.toml b/themes/hyde/config.toml deleted file mode 100644 index 6e24e7e..0000000 --- a/themes/hyde/config.toml +++ /dev/null @@ -1,12 +0,0 @@ -base_url = "https://gutenberg-hyde.netlify.com" -compile_sass = true -title = "Hyde theme" -description = "A clean blogging theme" - -[extra] -hyde_sticky = true -hyde_reverse = false -hyde_theme = "" -hyde_links = [ - {url = "https://google.com", name = "About"}, -] diff --git a/themes/hyde/content/some-article.md b/themes/hyde/content/some-article.md deleted file mode 100644 index c3c8aee..0000000 --- a/themes/hyde/content/some-article.md +++ /dev/null @@ -1,14 +0,0 @@ -+++ -title = "What is Gutenberg" -date = 2017-09-24 -+++ - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc eu feugiat sapien. Aenean ligula nunc, laoreet id sem in, interdum bibendum felis. Donec vel dui neque. Praesent ac sem ut justo volutpat rutrum a imperdiet tellus. Nam lobortis massa non hendrerit hendrerit. Vivamus porttitor dignissim turpis, eget aliquam urna tincidunt non. Aliquam et fringilla turpis. Nullam eros est, eleifend in ornare sed, hendrerit eget est. Aliquam tellus felis, suscipit vitae ex vel, fringilla tempus massa. Nulla facilisi. Pellentesque lobortis consequat lectus. Maecenas ac libero elit. - -Ut luctus dolor ut tortor hendrerit, sed hendrerit augue scelerisque. Suspendisse quis sodales dui, at tempus ante. Nulla at tempor metus. Aliquam vitae rutrum diam. Curabitur iaculis massa dui, quis varius nulla finibus a. Praesent eu blandit justo. Suspendisse pharetra, arcu in rhoncus rutrum, magna magna viverra erat, eget vestibulum enim tellus id dui. Nunc vel dui et arcu posuere maximus. Mauris quam quam, bibendum sed libero nec, tempus hendrerit arcu. Suspendisse sed gravida orci. Fusce tempor arcu ac est pretium porttitor. Aenean consequat risus venenatis sem aliquam, at sollicitudin nulla semper. Aenean bibendum cursus hendrerit. Nulla congue urna nec finibus bibendum. Donec porta tincidunt ligula non ultricies. - -Sed vulputate tristique elit, eget pharetra elit sodales sed. Proin dignissim ipsum lorem, at porta eros malesuada sed. Proin tristique eros eu quam ornare, suscipit luctus mauris lobortis. Phasellus ut placerat enim. Donec egestas faucibus maximus. Nam quis efficitur eros. Cras tincidunt, lacus ac pretium porta, dui dolor varius elit, eget laoreet justo justo vitae metus. Morbi eget nisi ut ex scelerisque lobortis ut in lorem. Vestibulum et lorem quis ipsum feugiat varius. Mauris nec nulla viverra nisi porttitor efficitur. Morbi vel purus eleifend, finibus erat non, placerat ipsum. Mauris et augue vel nisi volutpat aliquam. Curabitur malesuada tortor est, at condimentum neque eleifend in. - -Morbi id ornare lacus. Suspendisse ultrices rutrum posuere. Nullam porttitor libero quis ligula finibus semper. Mauris iaculis magna et nisl tristique, eget maximus ex feugiat. Nam eu felis leo. Quisque ultrices varius purus in molestie. Duis non accumsan ligula. Vivamus dignissim malesuada metus, vel hendrerit tellus viverra id. Curabitur posuere, mauris vitae dignissim dictum, velit mi condimentum lorem, nec varius velit arcu a mi. In dolor sapien, condimentum sed aliquam at, dignissim id purus. Cras lorem leo, vulputate ac ante sed, molestie tempus lectus. Curabitur efficitur libero quam, rhoncus faucibus libero pharetra nec. Curabitur lobortis ullamcorper nisl eu imperdiet. Duis porttitor interdum magna, ac eleifend orci consequat vitae. Aliquam augue felis, faucibus vel blandit sed, maximus non turpis. - -Quisque viverra a eros id auctor. Proin id nibh ut nisl dignissim pellentesque et ac mi. Nullam mattis urna quis consequat bibendum. Donec pretium dui elit, a semper purus tristique et. Mauris euismod nisl eu vehicula facilisis. Maecenas facilisis non massa non scelerisque. Integer malesuada cursus erat eu viverra. Duis ligula mi, eleifend vel justo id, laoreet porttitor ex. Etiam ultricies lacus lorem, sed aliquam nulla blandit in. Maecenas vel facilisis neque, vitae fringilla eros. In justo nibh, pellentesque sed faucibus nec, varius sit amet risus. diff --git a/themes/hyde/content/some-other-article.md b/themes/hyde/content/some-other-article.md deleted file mode 100644 index 290dbaa..0000000 --- a/themes/hyde/content/some-other-article.md +++ /dev/null @@ -1,14 +0,0 @@ -+++ -title = "A first theme for Gutenberg" -date = 2017-09-25 -+++ - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc eu feugiat sapien. Aenean ligula nunc, laoreet id sem in, interdum bibendum felis. Donec vel dui neque. Praesent ac sem ut justo volutpat rutrum a imperdiet tellus. Nam lobortis massa non hendrerit hendrerit. Vivamus porttitor dignissim turpis, eget aliquam urna tincidunt non. Aliquam et fringilla turpis. Nullam eros est, eleifend in ornare sed, hendrerit eget est. Aliquam tellus felis, suscipit vitae ex vel, fringilla tempus massa. Nulla facilisi. Pellentesque lobortis consequat lectus. Maecenas ac libero elit. - -Ut luctus dolor ut tortor hendrerit, sed hendrerit augue scelerisque. Suspendisse quis sodales dui, at tempus ante. Nulla at tempor metus. Aliquam vitae rutrum diam. Curabitur iaculis massa dui, quis varius nulla finibus a. Praesent eu blandit justo. Suspendisse pharetra, arcu in rhoncus rutrum, magna magna viverra erat, eget vestibulum enim tellus id dui. Nunc vel dui et arcu posuere maximus. Mauris quam quam, bibendum sed libero nec, tempus hendrerit arcu. Suspendisse sed gravida orci. Fusce tempor arcu ac est pretium porttitor. Aenean consequat risus venenatis sem aliquam, at sollicitudin nulla semper. Aenean bibendum cursus hendrerit. Nulla congue urna nec finibus bibendum. Donec porta tincidunt ligula non ultricies. - -Sed vulputate tristique elit, eget pharetra elit sodales sed. Proin dignissim ipsum lorem, at porta eros malesuada sed. Proin tristique eros eu quam ornare, suscipit luctus mauris lobortis. Phasellus ut placerat enim. Donec egestas faucibus maximus. Nam quis efficitur eros. Cras tincidunt, lacus ac pretium porta, dui dolor varius elit, eget laoreet justo justo vitae metus. Morbi eget nisi ut ex scelerisque lobortis ut in lorem. Vestibulum et lorem quis ipsum feugiat varius. Mauris nec nulla viverra nisi porttitor efficitur. Morbi vel purus eleifend, finibus erat non, placerat ipsum. Mauris et augue vel nisi volutpat aliquam. Curabitur malesuada tortor est, at condimentum neque eleifend in. - -Morbi id ornare lacus. Suspendisse ultrices rutrum posuere. Nullam porttitor libero quis ligula finibus semper. Mauris iaculis magna et nisl tristique, eget maximus ex feugiat. Nam eu felis leo. Quisque ultrices varius purus in molestie. Duis non accumsan ligula. Vivamus dignissim malesuada metus, vel hendrerit tellus viverra id. Curabitur posuere, mauris vitae dignissim dictum, velit mi condimentum lorem, nec varius velit arcu a mi. In dolor sapien, condimentum sed aliquam at, dignissim id purus. Cras lorem leo, vulputate ac ante sed, molestie tempus lectus. Curabitur efficitur libero quam, rhoncus faucibus libero pharetra nec. Curabitur lobortis ullamcorper nisl eu imperdiet. Duis porttitor interdum magna, ac eleifend orci consequat vitae. Aliquam augue felis, faucibus vel blandit sed, maximus non turpis. - -Quisque viverra a eros id auctor. Proin id nibh ut nisl dignissim pellentesque et ac mi. Nullam mattis urna quis consequat bibendum. Donec pretium dui elit, a semper purus tristique et. Mauris euismod nisl eu vehicula facilisis. Maecenas facilisis non massa non scelerisque. Integer malesuada cursus erat eu viverra. Duis ligula mi, eleifend vel justo id, laoreet porttitor ex. Etiam ultricies lacus lorem, sed aliquam nulla blandit in. Maecenas vel facilisis neque, vitae fringilla eros. In justo nibh, pellentesque sed faucibus nec, varius sit amet risus. diff --git a/themes/hyde/sass/hyde.scss b/themes/hyde/sass/hyde.scss deleted file mode 100644 index 1ddbdda..0000000 --- a/themes/hyde/sass/hyde.scss +++ /dev/null @@ -1,250 +0,0 @@ -/* - * __ __ - * /\ \ /\ \ - * \ \ \___ __ __ \_\ \ __ - * \ \ _ `\/\ \/\ \ /'_` \ /'__`\ - * \ \ \ \ \ \ \_\ \/\ \_\ \/\ __/ - * \ \_\ \_\/`____ \ \___,_\ \____\ - * \/_/\/_/`/___/> \/__,_ /\/____/ - * /\___/ - * \/__/ - * - * Designed, built, and released under MIT license by @mdo. Learn more at - * https://github.com/poole/hyde. - */ - - -/* - * Contents - * - * Global resets - * Sidebar - * Container - * Reverse layout - * Themes - */ - - -/* - * Global resets - * - * Update the foundational and global aspects of the page. - */ - -html { - font-family: "PT Sans", Helvetica, Arial, sans-serif; -} -@media (min-width: 48em) { - html { - font-size: 16px; - } -} -@media (min-width: 58em) { - html { - font-size: 20px; - } -} - - -/* - * Sidebar - * - * Flexible banner for housing site name, intro, and "footer" content. Starts - * out above content in mobile and later moves to the side with wider viewports. - */ - -.sidebar { - text-align: center; - padding: 2rem 1rem; - color: rgba(255,255,255,.5); - background-color: #202020; -} -@media (min-width: 48em) { - .sidebar { - position: fixed; - top: 0; - left: 0; - bottom: 0; - width: 18rem; - text-align: left; - } -} - -/* Sidebar links */ -.sidebar a { - color: #fff; -} - -/* About section */ -.sidebar-about h1 { - color: #fff; - margin-top: 0; - font-family: "Abril Fatface", serif; - font-size: 3.25rem; -} - -/* Sidebar nav */ -.sidebar-nav { - padding-left: 0; - list-style: none; -} -.sidebar-nav-item { - display: block; -} -a.sidebar-nav-item:hover, -a.sidebar-nav-item:focus { - text-decoration: underline; -} -.sidebar-nav-item.active { - font-weight: bold; -} - -/* Sticky sidebar - * - * Add the `sidebar-sticky` class to the sidebar's container to affix it the - * contents to the bottom of the sidebar in tablets and up. - */ - -@media (min-width: 48em) { - .sidebar-sticky { - position: absolute; - right: 1rem; - bottom: 1rem; - left: 1rem; - } -} - - -/* Container - * - * Align the contents of the site above the proper threshold with some margin-fu - * with a 25%-wide `.sidebar`. - */ - -.content { - padding-top: 4rem; - padding-bottom: 4rem; -} - -@media (min-width: 48em) { - .content { - max-width: 38rem; - margin-left: 20rem; - margin-right: 2rem; - } -} - -@media (min-width: 64em) { - .content { - margin-left: 22rem; - margin-right: 4rem; - } -} - - -/* - * Reverse layout - * - * Flip the orientation of the page by placing the `.sidebar` on the right. - */ - -@media (min-width: 48em) { - .layout-reverse .sidebar { - left: auto; - right: 0; - } - .layout-reverse .content { - margin-left: 2rem; - margin-right: 20rem; - } -} - -@media (min-width: 64em) { - .layout-reverse .content { - margin-left: 4rem; - margin-right: 22rem; - } -} - - - -/* - * Themes - * - * As of v1.1, Hyde includes optional themes to color the sidebar and links - * within blog posts. To use, add the class of your choosing to the `body`. - */ - -/* Base16 (http://chriskempson.github.io/base16/#default) */ - -/* Red */ -.theme-base-08 .sidebar { - background-color: #ac4142; -} -.theme-base-08 .content a, -.theme-base-08 .related-posts li a:hover { - color: #ac4142; -} - -/* Orange */ -.theme-base-09 .sidebar { - background-color: #d28445; -} -.theme-base-09 .content a, -.theme-base-09 .related-posts li a:hover { - color: #d28445; -} - -/* Yellow */ -.theme-base-0a .sidebar { - background-color: #f4bf75; -} -.theme-base-0a .content a, -.theme-base-0a .related-posts li a:hover { - color: #f4bf75; -} - -/* Green */ -.theme-base-0b .sidebar { - background-color: #90a959; -} -.theme-base-0b .content a, -.theme-base-0b .related-posts li a:hover { - color: #90a959; -} - -/* Cyan */ -.theme-base-0c .sidebar { - background-color: #75b5aa; -} -.theme-base-0c .content a, -.theme-base-0c .related-posts li a:hover { - color: #75b5aa; -} - -/* Blue */ -.theme-base-0d .sidebar { - background-color: #6a9fb5; -} -.theme-base-0d .content a, -.theme-base-0d .related-posts li a:hover { - color: #6a9fb5; -} - -/* Magenta */ -.theme-base-0e .sidebar { - background-color: #aa759f; -} -.theme-base-0e .content a, -.theme-base-0e .related-posts li a:hover { - color: #aa759f; -} - -/* Brown */ -.theme-base-0f .sidebar { - background-color: #8f5536; -} -.theme-base-0f .content a, -.theme-base-0f .related-posts li a:hover { - color: #8f5536; -} diff --git a/themes/hyde/sass/poole.scss b/themes/hyde/sass/poole.scss deleted file mode 100644 index c277c14..0000000 --- a/themes/hyde/sass/poole.scss +++ /dev/null @@ -1,415 +0,0 @@ -/* - * ___ - * /\_ \ - * _____ ___ ___\//\ \ __ - * /\ '__`\ / __`\ / __`\\ \ \ /'__`\ - * \ \ \_\ \/\ \_\ \/\ \_\ \\_\ \_/\ __/ - * \ \ ,__/\ \____/\ \____//\____\ \____\ - * \ \ \/ \/___/ \/___/ \/____/\/____/ - * \ \_\ - * \/_/ - * - * Designed, built, and released under MIT license by @mdo. Learn more at - * https://github.com/poole/poole. - */ - - -/* - * Contents - * - * Body resets - * Custom type - * Messages - * Container - * Masthead - * Posts and pages - * Footnotes - * Pagination - * Reverse layout - * Themes - */ - - -/* - * Body resets - * - * Update the foundational and global aspects of the page. - */ - -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -html, -body { - margin: 0; - padding: 0; -} - -html { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 16px; - line-height: 1.5; -} -@media (min-width: 38em) { - html { - font-size: 20px; - } -} - -body { - color: #515151; - background-color: #fff; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -/* No `:visited` state is required by default (browsers will use `a`) */ -a { - color: #268bd2; - text-decoration: none; -} -/* `:focus` is linked to `:hover` for basic accessibility */ -a:hover, -a:focus { - text-decoration: underline; -} - -/* Headings */ -h1, h2, h3, h4, h5, h6 { - margin-bottom: .5rem; - font-weight: bold; - line-height: 1.25; - color: #313131; - text-rendering: optimizeLegibility; -} -h1 { - font-size: 2rem; -} -h2 { - margin-top: 1rem; - font-size: 1.5rem; -} -h3 { - margin-top: 1.5rem; - font-size: 1.25rem; -} -h4, h5, h6 { - margin-top: 1rem; - font-size: 1rem; -} - -/* Body text */ -p { - margin-top: 0; - margin-bottom: 1rem; -} - -strong { - color: #303030; -} - - -/* Lists */ -ul, ol, dl { - margin-top: 0; - margin-bottom: 1rem; -} - -dt { - font-weight: bold; -} -dd { - margin-bottom: .5rem; -} - -/* Misc */ -hr { - position: relative; - margin: 1.5rem 0; - border: 0; - border-top: 1px solid #eee; - border-bottom: 1px solid #fff; -} - -abbr { - font-size: 85%; - font-weight: bold; - color: #555; - text-transform: uppercase; -} -abbr[title] { - cursor: help; - border-bottom: 1px dotted #e5e5e5; -} - -/* Code */ -code, -pre { - font-family: Menlo, Monaco, "Courier New", monospace; -} -code { - padding: .25em .5em; - font-size: 85%; - color: #bf616a; - background-color: #f9f9f9; - border-radius: 3px; -} -pre { - display: block; - margin-top: 0; - margin-bottom: 1rem; - padding: 1rem; - font-size: .8rem; - line-height: 1.4; - overflow-x: scroll; - background-color: #f9f9f9; -} -pre code { - padding: 0; - font-size: 100%; - color: inherit; - background-color: transparent; -} -.highlight { - margin-bottom: 1rem; - border-radius: 4px; -} -.highlight pre { - margin-bottom: 0; -} - -/* Quotes */ -blockquote { - padding: .5rem 1rem; - margin: .8rem 0; - color: #7a7a7a; - border-left: .25rem solid #e5e5e5; -} -blockquote p:last-child { - margin-bottom: 0; -} -@media (min-width: 30em) { - blockquote { - padding-right: 5rem; - padding-left: 1.25rem; - } -} - -img { - display: block; - margin: 0 0 1rem; - border-radius: 5px; - max-width: 100%; -} - -/* Tables */ -table { - margin-bottom: 1rem; - width: 100%; - border: 1px solid #e5e5e5; - border-collapse: collapse; -} -td, -th { - padding: .25rem .5rem; - border: 1px solid #e5e5e5; -} -tbody tr:nth-child(odd) td, -tbody tr:nth-child(odd) th { - background-color: #f9f9f9; -} - - -/* - * Custom type - * - * Extend paragraphs with `.lead` for larger introductory text. - */ - -.lead { - font-size: 1.25rem; - font-weight: 300; -} - - -/* - * Messages - * - * Show alert messages to users. You may add it to single elements like a `

`, - * or to a parent if there are multiple elements to show. - */ - -.message { - margin-bottom: 1rem; - padding: 1rem; - color: #717171; - background-color: #f9f9f9; -} - - -/* - * Container - * - * Center the page content. - */ - -.container { - max-width: 38rem; - padding-left: 1rem; - padding-right: 1rem; - margin-left: auto; - margin-right: auto; -} - - -/* - * Masthead - * - * Super small header above the content for site name and short description. - */ - -.masthead { - padding-top: 1rem; - padding-bottom: 1rem; - margin-bottom: 3rem; -} -.masthead-title { - margin-top: 0; - margin-bottom: 0; - color: #505050; -} -.masthead-title a { - color: #505050; -} -.masthead-title small { - font-size: 75%; - font-weight: 400; - color: #c0c0c0; - letter-spacing: 0; -} - - -/* - * Posts and pages - * - * Each post is wrapped in `.post` and is used on default and post layouts. Each - * page is wrapped in `.page` and is only used on the page layout. - */ - -.page, -.post { - margin-bottom: 4em; -} - -/* Blog post or page title */ -.page-title, -.post-title, -.post-title a { - color: #303030; -} -.page-title, -.post-title { - margin-top: 0; -} - -/* Meta data line below post title */ -.post-date { - display: block; - margin-top: -.5rem; - margin-bottom: 1rem; - color: #9a9a9a; -} - -/* Related posts */ -.related { - padding-top: 2rem; - padding-bottom: 2rem; - border-top: 1px solid #eee; -} -.related-posts { - padding-left: 0; - list-style: none; -} -.related-posts h3 { - margin-top: 0; -} -.related-posts li small { - font-size: 75%; - color: #999; -} -.related-posts li a:hover { - color: #268bd2; - text-decoration: none; -} -.related-posts li a:hover small { - color: inherit; -} - - -/* Footnotes */ -.footnote-definition:first-of-type { - border-top: 1px solid; - padding-top: 1rem; -} -.footnote-definition { - margin-top: 1rem; -} -.footnote-definition sup { - margin-left: -1rem; - float: left; -} - - -/* - * Pagination - * - * Super lightweight (HTML-wise) blog pagination. `span`s are provide for when - * there are no more previous or next posts to show. - */ - -.pagination { - overflow: hidden; /* clearfix */ - margin-left: -1rem; - margin-right: -1rem; - font-family: "PT Sans", Helvetica, Arial, sans-serif; - color: #ccc; - text-align: center; -} - -/* Pagination items can be `span`s or `a`s */ -.pagination-item { - display: block; - padding: 1rem; - border: 1px solid #eee; -} -.pagination-item:first-child { - margin-bottom: -1px; -} - -/* Only provide a hover state for linked pagination items */ -a.pagination-item:hover { - background-color: #f5f5f5; -} - -@media (min-width: 30em) { - .pagination { - margin: 3rem 0; - } - .pagination-item { - float: left; - width: 50%; - } - .pagination-item:first-child { - margin-bottom: 0; - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; - } - .pagination-item:last-child { - margin-left: -1px; - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - } -} diff --git a/themes/hyde/sass/print.scss b/themes/hyde/sass/print.scss deleted file mode 100644 index da8f1df..0000000 --- a/themes/hyde/sass/print.scss +++ /dev/null @@ -1,19 +0,0 @@ -.sidebar { - display: none !important; -} - -.content { - margin: 0 auto; - width: 100%; - float: none; - display: initial; -} - -.container { - width: 100%; - float: none; - display: initial; - padding-left: 1rem; - padding-right: 1rem; - margin: 0 auto; -} diff --git a/themes/hyde/screenshot.png b/themes/hyde/screenshot.png deleted file mode 100644 index 5e21805..0000000 Binary files a/themes/hyde/screenshot.png and /dev/null differ diff --git a/themes/hyde/templates/index.html b/themes/hyde/templates/index.html deleted file mode 100644 index bbd081a..0000000 --- a/themes/hyde/templates/index.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - {% block twitter_meta %} - - - - - - {%endblock twitter_meta %} - - {% block title %}{{ config.title }}{% endblock title %} - - - - - - - - {% if config.generate_rss %} - - {% endif %} - - {% block extra_head %} - {% endblock extra_head %} - - - - {% block sidebar %} -

- {% endblock sidebar %} - -
- {% block content %} -
- {% for page in paginator.pages %} -
-

- - {{ page.title }} - -

- - - {{ page.summary | safe }} - - - Read More - -
- {% endfor %} - {% if paginator.previous %}< < Back{% endif %} - {% if paginator.next and paginator.previous %}|{% endif %} - {% if paginator.next %}Next > >{% endif %} -
- {% endblock content %} -
- - - - diff --git a/themes/hyde/templates/page.html b/themes/hyde/templates/page.html deleted file mode 100644 index 2844aad..0000000 --- a/themes/hyde/templates/page.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends "index.html" %} - - -{% block twitter_meta %} - - - - - -{%endblock twitter_meta %} - -{% block content %} -
-

{{ page.title }}

- - {{ page.content | safe }} -
-{% endblock content %} - diff --git a/themes/hyde/theme.toml b/themes/hyde/theme.toml deleted file mode 100644 index 87d35bc..0000000 --- a/themes/hyde/theme.toml +++ /dev/null @@ -1,22 +0,0 @@ -name = "hyde" -description = "A classic blog theme" -license = "MIT" -homepage = "https://github.com/Keats/gutenberg-hyde" -min_version = "0.4" -demo = "https://gutenberg-hyde.netlify.com" - -[extra] -hyde_sticky = true -hyde_reverse = false -hyde_theme = "" -hyde_links = [ -] - -[author] -name = "Vincent Prouillet" -homepage = "https://vincent.is" - -[original] -author = "mdo" -homepage = "http://markdotto.com/" -repo = "https://www.github.com/mdo/hyde" diff --git a/this-year-in-embedded-rust-2021/index.html b/this-year-in-embedded-rust-2021/index.html new file mode 100644 index 0000000..a86b5df --- /dev/null +++ b/this-year-in-embedded-rust-2021/index.html @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + +
+ + +
+ +
+

This Year in Embedded Rust: 2021

+ +

As 2021 draws to a close, we thought we'd take a look back at what's happened +over the last year in Embedded Rust, both within the working group and in the +larger community.

+

Meetings

+

We continued our weekly Rust Embedded Working Group meetings on our Matrix channel. They take place at 8pm Berlin time every Tuesday, and are open to the public. You can find all the minutes on Github.

+

Newsletters

+

The blog saw five new newsletters posted, keeping everyone up to date with what's hot in Embedded Rust. Make sure you bookmark or subscribe with your favourite RSS reader so you never miss an update! Please do also keep your contributions coming, as we love hearing about what everyone gets up to in Embedded Rust outside of the official Rust Embedded Working Group projects.

+

Platform Support

+

Outside of the working group, platform support communities provide vendor-specific support for particular microcontrollers and development boards.

+

2021 saw a brand-new microcontroller vendor hit the scene - Raspberry Pi! Their debut RP2040 microcontroller has two Cortex-M0 cores, and certainly made us all think about how we can try to make our software safe to use on multi-core systems. A new rp-rs community sprang up and continues to make good progress supporting all areas of the RP2040 with good quality examples.

+

This year also saw Espressif officially adopt Rust and they hired @mabez from the esp-rs community to help out!

+

Other platform support communities continued to develop this year:

+ +

If you're a platform support community not on the list please get in touch, we'd love to hear from you!

+

Other Embedded Projects

+

While not officially part of the Embedded Working Group, the following projects all continued to develop over 2021:

+
    +
  • The concurrency framework RTIC (GitHub, Matrix) hit version 1.0!
  • +
  • The async framework Embassy (GitHub, Matrix) has been under heavy development and now supports STM32, nRF and RP2040 platforms.
  • +
  • The debug and programming library and tools from probe-rs (GitHub, Matrix) released v0.11 and v0.12 of their library and tools including cargo-embed.
  • +
  • The Knurling project (GitHub) has had several releases of their tools such as probe-run.
  • +
  • The smoltcp embedded TCP/IP stack released v0.7 and v0.8, with many improvements including to the DHCP client and adding IEEE 802.15.4 support.
  • +
  • embedded-graphics (Matrix), a graphics library for embedded applications, had a major new v0.7 release (see the migration notes).
  • +
  • The Hubris RTOS and its companion debugger Humility, by Oxide Computer, had their first release.
  • +
+

Our Repositories

+

We continued to work on and maintain a number of key Embedded Rust repositories. The following repos all had commits during 2021:

+
    +
  • embedded-hal: The Embedded Hardware Abstraction Layer is a set of traits for describing common peripherals in a hardware-independent way. It continues its march towards 1.0 status, with a series of 1.0-alpha releases. It should hit 1.0 milestone some time in 2022! 120 commits over 27 files this year.
  • +
  • discovery: This book on Discovering Embedded Programming using Rust had a re-write this year - it's now based around the BBC micro:Bit! 251 commits over 187 files this year.
  • +
  • book: Our guide to all things Embedded Rust continues to be updated and improved, with 39 commits this year.
  • +
  • embedonomicon: Our guide to all the low-down details on how to bring-up a new #[no_std] platform with Rust saw 15 commits this year.
  • +
  • svd2rust: This tool generates our 'Peripheral Access Crates' from a System View Description file of the chip provided by the manufacturer. 122 commits over 17 files this year.
  • +
  • svd: The core libraries used by svd2rust and other tools to manipulate SVD files had 103 commits over 39 files this year.
  • +
  • awesome-embedded-rust: Our list of the very best in Embedded Rust keeps growing with 97 commits this year.
  • +
  • cortex-m, cortex-m-rt, and cortex-m-quickstart: Our platform support crates for the Arm Cortex-M architecture saw continued development, with 93 and 54 commits respectively, and a new v0.7 of cortex-m-rt released this year.
  • +
  • cortex-a: Our platform support crate for the Arm Cortex-A architecture saw 25 commits this year.
  • +
  • riscv and riscv-rt: Our platform support crates for the RISC-V architecture saw 74 and 12 commits respectively this year, with a v0.7 release of riscv.
  • +
  • msp430 and msp430-rt: Our platform support crates for the MSP430 architecture.
  • +
  • gpio-cdev, rust-spidev, rust-sysfs-gpio, rust-i2cdev, and linux-embedded-hal: Support for embedded Linux continued with 177 commits across these projects.
  • +
  • r0 was a cross-platform initialisation library, but we deprecated it this year to move such initialisation into platform-specific libraries such as cortex-m-rt.
  • +
+ +
+ +
+ + + + diff --git a/this-year-in-embedded-rust/index.html b/this-year-in-embedded-rust/index.html new file mode 100644 index 0000000..3010ae3 --- /dev/null +++ b/this-year-in-embedded-rust/index.html @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + Rust Embedded Working Group + + + + + + + + + + + + + + + + + + +
+ +
+

This Year in Embedded Rust

+ +

This year the Embedded WG set out to build the solid foundation that the +embedded Rust ecosystem requires to thrive. As we approach the date of the 2018 +edition release we reflect on our progress and share our achievements with you +in this post.

+

Discuss on users.rust-lang.org, on twitter, or on reddit!

+

Embedded Rust on stable

+

Stability -- AKA "my crate should not break when moving to a newer toolchain" -- +was the single most requested feature by the embedded community during the 2018 +roadmap planning phase.

+

Embedded development has been tied to the nightly +channel since its very beginning, and the people that have been doing embedded +development for a while have endured many breaking changes. Thankfully, those +days are over: Rust 1.30 marks the first stable release where you can build +fully working embedded programs without relying on unstable features.

+

Furthermore, we now have some unit tests that check embedded code in the +compiler test suite so unintentional breakage will be caught before it makes its +way into the nightly channel.

+

A smooth starting point

+

"How do I get started with embedded Rust?" has been a common question on IRC for +a long time. It has not been an easy question to answer, though: maintaining +documentation that relies on unstable features for a long period of time has +been an uphill battle so newcomers have often run into outdated docs.

+

But now that stable embedded Rust is here we have put together an authoritative +resource for getting started with embedded Rust: The Embedded Rust Book. We +have put a lot of effort in making the first experience as frictionless as +possible with the help of templates and tooling.

+

The embedded Rust book is not just a getting started guide; it's also meant +to be the document that teaches you how to effectively use the language to write +correct embedded software. We are currently amassing all our hard earned +experience into patterns and tips that we are adding to this book.

+

Resources for everyone

+

The Embedded Rust Book is aimed at people that have some experience with +embedded development, but we recognize that Rust has great potential for +becoming people's first choice for getting their feet wet with embedded +development so we have updated and will continue to work on resources, like the +Discovery book, that are aimed at that demographic.

+

We also recognize that the target audience for embedded Rust has different +levels of expertise with embedded systems and a varied set of interests +so we are also building advances resources like the embedonomicon +and collecting more targeted resources, like crates, in the +awesome-embedded-rust list. You can find these and other of our resources in +our docs webpage.

+

An organized community effort

+

All this has been accomplished with the hard work of many volunteers, both WG +members and other community members. The WG members, in particular, are +committed to maintaining the core crates and documentation that the +ecosystem relies on. All these resources have been taken under the umbrella of +the rust-embedded organization.

+

WG teams

+

The embedded space is huge: there are several architectures used in +this space, many application areas, and embedded developers work with different +sets of constraints: real-time constraints, memory constraints, energy / power +constraints, etc.

+

For this reason we have been creating and growing specialized teams within the +WG by adding members with different areas of expertise. This ensures that we +have different perspectives when making API design decisions in core crates and +when communicating the needs of the embedded community to the other Rust teams. +Having specialized teams also means that the crates developed by the org can be +assigned to the people with the right technical background.

+

On the upcoming 2018 edition

+

In this last sprint towards the 2018 edition we are focusing our efforts in +our documentation!

+

You can help us by proofreading our docs, reporting errors, giving feedback on +the existing content, requesting new topics and writing about topics that have +not yet been covered. Every little bit of help is greatly appreciated!

+

One important note: our documentation makes use of the 2018 edition which +requires you to use the beta channel until 1.31 is released in early December. +We suggest that you use the beta channel until then to get the best experience.

+

Beyond 2018

+

Our work doesn't stop the day Rust 1.31 comes out; the 2018 edition is just the +starting line of embedded Rust. As we continue to learn how to effectively use +Rust for embedded development we'll continue to refine and expand our +documentation as well as the core crates we maintain and develop.

+

Also, at this point in time ARM Cortex-M is our most mature target architecture +and the majority of crates on crates.io target this architecture, but we have +laid the groundwork for supporting other targets like bare metal ARM Cortex-A, +ARM Cortex-R, MSP430 and RISCV. We'll continue to work on getting these +targets on parity with the ARM Cortex-M target during the next year.

+

Finally, we'd love to hear what you would like to see happen in the embedded +space in 2019. We are collecting a "wishlist" of things the embedded community +would like to see get done, fixed and / or stabilized in 2019. Need some API in +core to be stabilized? Would like to get some Cargo bug / papercut fixed? Let us +know and we'll look into making it happen! We'll use this data to set out an +embedded Rust roadmap for 2019.

+

Here's to a 2019 with more embedded Rust success stories (yes, "more"; wait +for the upcoming revamped rust-lang website ;-)). Happy embedded hacking!

+ +
+ +
+ + + + diff --git a/triagebot.toml b/triagebot.toml deleted file mode 100644 index fa0824a..0000000 --- a/triagebot.toml +++ /dev/null @@ -1 +0,0 @@ -[assign]