defmt is a highly efficient logging framework that targets resource-constrained devices, like microcontrollers

Overview

defmt

defmt ("de format", short for "deferred formatting") is a highly efficient logging framework that targets resource-constrained devices, like microcontrollers.

For more details about the framework check the book at https://defmt.ferrous-systems.com.

The git version of the defmt book can be viewed at https://defmt-next.ferrous-systems.com/.

Setup

New project

The fastest way to get started with defmt is to use our app-template to set up a new Cortex-M embedded project.

Existing project

To include defmt in your existing project, follow our Application Setup guide.

MSRV

defmt always compiles on the latest stable rust release. This is enforced by our CI building and testing against this version.

It still might work on older rust versions, but this isn't ensured.

defmt ecosystem

The following diagram illustrates the user-facing and internal crates of the defmt framework.

defmt crates structure

Developer Information

Running Tests

Tests are run using cargo xtask -- although this is simply an alias (defined in .cargo/config.toml) for cargo run --package xtask --.

To see a list of options, see xtask/src/main.rs, or run:

$ cargo xtask help

For example, to run all the tests, run:

$ cargo xtask test-all

You will need qemu-system-arm installed and in your $PATH for some of the tests (e.g. test-snapshot).

Support

defmt is part of the Knurling project, Ferrous Systems' effort at improving tooling used to develop for embedded systems.

If you think that our work is useful, consider sponsoring it via GitHub Sponsors.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.

