Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings
knurling-rs

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Get a handle on bare-metal Rust

Knurling-rs is a project byFerrous Systems. Our mission is to improve the embedded Rust experience. To achieve this, we build and improve tools and create learning materials.

We believe that developing for embedded systems should be no more difficult than developing for hosted platforms.

Tools

It should be possible to use the same workflows and equally powerful tooling to develop applications and libraries for tiny embedded systems as well as powerful server-class hardware.

To that end we have created following tools:

defmt

defmt is a highly efficient logging framework that targets resource-constrained devices, like microcontrollers.defmt stands for "deferred formatting".

Rather than performing formatting input like255u8 into"The temperature is 255°C" on the embedded device, the formatting is deferred to the host that will output the logs. This way, only the relevant data needs to be sent to the host instead of the entire format string. Additionally the transmitted data is compressed, for example bycompressing several booleans into one byte.

This means thatdefmt:

  • reduces compiled binary size, since it only has to contain indices to log strings saved by the host instead of the string itself
  • reduces computation efforts on the target, because the formatting of e.g.255u8 to"255" happens on the host that displays the logging output, not the target
  • reduces delays and log buffer usage, since there is less data sent from the embedded device to the host

For more details on how it works, check out thedefmt book.

flip-link

flip-link adds zero-cost stack overflow protection for your embedded programs – no MPU or stack probe support needed!

It does this byflipping the standard memory layout of ARM Cortex-M programs.

With this inverted memory layout, the stack "overflows" instead of corrupting memory when it hits the boundary of the RAM region. This boundary collision raises a hardware exception (usually the "hard fault" exception), which by default halts the program.

For more details, check out ourblog post introducingflip-link.

app-template

Theapp-template is a Cargo project template, so you can hit the ground running withprobe-run,defmt andflip-link. Using the knurlingapp-template, andcargo-generate, you can start your embedded project by just running

$cargo generate \    --git https://github.com/knurling-rs/app-template \    --branch main \    --name my-app

and specifying your desired HAL and compilation target.

defmt-test

defmt-test is an embedded test harness that lets you write and rununit tests as if you were using the built-in#[test] attribute, but they'll run on your embedded target.

Of course,defmt-test also gives you an#[init] attribute for initialization functions needed to set up your peripherals etc.

For more details, check out ourblog post introducingdefmt-test. Also check ourblog post series on testing embedded Rust code.

nrdfdu

nrdfdu is a CLI tool for loading firmware onto an nRF52840 microcontroller running Nordic Semi's USB DFU bootloader.

derive-mmio

derive-mmio is a macro for auto-generating MMIO access methods for a structure. You can see an example of how to use it in theFerrous Systems training material.

Learning materials

Sometimes we create learning resources to help newcomers to embedded Rust to get their hands dirty

namewebsiterepository
Knurling Session 2020 "Build a CO2 measuring device"https://session20q4.ferrous-systems.com/https://github.com/knurling-rs/knurling-session-20q4

Blog

You can find some project updates and behind the scenes insights in theFerrous Systems Blog.

PinnedLoading

  1. defmtdefmtPublic

    Efficient, deferred formatting for logging on embedded systems

    Rust 1.1k 118

  2. app-templateapp-templatePublic

    Quickly set up a `probe-rs` + `defmt` + `flip-link` embedded project

    Rust 422 40

  3. flip-linkflip-linkPublic

    Adds zero-cost stack overflow protection to your embedded programs

    Rust 384 14

  4. knurling-session-20q4knurling-session-20q4Public

    Building your own embedded CO2 measuring device. With Rust!

    Rust 25 9

Repositories

Loading
Type
Select type
Language
Select language
Sort
Select order
Showing 10 of 22 repositories
  • defmt Public

    Efficient, deferred formatting for logging on embedded systems

    knurling-rs/defmt’s past year of commit activity
    Rust 1,092Apache-2.0 118 97(11 issues need help) 9 UpdatedNov 28, 2025
  • flip-link Public

    Adds zero-cost stack overflow protection to your embedded programs

    knurling-rs/flip-link’s past year of commit activity
    Rust 384Apache-2.0 14 14 1 UpdatedNov 27, 2025
  • nrfdfu-rs Public

    An implementation of the nRF bootloader protocol

    knurling-rs/nrfdfu-rs’s past year of commit activity
    Rust 22Apache-2.0 5 1 1 UpdatedNov 4, 2025
  • derive-mmio Public

    Experiments in turning structures into MMIO-safe structures

    knurling-rs/derive-mmio’s past year of commit activity
    Rust 14Apache-2.0 5 2 0 UpdatedSep 3, 2025
  • app-template Public

    Quickly set up a `probe-rs` + `defmt` + `flip-link` embedded project

    knurling-rs/app-template’s past year of commit activity
    Rust 422Apache-2.0 40 3 2 UpdatedAug 19, 2025
  • .github Public
    knurling-rs/.github’s past year of commit activity
    00 0 0 UpdatedJun 3, 2025
  • defmt-experiments Public

    Trying out new ideas for defmt

    knurling-rs/defmt-experiments’s past year of commit activity
    Rust0 1 0 0 UpdatedDec 2, 2024
  • probe-rs Public Forked fromprobe-rs/probe-rs

    A debugging toolset and library for debugging embedded ARM and RISC-V targets on a separate host

    knurling-rs/probe-rs’s past year of commit activity
    Rust 7Apache-2.0 505 0 0 UpdatedDec 2, 2024
  • probe-run Public archive

    Run embedded programs just like native ones

    knurling-rs/probe-run’s past year of commit activity
    Rust 643Apache-2.0 74 51 6 UpdatedJan 30, 2024
  • lm3s6965 Public Forked fromjaparic/lm3s6965

    A minimal device crate for the LM3S6965

    knurling-rs/lm3s6965’s past year of commit activity
    Rust0Apache-2.0 6 0 0 UpdatedJul 20, 2023

[8]ページ先頭

©2009-2025 Movatter.jp