Comments
  • defmt crate doesn't compile on macOS

    defmt crate doesn't compile on macOS

    Updated description: defmt 0.1.3 compiles on macOS but the git version (0.2.0) doesn't repro:

    $ cargo new --bin hello
    $ cd hello
    $ cargo add defmt --vers 0.1.3
    $ cargo run
    $ # ^ doesn't work if you use the git version
    

    When trying to get started to write compile fail tests , running $ cargo test --test ui didn't work for me using a mac. I'd always get this unhelpful error:

    LLVM ERROR: Global variable '{"package":"defmt","tag":"defmt_prim","data":"{=i8}","disambiguator":"2773326613612971761"}' has an invalid section specifier '.defmt.prim.{"package":"defmt","tag":"defmt_prim","data":"{=i8}","disambiguator":"2773326613612971761"}': mach-o section specifier requires a segment whose length is between 1 and 16 characters.
    error: could not compile `defmt` 
    

    Passing more flags like this did help: $ cargo test -p defmt --all-features --test ui

    This makes sense when looking at ci.yml

    type: bug priority: high 
    opened by BriocheBerlin 18
  • target-side `env_logger`-like env filter

    target-side `env_logger`-like env filter

    This PR implements an alternative approach to disabling/enabling logging in crates. Currently we use Cargo features. This PR removes the need for those Cargo features and replaces them with the env variable: DEFMT_LOG.

    The DEFMT_LOG env var specifies which crates should emit defmt logs and at which level. Its syntax is the same as the syntax used by the env_logger crate.

    ~~The DEFMT_LOG env var parser currently rejects paths that include modules: so DEFMT_LOG=krate=info is OK, but DEFMT_LOG=krate::module=info is rejected. This is intentional and should let us accept module paths and filter based on modules in the future (as in add module support in a backwards compatible fashion).~~ No longer true, DEFMT_LOG now supports module paths.

    One of the main advantages of DEFMT_LOG is that allows filtering logs with module level granularity. The current Cargo features based approach is more coarse grained and only supports enabling / disabling entire crates.

    NOTE this is a target side emit filter and orthogonal to the host side display filter proposed in knurling-rs/probe-run#74. Disabling logs with the target filter makes the target program smaller (, maybe also slightly faster) and it reduces the amount of data sent from the target to the host. Disabling logs with the host filter does not change the target program at all not it changes the amount of data transmitted from the target to the host.

    Changing the value of the DEFMT_LOG env var causes all crates that transitively depend on the defmt_macros crate to be recompiled.

    Example usage:

    $ bat src/bin/hello.rs
    
    fn main() -> ! {
        defmt::info!("hello");
        foo::foo();
        bar::bar();
        app::exit()
    }
    
    mod foo {
        pub fn foo() {
            defmt::info!("foo");
        }
    }
    
    mod bar {
        pub fn bar() {
            defmt::info!("bar");
        }
    }
    
    $ DEFMT_LOG=hello::foo cargo r --bin hello
    0 INFO  foo
    └─ hello::foo::foo @ src/bin/hello.rs:16
    
    $ DEFMT_LOG=hello::bar cargo r --bin hello
    0 INFO  bar
    └─ hello::bar::bar @ src/bin/hello.rs:22
    
    $ DEFMT_LOG=hello::foo,hello::bar cargo r --bin hello
    0 INFO  foo
    └─ hello::foo::foo @ src/bin/hello.rs:16
    1 INFO  bar
    └─ hello::bar::bar @ src/bin/hello.rs:22
    
    $ DEFMT_LOG=hello cargo r --bin hello
    0 INFO  hello
    └─ hello::__cortex_m_rt_main @ src/bin/hello.rs:8
    1 INFO  foo
    └─ hello::foo::foo @ src/bin/hello.rs:16
    2 INFO  bar
    └─ hello::bar::bar @ src/bin/hello.rs:22
    
    $ rg '\[features' Cargo.toml || echo no Cargo features
    no Cargo features
    

    how to test this

    as this is not even merged into the main branch and breaking changes (with respect to defmt v0.2.0) have landed into defmt, the whole process is quite involved

    1. install a probe-run that uses the decoder in this branch
    $ git clone https://github.com/knurling-rs/probe-run
    $ cd probe-run
    $ # change the `#[dependencies]` section
    $ edit Cargo.toml
    
     colored = "2.0"
    -defmt-decoder = { version = "=0.2.2", features = ['unstable'] }
    +defmt-decoder = { git = "https://github.com/knurling-rs/defmt", branch = "env-filter", features = ['unstable'] }
     difference = "2.0"
    
    $ cargo install --path .
    
    1. use [patch.crates-io] in Cargo.toml (the one in the root of the workspace) to use the git version of defmt instead of v0.2.x. The app-template already includes this section in its Cargo.toml
    [patch.crates-io]
    defmt = { git = "https://github.com/knurling-rs/defmt", branch = "env-filter" }
    defmt-rtt = { git = "https://github.com/knurling-rs/defmt", branch = "env-filter" }
    defmt-test = { git = "https://github.com/knurling-rs/defmt", branch = "env-filter" }
    panic-probe = { git = "https://github.com/knurling-rs/defmt", branch = "env-filter" }
    

    IMPORTANT use branch = "env-filter" instead of rev = "somehash"

    1. set the PROBE_RUN_IGNORE_VERSION env variable before you run your firmware e.g.
    $ PROBE_RUN_IGNORE_VERSION=1 cargo run --bin hello
    
    1. try setting / changing the value of the DEFMT_LOG env variable!
    $ export PROBE_RUN_IGNORE_VERSION=1
    $ DEFMT_LOG=hello=trace cargo run --bin hello
    0 INFO  Hello, world!
    └─ hello::__cortex_m_rt_main @ src/bin/hello.rs:8
    

    As there's other breaking-change work currently ongoing (#508) I plan to leave this work on hold for now -- but will be answering to feedback! -- and resume it when that's concluded.

    Unresolved questions

    • rename DEFMT_LOG to DEFMT_CAPTURE or DEFMT_TARGET_CAPTURE? if we keep the DEFMT_LOG name, what should we name the env var to be used in knurling-rs/probe-run#74?

    TODO list

    • [x] RFC approval
    • [x] address inline TODO comments
    • [x] support log level without module path e.g. DEFMT_LOG=info
    • [x] support the off pseudo log-level (disables logging)
    • [x] fix module path handling so that DEFMT_LOG=krate::module doesn't match krate::module1, krate::module2, etc.
    • [x] fix CI
    • [x] documentation. important changes in behavior to note

    closes #183 closes #255 closes #459

    opened by japaric 17
  • Add alternate hint ('#')

    Add alternate hint ('#')

    Also make formatting match core::fmt.

    This changes the current behavior, so some thought should be given before accepting. I expect it will break some tests: I'm not sure how to run them all locally so I will rely on CI to find them.

    Closes #491

    opened by derekdreery 16
  • unwrap alternative?

    unwrap alternative?

    uwnrap() on a Result is quite convenient, but it's not usable with defmt since it requires the error type to be fmt::Debug, which is not useful to print it with defmt.

    A solution could be add a trait defmt::Unwrap (or maybe Dewrap?) and implement it for Result, which does the same as unwrap() but printing the result with defmt.

    type: enhancement priority: low status: needs PR difficulty: easy 
    opened by Dirbaio 15
  • Code size

    Code size

    I have put together a code size testbench to measure code size. It has 2 test cases, spam logs lots of stuff (based on the qemu test) and smoltcp runs smoltcp's loopback example from latest git master (which has defmt support).

    spam  |  smoltcp |  what
    ===================================
    18428 |  60680   |  main branch
      624 |  49780   |  no defmt
    

    spam has 156 log calls and is 18428 bytes (.text size). Commenting the run_test() call in main gives a .text size of 944 bytes. Therefore, defmt's code size is:

    Base size (RTT stuff, etc): 944 - 624 = 320 bytes Log call size: (18428-944)/155 = 112.8 bytes/call

    112.8 bytes/call sounds about right. As seen here, a simple info!("defmt test {=u32}", x); is already 74 bytes of code, and the spam code does a mix of simple and complex log calls.

    And 112.8 bytes avg, or 74 bytes to print a u32 is A LOT.

    For comparison, let's check good old C printf:

    void foo(int x) {
        printf("defmt test %d", x);
    }
    

    compiled with arm-none-eabi-gcc -c printf.c -Os -mthumb:

       2:	0001      	movs	r1, r0
       4:	4802      	ldr	r0, [pc, #8]	; (10 <foo+0x10>)
       6:	f7ff fffe 	bl	0 <printf>
    

    This is just 8 bytes of code, or 8+14 = 22 bytes if we count the string.

    Defmt is 3.5 times larger than printf when counting the string. And this is a generous comparison: arguably the apples-to-apples comparison is not counting the string, since the string pointer is equivalent to defmt's interned string IDs. In which case defmt is 10 times larger.

    I'm aware defmt does much more than printf. It's to be expected a log call printing complex nested structs and enums generates bigger code. However, simple log calls (with no arguments or just a handful of integers) are the vast majority in real-world projects, and code size for these really hurts.

    type: enhancement priority: medium status: needs PR difficulty: medium breaking change 
    opened by Dirbaio 14
  • `ERROR failed to decode defmt data` on STM32

    `ERROR failed to decode defmt data` on STM32

    Code:

    #[interrupt]
    fn EXTI4() {
        defmt::warn!("DN");
    
    }
    

    Program crashes once this interrupt fires:

      (HOST) ERROR failed to decode defmt data: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]  // Sometimes many more 0s, and sometimes non-0 numbers.
    

    For context, rprintln works in this case.

    type: bug priority: high status: needs info difficulty: hard 
    opened by David-OConnor 14
  • Error: BUG in DWARF variable filter: index collision

    Error: BUG in DWARF variable filter: index collision

    Running probe-run with RUST_LOG=trace gives me:

    [2020-09-03T10:23:17Z DEBUG probe_rs::config::registry] Searching registry for chip with name STM32L475VGTx
    [2020-09-03T10:23:17Z DEBUG probe_run] RAM region: 0x20000000-0x20017FFF
    Error: BUG in DWARF variable filter: index collision
    

    An ELF file reproducing can be found here: https://www.dropbox.com/s/5awbjmyczagrp75/initial?dl=0

    compiled with defmt commit #cf8a8e8328cd371c2d3ef3198ffb62c219e4dd6e

    type: bug 
    opened by MathiasKoch 14
  • globally disabled logs still require symbols on x86 = linker error

    globally disabled logs still require symbols on x86 = linker error

    This program:

    fn main() {
        defmt::info!("hello");
        println!("hello");
    }
    

    fails to link if you use defmt v0.2.0

    $ cargo r
    (..)
      = note: /usr/bin/ld: (..)/target/debug/deps/libdefmt-00ba9b2b47686b1f.rlib(defmt-00ba9b2b47686b1f.defmt.bhjss6u8-cgu.12.rcgu.o): in function `defmt::export::acquire':
              (..)/defmt-0.2.0/src/export.rs:36: undefined reference to `_defmt_acquire'
              /usr/bin/ld: (..)/target/debug/deps/libdefmt-00ba9b2b47686b1f.rlib(defmt-00ba9b2b47686b1f.defmt.bhjss6u8-cgu.12.rcgu.o): in function `defmt::export::release':
              (..)/defmt-0.2.0/src/export.rs:48: undefined reference to `_defmt_release'
              /usr/bin/ld: (..)/target/debug/deps/libdefmt-00ba9b2b47686b1f.rlib(defmt-00ba9b2b47686b1f.defmt.bhjss6u8-cgu.12.rcgu.o): in function `defmt::export::timestamp':
              (..)/defmt-0.2.0/src/export.rs:60: undefined reference to `_defmt_timestamp'
              collect2: error: ld returned 1 exit status
    

    but links and runs fine if you use defmt v0.1.3

    $ cargo r
    (..)
         Running `target/debug/hello`
    hello
    

    note that all logs are disabled in both cases (no Cargo features were added to the crate's Cargo.toml)

    type: bug status: needs design priority: high difficulty: medium 
    opened by japaric 12
  • probe-rs loses connection with stm32 if stm performs flash write

    probe-rs loses connection with stm32 if stm performs flash write

    defmt version: overlap-fix#0ceade69

    I am using stm32g081. In my app first couple of flash pages are allocated to bootloader and configuration. When using defmt and at the same time stm32 tries to write to configuration page, communication with the probe will be lost:

    0.000000 INFO app info: v0.9.2 hw: 8 ts: 0
    Error: A core architecture specific error occured
    
    Caused by:
        0: Failed to read register DRW at address 0x0000000c because: An error specific to a probe type occured
        1: An error specific to a probe type occured
        2: Command failed with status SwdDpWait
    

    Maybe it is possible to reattach to the target without flashing it again? Currently I run it as cargo rrb um8

    Edit:

    Unfortunately currently it is impossible: probe-run um8 --chip STM32G081KBUxN --defmt --no-flash

    error: The argument '--defmt' cannot be used with '--no-flash'
    
    type: bug status: needs info 
    opened by andresv 12
  • decode breaks when using `|` in `write!`

    decode breaks when using `|` in `write!`

    when i implement this trait, i get an error from defmt:

    impl defmt::Format for State {
        fn format(&self, fmt: defmt::Formatter) {
            use chrono::TimeZone;
            let dt = chrono::Utc
                .ymd_opt(self.year, self.month, self.day)
                .and_hms_opt(self.h, self.m, self.s)
                .map(|dt| dt + chrono::Duration::seconds(self.tz_offset as i64))
                .single();
    
            defmt::write!(
                fmt,
                "FIX: {} | SVs: {} | HDOP: {} | {}",
                self.fix,
                self.svs,
                self.hdop,
                match dt {
                    Some(s) => s.to_string(),
                    None => "INVALID".to_owned(),
                },
            );
        }
    }
    
     INFO  FIX: 0 
    └─ pico_clock::__cortex_m_rt_main @ src/main.rs:293
    (HOST) ERROR failed to decode defmt data: [0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 7, 49, 4e, 56, 41, 4c, 49, 44]
    Error: malformed data
    

    However, if I use info! directly, it works fine:

    impl State {
        fn print(&self) {
            use chrono::TimeZone;
            let dt = chrono::Utc
                .ymd_opt(self.year, self.month, self.day)
                .and_hms_opt(self.h, self.m, self.s)
                .map(|dt| dt + chrono::Duration::seconds(self.tz_offset as i64))
                .single();
    
            info!(
                "FIX: {} | SVs: {} | HDOP: {} | {}",
                self.fix,
                self.svs,
                self.hdop,
                match dt {
                    Some(s) => s.to_string(),
                    None => "INVALID".to_owned(),
                },
            );
        }
    }
    
     INFO  FIX: 0 | SVs: 0 | HDOP: 0.0 | INVALID
    └─ pico_clock::__cortex_m_rt_main @ src/main.rs:293
     INFO  FIX: 0 | SVs: 0 | HDOP: 0.0 | INVALID
    └─ pico_clock::__cortex_m_rt_main @ src/main.rs:293
    
    // ... and so on
    

    I'm using defmt 0.2 with the alloc feature and defmt-rtt 0.2

    type: bug priority: medium status: needs PR difficulty: medium 
    opened by devsnek 11
  • zero padding display hint diverges from `core::fmt`

    zero padding display hint diverges from `core::fmt`

    This code:

    defmt::info!("{:00x}", 42);
    defmt::info!("{:01x}", 42);
    defmt::info!("{:02x}", 42);
    defmt::info!("{:03x}", 42);
    defmt::info!("{:04x}", 42);
    defmt::info!("{:05x}", 42);
    defmt::info!("{:06x}", 42);
    

    results in these logs:

    0 INFO  0x2a
    └─ hello::__cortex_m_rt_main @ src/bin/hello.rs:8
    1 INFO  0x2a
    └─ hello::__cortex_m_rt_main @ src/bin/hello.rs:9
    2 INFO  0x2a
    └─ hello::__cortex_m_rt_main @ src/bin/hello.rs:10
    3 INFO  0x2a
    └─ hello::__cortex_m_rt_main @ src/bin/hello.rs:11
    4 INFO  0x2a
    └─ hello::__cortex_m_rt_main @ src/bin/hello.rs:12
    5 INFO  0x02a
    └─ hello::__cortex_m_rt_main @ src/bin/hello.rs:13
    6 INFO  0x002a
    └─ hello::__cortex_m_rt_main @ src/bin/hello.rs:14
    

    I'd expect that a display hint :04x results in 0x002a for 42, but it currently seems to include the 0x in the length and only results in 0x2a. 06x will currently result in the desired 0x002a, but I would expect 0x000002a.

    type: bug priority: medium status: needs PR difficulty: medium 
    opened by Urhengulas 11
  • Support for ASCII-safe wire encoding

    Support for ASCII-safe wire encoding

    I'm currently working on a platform which isn't supported by probe-rs yet. I'm also working on that, but as of right now my only way to debug the target is using J-Link's GDB server. The problem with that is that its RTT implementation really doesn't like raw bytes, or to be more specific, interprets them as control commands for itself. For instance, FF followed by anything from 00 to 0F will instruct the client to switch its virtual terminal (another mux mechanism on top of the usual RTT channel) causing subsequent bytes to be routed there instead. This issue previously came up in #558.

    I get that it's easy to blame this on the J-Link tools, but I feel like this library could really benefit from an additional encoding to cover such cases. For instance, this point is also brought up in #714:

    Often these other tools expect utf-8 encoded data, or don't handle reconnection well, or print data other than the raw bytes to their stdout. Basically, these tools tend to not work well as a source for defmt-print's pipe.

    Alternatively, this could be achieved using a custom logger, but that would require a second version of every existing logger (e.g. RTT and UART) and wouldn't be picked up automatically by tools like defmt-print.

    As for what this encoding might look like, I'm thinking we could encode the frame content using base64 (or ascii85) and use a space as the end-of-frame indicator.

    I'm happy to contribute the implementation but wanted to create this issue first to test the waters.

    opened by siku2 4
  • enable GitHub Dependabot

    enable GitHub Dependabot

    this ensures that the dependencies are kept up to date. see the docs for further information.

    note: changelog intentionally left away as this only touches the build infrastructure and has no direct impact on consumers of the library.

    opened by rursprung 0
  • Using RTIC for mutex instead of critical-section

    Using RTIC for mutex instead of critical-section

    Do we have an example of using RTIC to handle the mutual-exclusion required for the defmt-rtt transport stream, instead of using critical section?

    I have a device with an SPI interface, and I would like the SPI interrupt not be disabled whilst I am writing to the RTT. I promise that (or rather, using RTIC I can prove that) the SPI interrupt routine does not use defmt.

    type: question 
    opened by jonathanpallant 0
  • Feature flag to print in a non-deferred format.

    Feature flag to print in a non-deferred format.

    I'm using defmt as my logging library. I like the efficiency that it enables. However sometimes, I want to be able to view the data without running a printer on the host machine to decode the data. I know that this is antithetical to the design of defmt, but there are several motivating reasons:

    • Often, I cannot use probe-rs based tools, which means that I need to rely on other tools to read UART, for example
    • Often these other tools expect utf-8 encoded data, or don't handle reconnection well, or print data other than the raw bytes to their stdout. Basically these tools tend to not work well as a source for defmt-print's pipe.
    • Sometimes I cannot even get a stdout for the serial data. This happens for example when I'm debugging my hardware with sigrok and a logic analyzer. defmt is not one of the supported encodings for the serial data, I can really only pick hex, ascii, etc.
    • Sometimes the binary that corresponds to the firmware is unknown. It would suck to have to tear out all of the logging infrastructure in the app and revert to something like log just to make this fix. Maybe my types don't even support Debug and thats going to require a big refactor! It would be nice to have the comfort of knowing that for sure I'll be able to use defmt and choose at the last minute before I ship my firmware whether the logs will be deferred or not.

    For the exclusive purpose of enabling easier debugging in these scenarios, would it be possible to turn off the "deferred" part of defmt via a feature flag?

    type: enhancement priority: low status: needs design difficulty: medium 
    opened by TheButlah 5
  • `defmt-rtt` `0.4` breaks on STM32H7A3ZIT6Q

    `defmt-rtt` `0.4` breaks on STM32H7A3ZIT6Q

    After trying to upgrade, I encountered an issue with defmt-rtt 0.4, no more messages will show up. I am unsure what the root cause is, and to verify that the cause isn't my code, I have created a minimum reproducible example from the recommended app template. If I set defmt-rtt = "0.4" in the Cargo.toml I no longer get any output, while with defmt-rtt = "0.3" that isn't the case.

    This is then executed - like in the README - on a STM32H7A3 Nucleo-144.

    rustc version: rustc 1.67.0-nightly (32e613bba 2022-12-02)

    defmt-rtt = "0.4"

    image

    defmt-rtt = "0.3"

    image

    type: bug status: needs design priority: high 
    opened by indietyp 4
Releases(defmt-v0.3.2)
  • defmt-v0.3.2(Oct 6, 2022)

    What's Changed

    • defmt-test: update and extend readme by @japaric in https://github.com/knurling-rs/defmt/pull/670
    • --json docs + Readme by @Dajamante in https://github.com/knurling-rs/defmt/pull/669
    • Prepare defmt 0.3.2 release by @Urhengulas in https://github.com/knurling-rs/defmt/pull/675

    New Contributors

    • @Dajamante made their first contribution in https://github.com/knurling-rs/defmt/pull/669

    Full Changelog: https://github.com/knurling-rs/defmt/compare/defmt-v0.3.1...defmt-v0.3.2

    Source code(tar.gz)
    Source code(zip)
  • defmt-v0.3.1(May 30, 2022)

    What's Changed

    • Fix error message in case of version-mismatch by @bobmcwhirter in https://github.com/knurling-rs/defmt/pull/626
    • Added test instructions to the top-level README. by @jonathanpallant in https://github.com/knurling-rs/defmt/pull/630
    • fix #628 by @spookyvision in https://github.com/knurling-rs/defmt/pull/633
    • Update ELF parsing deps by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/634
    • mention #628 by @spookyvision in https://github.com/knurling-rs/defmt/pull/635
    • fix CHANGELOG links by @spookyvision in https://github.com/knurling-rs/defmt/pull/636
    • Use fully qualified defmt::unreachable!() in macros. Fixes #638. by @Dirbaio in https://github.com/knurling-rs/defmt/pull/639
    • Release v0.3.1 by @jonathanpallant in https://github.com/knurling-rs/defmt/pull/641
    • more RTT buffer size docs by @spookyvision in https://github.com/knurling-rs/defmt/pull/643
    • Fix formating of Arg::Ixx based integer hex values by @justahero in https://github.com/knurling-rs/defmt/pull/646
    • Fail parsing of missing display hint by @justahero in https://github.com/knurling-rs/defmt/pull/647
    • probe-run json output by @Urhengulas in https://github.com/knurling-rs/defmt/pull/651
    • book: Document probe-run json mode by @Urhengulas in https://github.com/knurling-rs/defmt/pull/655
    • book: Run code blocks if possible and unify style by @Urhengulas in https://github.com/knurling-rs/defmt/pull/657
    • decoder: Fix missing space in println frames by @Urhengulas in https://github.com/knurling-rs/defmt/pull/658
    • use crate critical-section in defmt-rtt by @jannic in https://github.com/knurling-rs/defmt/pull/640
    • defmt: implements Format for cells by @DBLouis in https://github.com/knurling-rs/defmt/pull/656
    • Make export::acquire() and export::release() unsafe by @jannic in https://github.com/knurling-rs/defmt/pull/659
    • Refactor rtt [2/2] by @Urhengulas in https://github.com/knurling-rs/defmt/pull/622
    • snapshot-tests: Add tests for cell types by @Urhengulas in https://github.com/knurling-rs/defmt/pull/661
    • Add attributes for Format derive to use Debug2Format on specific fields by @mattico in https://github.com/knurling-rs/defmt/pull/662
    • make defmt::flush an no-operation when unstable-test feature is enabled by @japaric in https://github.com/knurling-rs/defmt/pull/666
    • update CHANGELOG by @japaric in https://github.com/knurling-rs/defmt/pull/663
    • bump crate versions by @japaric in https://github.com/knurling-rs/defmt/pull/667
    • add crate metadata to defmt-json-schema by @japaric in https://github.com/knurling-rs/defmt/pull/668

    New Contributors

    • @bobmcwhirter made their first contribution in https://github.com/knurling-rs/defmt/pull/626
    • @jonathanpallant made their first contribution in https://github.com/knurling-rs/defmt/pull/630
    • @jannic made their first contribution in https://github.com/knurling-rs/defmt/pull/640
    • @DBLouis made their first contribution in https://github.com/knurling-rs/defmt/pull/656

    Full Changelog: https://github.com/knurling-rs/defmt/compare/defmt-v0.2.3...defmt-v0.3.1

    Source code(tar.gz)
    Source code(zip)
  • defmt-v0.3.0(Nov 10, 2021)

    What's Changed

    • [1/n] - Logger trait v2. by @Dirbaio in https://github.com/knurling-rs/defmt/pull/505
    • [2/n] - Remove code-size-costly optimizations by @Dirbaio in https://github.com/knurling-rs/defmt/pull/507
    • book/duplicates.md: discriminator -> disambiguator by @eupn in https://github.com/knurling-rs/defmt/pull/513
    • extend raw pointer implementation to include !Format types by @japaric in https://github.com/knurling-rs/defmt/pull/514
    • Add overwrite option for xtask cross results. by @derekdreery in https://github.com/knurling-rs/defmt/pull/512
    • xtask: Only install additional targets for tests that require them by @Urhengulas in https://github.com/knurling-rs/defmt/pull/516
    • [3/n] Remove u24 by @Dirbaio in https://github.com/knurling-rs/defmt/pull/521
    • Replace µs hint with us by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/522
    • [5/n] Format trait v2 by @Dirbaio in https://github.com/knurling-rs/defmt/pull/508
    • [4/n] test: do not depend on custom InternalFormatter by @Dirbaio in https://github.com/knurling-rs/defmt/pull/524
    • Minimize dependencies by @Urhengulas in https://github.com/knurling-rs/defmt/pull/523
    • Implement precedence of inner display hint by @justahero in https://github.com/knurling-rs/defmt/pull/359
    • decoder: Simplify tests by @Urhengulas in https://github.com/knurling-rs/defmt/pull/526
    • book: Add logo and support text to introduction by @Urhengulas in https://github.com/knurling-rs/defmt/pull/527
    • Adds add for user survey into readme. by @BriocheBerlin in https://github.com/knurling-rs/defmt/pull/533
    • Support bitflags by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/528
    • Refactor user-guide of book by @Urhengulas in https://github.com/knurling-rs/defmt/pull/529
    • Don't print leading space when timestamp is absent by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/535
    • refactor the defmt-macros crate by @japaric in https://github.com/knurling-rs/defmt/pull/531
    • defmt-test: attribute test progress message to the test in question by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/534
    • snapshot-tests: Delete :? hint without impact by @Urhengulas in https://github.com/knurling-rs/defmt/pull/537
    • Fix wrong bit count in comment. by @Dirbaio in https://github.com/knurling-rs/defmt/pull/538
    • snapshot-tests: Test alternate hint for bitfields by @Urhengulas in https://github.com/knurling-rs/defmt/pull/542
    • CI: Temporarily drop backward-compatibility check by @Urhengulas in https://github.com/knurling-rs/defmt/pull/543
    • build.rs: Obtain version from macro; simplify by @Urhengulas in https://github.com/knurling-rs/defmt/pull/518
    • Add optional rzCOBS encoding+framing by @Dirbaio in https://github.com/knurling-rs/defmt/pull/539
    • Revert "build.rs: Obtain version from macro; simplify" by @Urhengulas in https://github.com/knurling-rs/defmt/pull/545
    • Update changelog by @Urhengulas in https://github.com/knurling-rs/defmt/pull/546
    • parser: Satisfy clippy by @Urhengulas in https://github.com/knurling-rs/defmt/pull/549
    • Separate "crate version" from "wire format version" by @Dirbaio in https://github.com/knurling-rs/defmt/pull/540
    • Display git version & date to introduction section by @justahero in https://github.com/knurling-rs/defmt/pull/551
    • Update change log by @justahero in https://github.com/knurling-rs/defmt/pull/553
    • Add impl for TryFromIntError by @newAM in https://github.com/knurling-rs/defmt/pull/556
    • Add impl for TryFromSliceError by @newAM in https://github.com/knurling-rs/defmt/pull/557
    • Update cortex-m-rt from 0.6 to 0.7 by @newAM in https://github.com/knurling-rs/defmt/pull/560
    • Removes call to fill in user survey from readme. by @BriocheBerlin in https://github.com/knurling-rs/defmt/pull/562
    • Remove unused cortex-m-rt in panic-probe by @Dirbaio in https://github.com/knurling-rs/defmt/pull/561
    • Make order of bitflags values deterministic by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/564
    • Encoding docs. by @Dirbaio in https://github.com/knurling-rs/defmt/pull/568
    • Support referring to Self in bitflags constants by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/570
    • defmt-decoder: impl FromStr for Encoding by @Urhengulas in https://github.com/knurling-rs/defmt/pull/572
    • defmt::flush() by @Urhengulas in https://github.com/knurling-rs/defmt/pull/550
    • qemu: Allow dead code by @Urhengulas in https://github.com/knurling-rs/defmt/pull/578
    • Fix typo in cfg of encoding-feature-compile_error! by @Urhengulas in https://github.com/knurling-rs/defmt/pull/577
    • defmt-rtt: fix check for blocking RTT by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/579
    • Add impl for alloc::Layout by @newAM in https://github.com/knurling-rs/defmt/pull/581
    • panic-probe v0.2.1 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/582
    • Remove outdated doc "you may only call write! once" by @Dirbaio in https://github.com/knurling-rs/defmt/pull/584
    • Refactor rtt [1/2] by @Urhengulas in https://github.com/knurling-rs/defmt/pull/574
    • tweak inline attributes to remove machine code duplication by @japaric in https://github.com/knurling-rs/defmt/pull/587
    • Implement Format for arrays of any length by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/589
    • Add xtask option to run a single snapshot test by name by @justahero in https://github.com/knurling-rs/defmt/pull/585
    • Remove timestamps from snapshot test by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/591
    • panic-probe: use UDF instruction on nested panics by @japaric in https://github.com/knurling-rs/defmt/pull/594
    • Structure defmt::export by @Urhengulas in https://github.com/knurling-rs/defmt/pull/580
    • Feature: Add defmt println! macro by @justahero in https://github.com/knurling-rs/defmt/pull/569
    • defmt-print: Recover from decoding-errors by @Urhengulas in https://github.com/knurling-rs/defmt/pull/598
    • xtask: add backward compability test by @japaric in https://github.com/knurling-rs/defmt/pull/592
    • target-side env_logger-like env filter by @japaric in https://github.com/knurling-rs/defmt/pull/519
    • only run snapshot & backcompat tests in dev mode by @japaric in https://github.com/knurling-rs/defmt/pull/600
    • Move crate defmt to defmt/ by @Urhengulas in https://github.com/knurling-rs/defmt/pull/601
    • Update change log with recent entries by @justahero in https://github.com/knurling-rs/defmt/pull/606
    • decoder: Fix that defmt::println! shows leading space when timestamps are disabled by @Urhengulas in https://github.com/knurling-rs/defmt/pull/608
    • Fix cargo doc-warnings by @Urhengulas in https://github.com/knurling-rs/defmt/pull/611
    • properly handle the off pseudo-level in presence of nested logging directives by @japaric in https://github.com/knurling-rs/defmt/pull/605
    • Bugfix: decoder breaks with pipe symbol by @justahero in https://github.com/knurling-rs/defmt/pull/614
    • document how to deal with backward compatibility breakage by @japaric in https://github.com/knurling-rs/defmt/pull/615
    • update user guide part of the book by @japaric in https://github.com/knurling-rs/defmt/pull/616
    • defmt-test: #[cfg(test)] the #[defmt_test::tests] module by @japaric in https://github.com/knurling-rs/defmt/pull/604
    • Migration guide v0.2.x to v0.3.0 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/547
    • defmt-print: Log if malformed frame gets skipped by @Urhengulas in https://github.com/knurling-rs/defmt/pull/610
    • Update all crates to rust edition 2021! 🎉 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/619
    • Tidy up by @Urhengulas in https://github.com/knurling-rs/defmt/pull/620
    • Add display hint to output u64 as ISO8601 time by @justahero in https://github.com/knurling-rs/defmt/pull/617
    • Readme Diagram: Replace duplicate defmt-itm with defmt-rtt by @jhbruhn in https://github.com/knurling-rs/defmt/pull/621
    • Update CHANGELOG.md by @Urhengulas in https://github.com/knurling-rs/defmt/pull/623
    • Support #[ignore] attribute in defmt_test by @justahero in https://github.com/knurling-rs/defmt/pull/618
    • Release defmt 0.3.0 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/624

    New Contributors

    • @eupn made their first contribution in https://github.com/knurling-rs/defmt/pull/513
    • @newAM made their first contribution in https://github.com/knurling-rs/defmt/pull/556
    • @jhbruhn made their first contribution in https://github.com/knurling-rs/defmt/pull/621

    Full Changelog: https://github.com/knurling-rs/defmt/compare/defmt-v0.2.3...defmt-v0.3.0

    Source code(tar.gz)
    Source code(zip)
  • defmt-v0.2.3(Nov 10, 2021)

    What's Changed

    • Revert "snapshot-tests: Temporarily pass --gc-sections to linker" by @Urhengulas in https://github.com/knurling-rs/defmt/pull/487
    • CI: Don't run on .md changes in PRs, except it's the book by @Urhengulas in https://github.com/knurling-rs/defmt/pull/448
    • Structure impl Formats into multiple files by @Urhengulas in https://github.com/knurling-rs/defmt/pull/488
    • xtask: fn utils::run_capturing_stdout by @Urhengulas in https://github.com/knurling-rs/defmt/pull/476
    • Bump build-dep semver to 1.0 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/496
    • macros: match unused vars if logging is disabled by @Urhengulas in https://github.com/knurling-rs/defmt/pull/497
    • defmt-macros v0.2.2 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/498
    • Structure lib by @Urhengulas in https://github.com/knurling-rs/defmt/pull/489
    • Illustrate structure of the defmt crates by @Urhengulas in https://github.com/knurling-rs/defmt/pull/499
    • book: fix leftover old formatting syntax; typos by @Lotterleben in https://github.com/knurling-rs/defmt/pull/500
    • Add alternate hint ('#') by @derekdreery in https://github.com/knurling-rs/defmt/pull/503
    • Xtask qemu overwrite by @derekdreery in https://github.com/knurling-rs/defmt/pull/504
    • CI: Don't install MacOS dependency which is included by default by @Urhengulas in https://github.com/knurling-rs/defmt/pull/510
    • impl Format for NonZero* by @Urhengulas in https://github.com/knurling-rs/defmt/pull/509
    • defmt 0.2.3, defmt-macros 0.2.3, defmt-parser 0.2.2, defmt-decoder 0.2.2, defmt-print 0.2.2 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/511

    Full Changelog: https://github.com/knurling-rs/defmt/compare/defmt-v0.2.2...defmt-v0.2.3

    Source code(tar.gz)
    Source code(zip)
  • defmt-v0.2.2(Nov 10, 2021)

    What's Changed

    • defmt v0.2.1 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/428
    • Simplify defmt_macros by @Urhengulas in https://github.com/knurling-rs/defmt/pull/431
    • Simplify defmt_parser by @Urhengulas in https://github.com/knurling-rs/defmt/pull/432
    • book: Document adapter types Display2Format, Debug2Format by @Urhengulas in https://github.com/knurling-rs/defmt/pull/437
    • defmt_decoder: Extend doc-comments and make Frame public by @Urhengulas in https://github.com/knurling-rs/defmt/pull/438
    • book: Remove migration page (git to 0.1) by @Urhengulas in https://github.com/knurling-rs/defmt/pull/439
    • Update dependencies by @Sh3Rm4n in https://github.com/knurling-rs/defmt/pull/440
    • defmt-test: Rm outdated setup steps by @Urhengulas in https://github.com/knurling-rs/defmt/pull/436
    • README: link Application setup for visibility by @Lotterleben in https://github.com/knurling-rs/defmt/pull/444
    • implement CI tests as xtask by @spookyvision in https://github.com/knurling-rs/defmt/pull/393
    • Add usage examples for Debug2Format, Display2Format by @Lotterleben in https://github.com/knurling-rs/defmt/pull/446
    • README.md: Document MSRV by @Urhengulas in https://github.com/knurling-rs/defmt/pull/447
    • Remove minimum timestamp alignment by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/453
    • Add netlify.toml by @Urhengulas in https://github.com/knurling-rs/defmt/pull/454
    • Defmt test v0.2.2 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/462
    • Support more items in #[tests] module by @Sh3Rm4n in https://github.com/knurling-rs/defmt/pull/441
    • firmware/qemu: bump linked-list-allocator dep by @japaric in https://github.com/knurling-rs/defmt/pull/468
    • impl<T> Format for {*const, *mut} T where T: Format + ?Sized by @Urhengulas in https://github.com/knurling-rs/defmt/pull/464
    • Xtask refactor by @Urhengulas in https://github.com/knurling-rs/defmt/pull/469
    • Refactor xtask vol. 2 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/470
    • Add leading zeros support. by @derekdreery in https://github.com/knurling-rs/defmt/pull/465
    • xtask: Simplify fn utils::run_command by @Urhengulas in https://github.com/knurling-rs/defmt/pull/471
    • xtask: decrease max_width to 105 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/474
    • xtask: Pretty-print all_errors by @Urhengulas in https://github.com/knurling-rs/defmt/pull/475
    • Implement Format for the core::{iter, ops, slice} structs. by @derekdreery in https://github.com/knurling-rs/defmt/pull/472
    • Impl Format for all Cows by @mattico in https://github.com/knurling-rs/defmt/pull/473
    • Disable logging calls via conditional compilation when all defmt features are disabled by @WasabiFan in https://github.com/knurling-rs/defmt/pull/477
    • add dbg! macro by @japaric in https://github.com/knurling-rs/defmt/pull/478
    • snapshot-tests: Temporarily pass --gc-sections to linker by @Urhengulas in https://github.com/knurling-rs/defmt/pull/482
    • Snapshot tests for core::{iter, ops, slice} structs by @Urhengulas in https://github.com/knurling-rs/defmt/pull/481
    • Bump defmt-test-macros, defmt-macros, defmt, defmt-test by @Urhengulas in https://github.com/knurling-rs/defmt/pull/480
    • Bump defmt-parser, defmt-macros, defmt-decoder, defmt-print by @Urhengulas in https://github.com/knurling-rs/defmt/pull/484
    • Bump defmt-print by @Urhengulas in https://github.com/knurling-rs/defmt/pull/485

    New Contributors

    • @WasabiFan made their first contribution in https://github.com/knurling-rs/defmt/pull/477

    Full Changelog: https://github.com/knurling-rs/defmt/compare/defmt-v0.2.1...defmt-v0.2.2

    Source code(tar.gz)
    Source code(zip)
  • defmt-v0.2.1(Nov 10, 2021)

    What's Changed

    • defmt 0.2.0 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/398
    • Fix pr-links in Changelog.md by @Urhengulas in https://github.com/knurling-rs/defmt/pull/399
    • defmt_itm: Fix typo by @Urhengulas in https://github.com/knurling-rs/defmt/pull/400
    • qemu-run: allow ignoring the defmt version by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/401
    • Add back the backwards-compatiblity check by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/403
    • add knurling logo to API docs by @japaric in https://github.com/knurling-rs/defmt/pull/410
    • defmt-test/README.md: extend intro by @Lotterleben in https://github.com/knurling-rs/defmt/pull/414
    • Disable unstable-test on docs.rs by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/413
    • Make elf2table::Location public by @mattico in https://github.com/knurling-rs/defmt/pull/415
    • Defmt test macros v0.2.0 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/418
    • CI: add nightly run by @Lotterleben in https://github.com/knurling-rs/defmt/pull/424
    • defmt-test: update README by @Lotterleben in https://github.com/knurling-rs/defmt/pull/421
    • book: Drop v0.2.0 note by @Urhengulas in https://github.com/knurling-rs/defmt/pull/427

    Full Changelog: https://github.com/knurling-rs/defmt/compare/defmt-v0.2.0...defmt-v0.2.1

    Source code(tar.gz)
    Source code(zip)
  • defmt-v0.2.0(Nov 10, 2021)

    What's Changed

    • Enable test-only code via feature instead of target_arch. by @Dirbaio in https://github.com/knurling-rs/defmt/pull/291
    • Allow use statements in defmt-test by @Sh3Rm4n in https://github.com/knurling-rs/defmt/pull/294
    • Implement i128 and u128. by @BriocheBerlin in https://github.com/knurling-rs/defmt/pull/284
    • Allow skipping the defmt version check by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/296
    • defmt-test: improve output formatting by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/297
    • Test defmt-test by @Sh3Rm4n in https://github.com/knurling-rs/defmt/pull/299
    • CI: fix nightly build by @japaric in https://github.com/knurling-rs/defmt/pull/301
    • add bors by @japaric in https://github.com/knurling-rs/defmt/pull/303
    • Use primitive formatting for primitive references by @Sh3Rm4n in https://github.com/knurling-rs/defmt/pull/300
    • impl Format for char by @japaric in https://github.com/knurling-rs/defmt/pull/304
    • make defmt attributes forward input attributes by @japaric in https://github.com/knurling-rs/defmt/pull/293
    • Change Format::format to take Formatter argument by value by @BriocheBerlin in https://github.com/knurling-rs/defmt/pull/305
    • derive(Format): Support more than 256 variants by @Sh3Rm4n in https://github.com/knurling-rs/defmt/pull/302
    • write! macro: remove runtime check by @japaric in https://github.com/knurling-rs/defmt/pull/310
    • remove unused snapshot file by @japaric in https://github.com/knurling-rs/defmt/pull/311
    • derive(Format): better encode str fields by @japaric in https://github.com/knurling-rs/defmt/pull/312
    • compile-fail test new Formatter move semantics by @japaric in https://github.com/knurling-rs/defmt/pull/308
    • add display hints e.g. :x, :b, :a by @japaric in https://github.com/knurling-rs/defmt/pull/313
    • update UI tests by @japaric in https://github.com/knurling-rs/defmt/pull/325
    • Merge I128/Ixx and U128/Uxx variants by @Sh3Rm4n in https://github.com/knurling-rs/defmt/pull/323
    • Always respect DisplayHint::Ascii for byte slices by @Sh3Rm4n in https://github.com/knurling-rs/defmt/pull/321
    • document safety of implementation detail functions by @japaric in https://github.com/knurling-rs/defmt/pull/329
    • Fix clippy lints by @Sh3Rm4n in https://github.com/knurling-rs/defmt/pull/324
    • impl Format for PhantomData by @mattico in https://github.com/knurling-rs/defmt/pull/327
    • More compile fail tests by @BriocheBerlin in https://github.com/knurling-rs/defmt/pull/331
    • Hide Formatter's inner field by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/333
    • Fix dead intra-doc-link in parser by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/334
    • Improve Format trait docs by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/332
    • add defmt-itm by @japaric in https://github.com/knurling-rs/defmt/pull/335
    • add defmt-logger and defmt-print by @japaric in https://github.com/knurling-rs/defmt/pull/338
    • Improve diagnostics on double write! by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/337
    • Streaming core::fmt adapters by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/340
    • Make leb64 encoding fully safe by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/339
    • Don't call finalize in write! by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/342
    • Customizable timestamps by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/343
    • Avoid 64-bit arithmetic in LEB encoding by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/345
    • Document current format parameter syntax by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/347
    • panic-probe: use Display2Format adapter by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/350
    • Cleanup defmt tags by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/351
    • Clarify docs on Write::write by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/355
    • f64 support by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/354
    • Do not display full version with --help by @Javier-varez in https://github.com/knurling-rs/defmt/pull/352
    • fix issue #336 by @spookyvision in https://github.com/knurling-rs/defmt/pull/357
    • Fix or allow all clippy warnings by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/361
    • add a test for #336 by @spookyvision in https://github.com/knurling-rs/defmt/pull/363
    • split workspace in two by @japaric in https://github.com/knurling-rs/defmt/pull/364
    • Satisfy clippy by @Urhengulas in https://github.com/knurling-rs/defmt/pull/367
    • Move bors.toml to .github/ by @Urhengulas in https://github.com/knurling-rs/defmt/pull/369
    • Add link to git version of the book by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/371
    • Fix CI success conditions by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/374
    • Add more data to Cargo.toml by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/373
    • Update printers.md by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/372
    • make that link hyper by @spookyvision in https://github.com/knurling-rs/defmt/pull/379
    • defmt-itm: Raise compile error on armv6m by @Urhengulas in https://github.com/knurling-rs/defmt/pull/368
    • Merge crates "elf2table" and "logger" into "decoder" by @spookyvision in https://github.com/knurling-rs/defmt/pull/380
    • defmt-test: support returning Result from tests by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/377
    • impl Format for Infallible by @japaric in https://github.com/knurling-rs/defmt/pull/382
    • defmt-test: Modify attributes in place and handle #[cfg] by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/383
    • Pin unstable path dependencies by @Urhengulas in https://github.com/knurling-rs/defmt/pull/384
    • Skip alloc of additional data structure by @Urhengulas in https://github.com/knurling-rs/defmt/pull/385
    • Make defmt-logger more configurable, remove probe-run strings by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/376
    • CI: bump timeout to 20 minutes by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/387
    • Tidy defmt-decoder by @Urhengulas in https://github.com/knurling-rs/defmt/pull/386
    • Update decoder dependencies by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/389
    • 348 format for duration by @Urhengulas in https://github.com/knurling-rs/defmt/pull/391
    • Tidy up decoder 2 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/392
    • defmt_decoder: Bump dep object to 0.23.0 by @Urhengulas in https://github.com/knurling-rs/defmt/pull/396
    • Revert "defmt_decoder: Bump dep object to 0.23.0" by @Urhengulas in https://github.com/knurling-rs/defmt/pull/397

    New Contributors

    • @Javier-varez made their first contribution in https://github.com/knurling-rs/defmt/pull/352

    Full Changelog: https://github.com/knurling-rs/defmt/compare/defmt-v0.1.3...defmt-v0.2.0

    Source code(tar.gz)
    Source code(zip)
  • defmt-v0.1.3(Nov 10, 2021)

    What's Changed

    • CHANGELOG.md: fix links by @Lotterleben in https://github.com/knurling-rs/defmt/pull/283
    • Book: Link to defmt-rtt and defmt-semihosting crates by @dbrgn in https://github.com/knurling-rs/defmt/pull/288
    • fix compilation to ARMv6-M with +alloc by @japaric in https://github.com/knurling-rs/defmt/pull/290

    New Contributors

    • @dbrgn made their first contribution in https://github.com/knurling-rs/defmt/pull/288

    Full Changelog: https://github.com/knurling-rs/defmt/compare/defmt-v0.1.2...defmt-v0.1.3

    Source code(tar.gz)
    Source code(zip)
  • defmt-v0.1.1(Nov 10, 2021)

    What's Changed

    • Decoder, printer & float support by @japaric in https://github.com/knurling-rs/defmt/pull/1
    • turn x86 in a test-only target by @japaric in https://github.com/knurling-rs/defmt/pull/2
    • minimal QEMU example by @japaric in https://github.com/knurling-rs/defmt/pull/3
    • Set up GitHub Actions by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/6
    • internp: fix 'section specifier' compiling err on mac os by @Lotterleben in https://github.com/knurling-rs/defmt/pull/4
    • add library to parse ELF metadata into a interner table by @japaric in https://github.com/knurling-rs/defmt/pull/8
    • Extend decoder and printer to handle slices, strings and bools by @Lotterleben in https://github.com/knurling-rs/defmt/pull/5
    • refactor encoding tests by @japaric in https://github.com/knurling-rs/defmt/pull/11
    • add qemu-run by @japaric in https://github.com/knurling-rs/defmt/pull/12
    • Add parser support for bitfields by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/13
    • Compress bools more effectively by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/21
    • README.md: mention :str in user guide by @Lotterleben in https://github.com/knurling-rs/defmt/pull/22
    • Doc: explicitly note qemu dependency; rm TODOs by @Lotterleben in https://github.com/knurling-rs/defmt/pull/23
    • macros. implement other logging levels by @Lotterleben in https://github.com/knurling-rs/defmt/pull/25
    • Add book infra by @jamesmunns in https://github.com/knurling-rs/defmt/pull/28
    • binfmt RTT integration by @japaric in https://github.com/knurling-rs/defmt/pull/24
    • macros: rm separate parse function & tests by @Lotterleben in https://github.com/knurling-rs/defmt/pull/26
    • macro: fix handling of positional arguments by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/34
    • qemu-run: pass -monitor none to fix Ctrl+C by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/40
    • add and document #[global_logger] by @japaric in https://github.com/knurling-rs/defmt/pull/35
    • Disable nightly, macOS, and Windows CI builds by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/42
    • Add some rustdoc docs and examples by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/45
    • Parse trailing commas in most macros by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/47
    • use timestamp macro in log example by @japaric in https://github.com/knurling-rs/defmt/pull/48
    • turn README into an mdbook by @japaric in https://github.com/knurling-rs/defmt/pull/46
    • add panic-probe by @japaric in https://github.com/knurling-rs/defmt/pull/49
    • Move leb64 encoding and tests to its own file by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/50
    • Fix/Implement non-interned string encoding by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/60
    • Derive fixes and tests by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/58
    • Encode and format slices by @Lotterleben in https://github.com/knurling-rs/defmt/pull/68
    • ci: set a 10 minute timeout by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/69
    • Support de/encoding interned strings by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/67
    • Encode and format f32 by @Lotterleben in https://github.com/knurling-rs/defmt/pull/70
    • Implement fixed-size arrays by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/71
    • Support isize and usize by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/72
    • binfmt: warn(missing_docs) by @japaric in https://github.com/knurling-rs/defmt/pull/76
    • wire format is still unstable by @japaric in https://github.com/knurling-rs/defmt/pull/77
    • Extend formatters: implement boolean compression by @Lotterleben in https://github.com/knurling-rs/defmt/pull/65
    • Add missing parentheses around format args by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/81
    • Rewrite the parser to yield fragments instead of parameters by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/80
    • ci: build firmware by @japaric in https://github.com/knurling-rs/defmt/pull/89
    • Fixes from the stream testing by @jamesmunns in https://github.com/knurling-rs/defmt/pull/90
    • Stuff everything into the same Cargo workspace by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/91
    • future-proof: remove write! from the public API by @japaric in https://github.com/knurling-rs/defmt/pull/83
    • [T] support by @japaric in https://github.com/knurling-rs/defmt/pull/92
    • add probe-run docs by @japaric in https://github.com/knurling-rs/defmt/pull/94
    • Reject hard-float ABI ELFs by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/96
    • do not optimize the dev profile by @japaric in https://github.com/knurling-rs/defmt/pull/99
    • implement enum decoder by @japaric in https://github.com/knurling-rs/defmt/pull/98
    • Encode fmt bitfields by @Lotterleben in https://github.com/knurling-rs/defmt/pull/84
    • Set publish = false for a few crates by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/105
    • probe-run: add --list-chips flag by @Lotterleben in https://github.com/knurling-rs/defmt/pull/110
    • probe-run: do not return prematurely when there are no log messages by @Lotterleben in https://github.com/knurling-rs/defmt/pull/107
    • CI: run mdbook tests by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/109
    • version binfmt wire format by @japaric in https://github.com/knurling-rs/defmt/pull/103
    • opt-in binfmt decoding by @japaric in https://github.com/knurling-rs/defmt/pull/112
    • Fix log levels by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/114
    • automatically truncate larger integer types passed to bitfields by @Lotterleben in https://github.com/knurling-rs/defmt/pull/113
    • rename to defmt by @japaric in https://github.com/knurling-rs/defmt/pull/117
    • remove probe-run by @japaric in https://github.com/knurling-rs/defmt/pull/116
    • Fix bool unpacking with nested structs by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/118
    • Use object crate instead of xmas-elf by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/120
    • bool/Format: conditionally include the tag by @japaric in https://github.com/knurling-rs/defmt/pull/121
    • Improve the version mismatch check by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/119
    • Kill Qemu via destructor by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/122
    • derive: properly handle generic structs and enums by @japaric in https://github.com/knurling-rs/defmt/pull/125
    • elf2table: return None if .defmt is missing by @japaric in https://github.com/knurling-rs/defmt/pull/128
    • RTT fixes by @japaric in https://github.com/knurling-rs/defmt/pull/129
    • author, license info + README update by @japaric in https://github.com/knurling-rs/defmt/pull/127
    • halt :[?] optimization when an enum is encountered by @japaric in https://github.com/knurling-rs/defmt/pull/123
    • checks that debug, error, info, trace, warn ranges don't overlap by @benmkw in https://github.com/knurling-rs/defmt/pull/130
    • linker-script: exhaustively search for defmt symbols by @japaric in https://github.com/knurling-rs/defmt/pull/134
    • Fix the region overlap check by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/139
    • Look for quoted and unquoted version symbol by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/138
    • improve parser errors for missing : in params by @birkenfeld in https://github.com/knurling-rs/defmt/pull/143
    • Default zero timestamp by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/147
    • extract location info (file+line number) from DWARF by @japaric in https://github.com/knurling-rs/defmt/pull/148
    • add Table::indices by @japaric in https://github.com/knurling-rs/defmt/pull/150
    • Fix argument/acquire evaluation order by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/153
    • Prefix all package names with defmt- by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/154
    • Improve index collision error message by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/157
    • Add some utility functions to Frame by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/158
    • fix impl Format for Str (interned string) by @japaric in https://github.com/knurling-rs/defmt/pull/166
    • add module path to location info by @japaric in https://github.com/knurling-rs/defmt/pull/167
    • elf2table: discard loc-info from linker GC-ed symbols by @japaric in https://github.com/knurling-rs/defmt/pull/169
    • decoder: filter indices to only include log statements by @japaric in https://github.com/knurling-rs/defmt/pull/170
    • CI: run qemu examples by @Lotterleben in https://github.com/knurling-rs/defmt/pull/27
    • Distinguish missing from corrupted data by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/155
    • CI: reenable macos, windows and nightlies by @Lotterleben in https://github.com/knurling-rs/defmt/pull/131
    • defmt-rtt: add non-blocking mode; set it as the default by @japaric in https://github.com/knurling-rs/defmt/pull/174
    • derive: fix handling of generic bounds by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/178
    • throw (cargo) error on version mismatch by @Lotterleben in https://github.com/knurling-rs/defmt/pull/190
    • store raw symbols in decoder::Table by @japaric in https://github.com/knurling-rs/defmt/pull/192
    • check defmt version before demangling symbols by @japaric in https://github.com/knurling-rs/defmt/pull/193
    • Structured symbol names by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/175
    • Revert "Structured symbol names" by @japaric in https://github.com/knurling-rs/defmt/pull/194
    • Structured symbol names by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/195
    • make version check compatible with crates.io releases by @japaric in https://github.com/knurling-rs/defmt/pull/196
    • Add support for printing i64 and u64. by @Dirbaio in https://github.com/knurling-rs/defmt/pull/198
    • Allow printing '@' character. by @Dirbaio in https://github.com/knurling-rs/defmt/pull/197
    • impl Format for str by @Dirbaio in https://github.com/knurling-rs/defmt/pull/200
    • impl Format for alloc types (Box & co) by @Dirbaio in https://github.com/knurling-rs/defmt/pull/201
    • remove common crate by @Lotterleben in https://github.com/knurling-rs/defmt/pull/191
    • impl Format for tuples by @Dirbaio in https://github.com/knurling-rs/defmt/pull/203
    • Hide features by @Lotterleben in https://github.com/knurling-rs/defmt/pull/202
    • Skip empty symbol names while attempting to parse json by @MathiasKoch in https://github.com/knurling-rs/defmt/pull/204
    • enhance bitfield compression by @Lotterleben in https://github.com/knurling-rs/defmt/pull/184
    • make parser::Level public by @Lotterleben in https://github.com/knurling-rs/defmt/pull/207
    • implement Format arrays, like {:[?;16]} by @Dirbaio in https://github.com/knurling-rs/defmt/pull/211
    • update docs by @japaric in https://github.com/knurling-rs/defmt/pull/212
    • don't try to parse _defmt_version_ as JSON by @japaric in https://github.com/knurling-rs/defmt/pull/215
    • explicitly place the .defmt section at address 0 by @japaric in https://github.com/knurling-rs/defmt/pull/216
    • Hide all Formatter methods by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/218
    • Update #[timestamp] docs by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/221
    • CI improvements by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/219
    • Fix defmt docs.rs metadata by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/220
    • Add snapshot testing for the QEMU test by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/222
    • elf2table: return Ok(None) when defmt is not used by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/224
    • Fix encoding of single-variant enums by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/226
    • Fix encoding of usize/isize slices by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/227
    • Derive and Decoder fixes around bools by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/228
    • Fix rustdoc-args by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/231
    • Handle crates.io versions in decoder build script by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/230
    • Improve defmt rustdoc by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/232
    • touch up crate level docs by @japaric in https://github.com/knurling-rs/defmt/pull/234
    • misc edits to the book by @japaric in https://github.com/knurling-rs/defmt/pull/235
    • remove old panic-probe copy by @japaric in https://github.com/knurling-rs/defmt/pull/233
    • rm firmware/nrf52 by @japaric in https://github.com/knurling-rs/defmt/pull/237
    • Unexport the write! macro by @jonas-schievink in https://github.com/knurling-rs/defmt/pull/238
    • add crate metadata & crates.io dependencies by @japaric in https://github.com/knurling-rs/defmt/pull/239
    • decoder: make DEFMT_VERSION public by @japaric in https://github.com/knurling-rs/defmt/pull/241
    • book: how to migrate from git defmt to crates.io defmt by @japaric in https://github.com/knurling-rs/defmt/pull/240
    • put migration doc under the user guide section by @japaric in https://github.com/knurling-rs/defmt/pull/243
    • Import panic-probe crate by @japaric in https://github.com/knurling-rs/defmt/pull/244
    • improve defmt version mismatch diagnostics by @japaric in https://github.com/knurling-rs/defmt/pull/242
    • panic-probe: add license files by @japaric in https://github.com/knurling-rs/defmt/pull/247
    • panic-probe: fix repo url in crate metadata by @japaric in https://github.com/knurling-rs/defmt/pull/245
    • remove profile overrides by @japaric in https://github.com/knurling-rs/defmt/pull/246
    • Import defmt-test crate by @japaric in https://github.com/knurling-rs/defmt/pull/248
    • defmt-test: update README by @japaric in https://github.com/knurling-rs/defmt/pull/261
    • make crates.io version not depend on the git tool by @japaric in https://github.com/knurling-rs/defmt/pull/259

    New Contributors

    • @jamesmunns made their first contribution in https://github.com/knurling-rs/defmt/pull/28
    • @benmkw made their first contribution in https://github.com/knurling-rs/defmt/pull/130
    • @birkenfeld made their first contribution in https://github.com/knurling-rs/defmt/pull/143
    • @MathiasKoch made their first contribution in https://github.com/knurling-rs/defmt/pull/204

    Full Changelog: https://github.com/knurling-rs/defmt/commits/defmt-v0.1.1

    Source code(tar.gz)
    Source code(zip)
  • defmt-v0.1.0(Nov 10, 2021)

  • defmt-v0.1.2(Nov 10, 2021)

Owner
Knurling
Get a handle on bare metal Rust
Knurling
Logging implementation for Rust

log A Rust library providing a lightweight logging facade. log documentation A logging facade provides a single logging API that abstracts over the ac

The Rust Programming Language 1.6k Dec 29, 2022
Structured, contextual, extensible, composable logging for Rust

Getting started Introduction FAQ Crate list slog-rs - The Logging for Rust Introduction (please read) slog is an ecosystem of reusable components for

slog-rs 1.4k Jan 3, 2023
A logging library for eBPF programs.

aya-log - a logging library for eBPF programs Overview aya-log is a logging library for eBPF programs written using aya. Think of it as the log crate

null 18 Oct 13, 2022
Task-based logging for rust

task_log task_log is a task-based logger. Installing Just add task_log = 0.1.4 to your Cargo.toml's dependency section. Example Let's get right to the

Matt Gleich 2 Feb 28, 2022
💬 A couple of functions to make logging in Rust easier.

Rust logging ⛔ ?? A couple of functions to make logging in Rust easier. Installation ?? Just add the code of code.rs to your project. You can copy/pas

Skwal 2 Apr 7, 2022
A highly customizable Changelog Generator that follows Conventional Commit specifications ⛰️

git-cliff can generate changelog files from the Git history by utilizing conventional commits as well as regex-powered custom parsers. The changelog template can be customized with a configuration file to match the desired format.

Orhun Parmaksız 5k Dec 30, 2022
A highly configurable logging framework for Rust

log4rs log4rs is a highly configurable logging framework modeled after Java's Logback and log4j libraries. Warning If you are using the file rotation

null 753 Jan 8, 2023
Gomez - A pure Rust framework and implementation of (derivative-free) methods for solving nonlinear (bound-constrained) systems of equations

Gomez A pure Rust framework and implementation of (derivative-free) methods for solving nonlinear (bound-constrained) systems of equations. Warning: T

Datamole 19 Dec 24, 2022
Quickly set up a `probe-run` + `defmt` + `flip-link` embedded project

app-template Quickly set up a probe-run + defmt + flip-link embedded project Dependencies 1. flip-link: $ cargo install flip-link 2. probe-run: $ # ma

Knurling 201 Dec 29, 2022
Log defmt messages over the serial port.

defmt-serial A defmt target for logging over a serial port. Messages can e.g. be read using socat and passed through defmt-print, see example-artemis

Gaute Hope 10 Oct 5, 2022
Easy-to-use grammar-based black-box fuzzer. Has found dozens of bugs in important targets like Clang, Deno, and rustc.

tree-crasher tree-crasher is an easy-to-use grammar-based black-box fuzzer. It parses a number of input files using tree-sitter grammars, and produces

Langston Barrett 5 Mar 28, 2023
A highly efficient daemon for streaming data from Kafka into Delta Lake

kafka-delta-ingest The kafka-delta-ingest project aims to build a highly efficient daemon for streaming data through Apache Kafka into Delta Lake. Thi

Delta Lake 173 Dec 28, 2022
A highly efficient daemon for streaming data from Kafka into Delta Lake

A highly efficient daemon for streaming data from Kafka into Delta Lake

Delta Lake 172 Dec 23, 2022
⚡️Highly efficient data and string formatting library for Rust.

⚡️Highly efficient data and string formatting library for Rust. ?? Overview Pad and format string slices and generic vectors efficiently with minimal

Firelink Data 3 Dec 21, 2023
A Constrained Application Protocol(CoAP) library implemented in Rust.

coap-rs A fast and stable Constrained Application Protocol(CoAP) library implemented in Rust. Features: CoAP core protocol RFC 7252 CoAP Observe optio

Covertness 170 Dec 19, 2022
Linearly Constrained Separable Optimization

LCSO (Linearly Constrained Separable Optimization) Authors The original algorithms here were developed by Nicholas Moehle, and this project was author

BlackRock 28 Oct 1, 2022
Incremental computation through constrained memoization.

comemo Incremental computation through constrained memoization. [dependencies] comemo = "0.1" A memoized function caches its return values so that it

Typst 37 Dec 15, 2022
A highly scalable MySQL Proxy framework written in Rust

mysql-proxy-rs An implementation of a MySQL proxy server built on top of tokio-core. Overview This crate provides a MySQL proxy server that you can ex

AgilData 175 Dec 19, 2022
Engine / framework for creating highly customizable and user modable action RPG's

Rust RPG Toolkit PLEASE NOTE: this in early and very heavy development. API is subject to constant change, as it has newly transitioned from being a g

Ole A. Sjo Fasting 58 Dec 5, 2022
Bytewax is an open source Python framework for building highly scalable dataflows.

Bytewax Bytewax is an open source Python framework for building highly scalable dataflows. Bytewax uses PyO3 to provide Python bindings to the Timely

Bytewax 289 Jan 6, 2023