probe-run is a custom Cargo runner that transparently runs Rust firmware on an embedded device

Overview

probe-run

Runs embedded programs just like native ones

probe-run is a custom Cargo runner that transparently runs Rust firmware on an embedded device.

probe-run is powered by probe-rs and thus supports all the devices and probes supported by probe-rs does.

Features

  • Acts as a Cargo runner, integrating into cargo run.
  • Displays program output streamed from the device via RTT.
  • Exits the firmware and prints a stack backtrace on breakpoints.

Installation

To install probe-run, use cargo install probe-run.

On Linux, you might have to install libudev and libusb from your package manager before installing probe-run.

# ubuntu
$ sudo apt install -y libusb-1.0-0-dev libudev-dev

# fedora
$ sudo dnf install -y libusbx-devel systemd-devel

Setup

1. Set the Cargo runner

The recommend way to use probe-run is to set as the Cargo runner of your application.

Add these two lines to your Cargo configuration file (.cargo/config.toml) and set the particular --chip value for your target. In this case it is nRF52840_xxAA for the nRF52840:

[target.'cfg(all(target_arch = "arm", target_os = "none"))']
runner = "probe-run --chip nRF52840_xxAA"
#                          ^^^^^^^^^^^^^

To list all supported chips run probe-run --list-chips.

1.1 Env variable

To support multiple devices, or permit overriding default behavior, you may prefer to:

  1. set the ${PROBE_RUN_CHIP} environment variable, and
  2. set runner (or CARGO_TARGET_${TARGET_ARCH}_RUNNER) to probe-run:
[target.'cfg(all(target_arch = "arm", target_os = "none"))']
runner = "probe-run"

1.2 Multiple probes

If you have several probes connected, you can specify which one to use by adding the --probe option to the runner or setting the ${PROBE_RUN_PROBE} environment variable with a value containing either ${VID}:${PID} or ${VID}:${PID}:${SERIAL}:

// --probe
$ probe-run --probe '0483:3748' --chip ${PROBE_RUN_CHIP}

// PROBE_RUN_PROBE
$ PROBE_RUN_PROBE='1366:0101:123456' cargo run

To list all connected probes, run probe-run --list-probes.

2. Enable debug info

Next check that debug info is enabled for all profiles. If you are using the cortex-m-quickstart template then this is already the case. If not check or add these lines to Cargo.toml.

[dependencies]
...
panic-probe = { version = "0.2", features = ["print-rtt"] }

# Cargo.toml
[profile.dev]
debug = 1 # default is `true`; not needed if not already overridden

[profile.release]
debug = 1 # default is `false`; using `true` is also OK as symbols reside on the host, not the target

3. Look out for old dependencies

The cortex-m dependency must be version 0.6.3 or newer. Older versions are not supported. Check your Cargo.lock for old versions. Run cargo update to update the cortex-m dependency if an older one appears in Cargo.lock.

4. Run

You are all set. You can now run your firmware using cargo run. For example,

use cortex_m::asm;
use cortex_m_rt::entry;
use panic_probe as _;
use rtt_target::rprintln;

#[entry]
fn main() -> ! {
    rtt_init_print!(); // You may prefer to initialize another way    
    rprintln!("Hello, world!");
    loop { asm::bkpt() }
}

would output

$ cargo run --bin hello
    Finished dev [unoptimized + debuginfo] target(s) in 0.07s
     Running `probe-run --chip nRF52840_xxAA target/thumbv7em-none-eabihf/debug/hello`
  (HOST) INFO  flashing program (30.22 KiB)
  (HOST) INFO  success!
────────────────────────────────────────────────────────────────────────────────
INFO:hello -- Hello, world!
────────────────────────────────────────────────────────────────────────────────
  (HOST) INFO  exiting because the device halted.
To see the backtrace at the exit point repeat this run with
`probe-run --chip nRF52840_xxAA target/thumbv7em-none-eabihf/debug/hello --force-backtrace`

Stack backtraces

When the device raises a hard fault exception, indicating e.g. a panic or a stack overflow, probe-run will print a backtrace and exit with a non-zero exit code.

This backtrace follows the format of the std backtraces you get from std::panic! but includes lines to indicate where an exception/interrupt occurred.

#![no_main]
#![no_std]

use cortex_m::asm;
#[entry]
fn main() -> ! {
    // trigger a hard fault exception with the UDF instruction.
    asm::udf()
}
    Finished dev [optimized + debuginfo] target(s) in 0.04s
     Running `probe-run --chip nRF52840_xxAA target/thumbv7em-none-eabihf/debug/hard-fault`
  (HOST) INFO  flashing program (30.08 KiB)
  (HOST) INFO  success!
────────────────────────────────────────────────────────────────────────────────
stack backtrace:
   0: HardFaultTrampoline
      
   
   1: __udf
   2: cortex_m::asm::udf
        at /<...>/cortex-m-0.6.4/src/asm.rs:104
   3: panic::__cortex_m_rt_main
        at src/bin/hard-fault.rs:12
   4: main
        at src/bin/hard-fault.rs:8
   5: ResetTrampoline
        at /<...>3/cortex-m-rt-0.6.13/src/lib.rs:547
   6: Reset
        at /<...>/cortex-m-rt-0.6.13/src/lib.rs:550

If we look at the return code emitted by this cargo run, we'll see that it is non-0:

$ echo $?
134

⚠️ NOTE when you run your application with probe-run, the HardFault handler (default or user-defined) will NOT be executed.

Backtrace options

--backtrace

The --backtrace flag is optional and can get passed the following values:

  • --backtrace=always - forced backtrace (if you'd like to see a backtrace at the end of successful program run)
  • --backtrace=never - suppresed backtrace
  • --backtrace=auto - default, shows a backtrace if the program panics or the stack overflows

Run it like this (example for a forced backtrace):

$ cargo run --bin hello --backtrace=always

--backtrace-limit

The --backtrace-limit flag is optional and defaults to 50. It is possible to set any number.

--backtrace-limit=0 is accepted and means "no limit".

To show a shortened backtrace showing 5 frames, run:

$ cargo run --bin panic --backtrace-limit=5

Note: if --backtrace=never is set, setting --backtrace-limit has no effect.

Troubleshooting

"Error: no probe was found."

First, check your data cable:

  • make sure that it is connected to the right port on your development board
  • make sure that you are using a data cable– some cables are built for charging only! When in doubt, try using a different cable.

If this doesn't resolve the issue, try the following:

[Linux only] udev rules haven't been set

Check if your device shows up in lsusb:

$ lsusb
Bus 001 Device 008: ID 1366:1015 SEGGER J-Link

If your device shows up like in the example, skip to the next troubleshooting section

If it doesn't show up, you need to give your system permission to access the device as a non-root user so that probe-run can find your device.

In order to grant these permissions, you'll need to add a new set of udev rules.

To learn how to do this for the nRF52840 Development Kit, check out the installation instructions in our embedded training materials.

afterwards, your device should show up in probe-run --list-probes similar to this:

$ probe-run --list-probes
The following devices were found:
[0]: J-Link (J-Link) (VID: 1366, PID: 1015, Serial: 
   
    , JLink)
   

No external or on-board debugger present

To use probe-run you need a "probe" (also known as "debugger") that sits between your PC and the microcontroller.

Most development boards, especially the bigger ones, have a probe "on-board": If the product description of your board mentions something like a J-Link or ST-Link on-board debugger you're good to go. With these boards, all you need to do is connect your PC to the dev board using a USB cable you are all set to use probe-run!

If this is not the case for your board, check in the datasheet if it exposes exposes SWD or JTAG pins. If they are exposed, you can connect a "stand alone" probe device to the microcontroller and then connect the probe to your PC via USB. Some examples of stand alone probes are: the ST-Link and the J-Link.

Note that this may involve some soldering if your board does not come with a pre-attached header to plug your debugger into.

Error: RTT up channel 0 not found

This may instead present as Error: RTT control block not found in target memory.

Your code, or a library you're using (e.g. RTIC) might be putting your CPU to sleep when idle. You can verify that this is the problem by busy looping instead of sleeping. When using RTIC, this can be achieved by adding an idle handler to your app:

#[idle]
fn idle(_ctx: idle::Context) -> ! {
     loop {}
}

Assuming you'd like to still sleep in order to save power, you need to configure your microcontroller so that RTT can still be handled even when the CPU is sleeping. How to do this varies between microcontrollers.

On an STM32G0 running RTIC it can be done by amending your init function to set the dmaen bit on RCC.ahbenr. e.g.:

#[init]
fn init(ctx: init::Context) -> init::LateResources {
     ctx.device.RCC.ahbenr.write(|w| w.dmaen().set_bit());
     ...
}

defmt version mismatch

end-user

Follow the instructions in the error message to resolve the mismatch.

developer

If you are hacking around with probe-run, you can disable the version check by setting the PROBE_RUN_IGNORE_VERSION environment variable to true or 1 at runtime.

Developer Information

running your locally modified probe-run

For easier copy-paste-ability, here's an example how to try out your local probe_run modifications.

$ cd probe-run/
$ PROBE_RUN_IGNORE_VERSION=1 cargo run -- --chip nRF52840_xxAA --backtrace-limit=10 hello
  ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ                                   ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ˆˆˆˆˆ
  environment variables                                        extra flags             binary to be
  (optional)                                                   (optional)              flashed & run

running snapshot tests

To check whether your change has altered probe-run in unexpected ways, please run the snapshot tests in tests before opening a PR if at all possible.

You can do so by connecting a nrf52840 Development Kit and running

$ cargo test -- --ignored

Support Us

probe-run 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
  • Could not compile probe-run v0.1.6 on macOS 10.15.7

    Could not compile probe-run v0.1.6 on macOS 10.15.7

    So far I have installed probe-run without problems on macOS (x86_64) with:

    cargo install --git https://github.com/knurling-rs/probe-run --branch main --features defmt
    

    Now I tried to install release version with:

    cargo install probe-run
    

    And got following error:

      = note: Undefined symbols for architecture x86_64:
                "_NSAppKitVersionNumber", referenced from:
                    _hid_init in libhidapi-6c82a0d52f552184.rlib(hid.o)
                    _hid_enumerate in libhidapi-6c82a0d52f552184.rlib(hid.o)
                    _hid_open_path in libhidapi-6c82a0d52f552184.rlib(hid.o)
              ld: symbol(s) not found for architecture x86_64
              clang: error: linker command failed with exit code 1 (use -v to see invocation)
    
    
    error: aborting due to previous error
    
    error: failed to compile `probe-run v0.1.6 (https://github.com/knurling-rs/probe-run?branch=main#013c0bd3)`, intermediate artifacts can be found at `/var/folders/5b/jlxfj70x1fb_n2l6qh21xxfh0000gn/T/cargo-installcEziMp`
    
    Caused by:
      could not compile `probe-run`.
    
    To learn more, run the command again with --verbose.
    

    Full log

    Rust version:

    rustc 1.46.0 (04488afe3 2020-08-24)
    
    opened by andresv 16
  • UDF and HardFault do not trigger an exception stopping probe-run on thumbv6m-none-eabi.

    UDF and HardFault do not trigger an exception stopping probe-run on thumbv6m-none-eabi.

    When a HardFault is triggered by the UDF instruction, the processor moves to the infinite loop defined in cortex-m crate and the application does not terminate. Is this the correct behavior?

    type: bug status: blocked 
    opened by matoushybl 15
  • ITM support

    ITM support

    I'm currently using ITM for log messages via the itm_logger crate. This works with openocd, but I see no option to use this here. It seems that probe-rs has some support for it already.

    type: question 
    opened by sourcebox 14
  • "stm32h723zg" board not available

    Hi, I am working on a stm32h723zg board but this board is not available in the prob-run chips list so can you please guide me how to add this board in probe-run?

    type: question 
    opened by imrank03 13
  • WFI/WFE after print results in the same message printed multiple times

    WFI/WFE after print results in the same message printed multiple times

    I'm implementing an embedded async runtime on an stm32f103. Inside a future I am calling defmt::info!, before waiting on a timer (via an interrupt). Therefore, the future returns Poll::Pending and I call asm::wfi() to sleep the CPU. Then, the message printed before the wait gets sent a ton of times, all with the same timestamp. Is this expected? How does your printing mechanism interact with sleep modes?

    I've tried setting the DBGMCU_CR.DEBUG_SLEEP flag but it doesn't do anything.

    This is on Windows 10 with an STLink v2. I don't have a small reproducer at the moment because the code is tied into all sorts of unrelated stuff. Maybe there's an underlying reason this doesn't work and you don't need an example, let me know.

    type: bug status: needs info 
    opened by PvdBerg1998 13
  • update to stm32h7xx-hal 0.11.0 and cortex-m-rt 0.7.1 breaks probe-run

    update to stm32h7xx-hal 0.11.0 and cortex-m-rt 0.7.1 breaks probe-run

    Describe the bug I am working on the knurling branch of rust examples for the nucleo-h743zi and nucleo-h743zi2 boards (direct link to knurling branch). I updated the nucleo code to take advantage of defmt and panic-probe and flashed an ran all this with probe-run and all worked great with the onboard STLINKv3 on my nucleo-h743zi2. Then I updated the Cargo.toml to use stm32h7xx-hal 0.11.0 (from 0.10.0) and cortex-m-rt 0.7.1 (from 0.6.15) and probe-run (0.3.3) now fails with Error: An error with the usage of the probe occured after reporting flashing the device successfully. Running with probe-run with -vv indicates that probe-run is wrongly choosing JTAG instead of SWD in this case.

    There are the final lines before exit from the probe-run -vv:

    (HOST) TRACE Sending command [f2, 3e] to STLink, timeout: 1s
    └─ probe_rs::probe::stlink::usb_interface @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\usb_interface.rs:215
    (HOST) TRACE Read 12 bytes, 0 bytes remaining
    └─ probe_rs::probe::stlink::usb_interface @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\usb_interface.rs:281
    (HOST) DEBUG Will clear HW breakpoint    #0 with comparator address    0x80002f8
    └─ probe_rs::core @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\core\mod.rs:473
    (HOST) TRACE write_mem_32bit
    └─ probe_rs::probe::stlink @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\mod.rs:927
    (HOST) TRACE Sending command [f2, 8, 8, 20, 0, e0, 4, 0, 0] to STLink, timeout: 1s
    └─ probe_rs::probe::stlink::usb_interface @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\usb_interface.rs:215
    (HOST) TRACE Wrote 4 bytes, 0 bytes remaining
    └─ probe_rs::probe::stlink::usb_interface @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\usb_interface.rs:257
    (HOST) TRACE USB write done!
    └─ probe_rs::probe::stlink::usb_interface @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\usb_interface.rs:264
    (HOST) TRACE Sending command [f2, 3e] to STLink, timeout: 1s
    └─ probe_rs::probe::stlink::usb_interface @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\usb_interface.rs:215
    (HOST) TRACE Read 12 bytes, 0 bytes remaining
    └─ probe_rs::probe::stlink::usb_interface @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\usb_interface.rs:281
    (HOST) TRACE Getting current mode of device...
    └─ probe_rs::probe::stlink @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\mod.rs:359
    (HOST) TRACE Sending command [f5] to STLink, timeout: 1s
    └─ probe_rs::probe::stlink::usb_interface @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\usb_interface.rs:215
    (HOST) TRACE Read 2 bytes, 0 bytes remaining
    └─ probe_rs::probe::stlink::usb_interface @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\usb_interface.rs:281
    (HOST) DEBUG Current device mode: Jtag
    └─ probe_rs::probe::stlink @ C:\Users\drand\.cargo\registry\src\github.com-1ecc6299db9ec823\probe-rs-0.12.0\src\probe\stlink\mod.rs:374
    Error: An error with the usage of the probe occured
    
    Caused by:
        Operation timed out
    error: process didn't exit successfully: `probe-run --chip STM32H743ZITx -vv target\thumbv7em-none-eabihf\release\blinky` (exit code: 1)
    PS C:\Users\drand\Documents\src\nucleo-h743zi> cargo run --release --bin blinky
        Finished release [optimized + debuginfo] target(s) in 0.05s
         Running `probe-run --chip STM32H743ZITx target\thumbv7em-none-eabihf\release\blinky`
    (HOST) WARN  (BUG) location info is incomplete; it will be omitted from the output
    (HOST) INFO  flashing program (7 pages / 7.00 KiB)
    (HOST) INFO  success!
    Error: An error with the usage of the probe occured
    
    Caused by:
        Operation timed out
    error: process didn't exit successfully: `probe-run --chip STM32H743ZITx target\thumbv7em-none-eabihf\release\blinky` (exit code: 1)
    

    ~~It seems with the older dependencies, probe-run correctly uses SWD but with the updated dependencies, it attempts to incorrectly use JTAG.~~ Update 2022-04-02: in the working case I also see Current device mode: Jtag in the output, indicating that JTag is indeed used in the original working scenario.

    Also, it seems possible that the bug is not with probe-run but with one of these other crates.

    To Reproduce Steps to reproduce the behavior:

    Install probe-run 0.3.3.

    First observe error-free behavior:

    git clone https://github.com/astraw/nucleo-h743zi --branch knurling
    cd nucleo-h743zi
    cargo run --release --bin blinky
    

    Then update Cargo.toml to use stm32h7xx-hal 0.11.0 and cortex-m-rt 0.7.1. (This also updates the stm32h7 dependency from 0.13.0 to 0.14.0.) Re-run cargo run --release --bin blinky. Observe that probe run fails with Error: An error with the usage of the probe occured.

    Expected and observed behavior I expected that probe-run would run without error. I observed the error mentioned above.

    Probe details

    probe-rs-cli list
    The following devices were found:
    [0]: STLink V3 (VID: 0483, PID: 374e, Serial: 0029002D3137511639383538, StLink)
    

    Operating System: Windows

    type: bug status: blocked 
    opened by astraw 10
  • change CLI around --force-backtrace and --max-backtrace-len

    change CLI around --force-backtrace and --max-backtrace-len

    We are going to change the CLI around --force-backtrace and --max-backtrace-len. The accepted proposal is https://github.com/knurling-rs/probe-run/issues/198#issuecomment-889073456 . This is only waiting on a PR to implement that proposal.


    Original ticket:

    (this is technically a breaking change so it should wait until v0.3.0)

    --max-backtrace-len=0 is currently allowed. While working on PR #197 it wasn't clear to me what the semantics of --force-backtrace --max-backtrace-len=0 should be but I made --max-backtrace-len=0 never print a backtrace regardless of other flags and the presence of stack overflows or exceptions.

    IMO, it'd be better to reject --max-backtrace-len=0 and only accepts lengths equal or greater than 1; that avoids the above ambiguity.

    cc @Lotterleben

    type: enhancement difficulty: easy priority: low status: needs PR topic: backtrace breaking change 
    opened by japaric 10
  • blocking rtt hangs process

    blocking rtt hangs process

    Any thoughts against servicing the rtt buffer the entire time? Im trying to print large buffers on exit, but theyre either truncated because the buffer is full (and youd hate to set the rtt buffer to 10k or something) or in rtt blocking deadlock because the buffer inst serviced until the breakpoint is reached.

    Any architectural reasons or?

    type: bug 
    opened by jacobrosenthal 10
  • Probe Not Found - Did all the troubleshooting steps

    Probe Not Found - Did all the troubleshooting steps

    I have an nRF52840 DK. Its the first time using it so it could be a bad board. I'm trying to follow the testing hals blog. I used the same cable for cargo espflash commands and it works fine. Here are my permissions

    $ lsusb | grep SEGGER
    Bus 001 Device 104: ID 1366:1051 SEGGER J-L
    $ ls -l /dev/bus/usb/001/104
    crw-rw----+ 1 root root 189, 103 Aug 20 16:00 /dev/bus/usb/001/104
    
    $ cat /etc/udev/rules.d/50-oxidize-global.rules
    # nRF52840 Dongle in bootloader mode
    ATTRS{idVendor}=="1915", ATTRS{idProduct}=="521f", TAG+="uaccess"
    
    # nRF52840 Dongle applications
    ATTRS{idVendor}=="2020", TAG+="uaccess"
    
    # nRF52840 Development Kit
    ATTRS{idVendor}=="1366", ENV{ID_MM_DEVICE_IGNORE}="1", TAG+="uaccess"
    

    I also tried chown cause I needed to do that for esp32. I'm on arch linux btw and using probe-run v0.3.4 (0.2.5 gives the same error)

    $ sudo chown $USER /dev/bus/usb/001/104
    

    Here's is my code: https://github.com/iot-resister/probe-debug

    I'm simply trying to run cargo test from the self-tests directory.

    Thanks for the awesome libraries/materials!

    opened by iot-resister 9
  • Fails to decode data after long time running

    Fails to decode data after long time running

    I have just updated both defmt and probe-run, and i am now starting to see a lot of

    (HOST) ERROR failed to decode defmt data: [af, 6e, 39, 0, 0, ...]
    Error: malformed data
    

    They are not coming right away, but rather after running for a long time. I am not logging any significant amount of data, and it doesn't seem like it's a particular log frame that causes the error.

    This is kind of a big issue, as above error also seems to halt the core, causing not only our logging, but also our application to stop running.

    Would it be possible in cases of malformed data, to simply rotate a single byte and try decoding again, in a loop? It seems to work as a last resort re-synchronization mechanism, that is MUCH more desireable than a panic. That way only the malformed frame is lost. The obvious alternative would be to finally add framing to the wire format, which i think would also solve a bunch of other issues/requests?

    type: bug difficulty: hard priority: high status: needs info 
    opened by MathiasKoch 9
  • JtagGetIdcodeError

    JtagGetIdcodeError

    Hi. Where should I start debugging this? On STM32F3, and switching from openocd:

        Finished release [optimized + debuginfo] target(s) in 23.16s
         Running `probe-run --chip STM32F303CCTx target\thumbv7em-none-eabihf\release\anyleaf_watermonitor`
    Error: An error with the usage of the probe occured
    
    Caused by:
        0: An error specific to a probe type occured
        1: Command failed with status JtagGetIdcodeError
    error: process didn't exit successfully: `probe-run --chip STM32F303CCTx target\thumbv7em-none-eabihf\release\anyleaf_watermonitor` (exit code:
     1)
    

    ./cargo/config:

    [target.'cfg(all(target_arch = "arm", target_os = "none"))']
    runner = "probe-run --chip STM32F303CCTx" # to list chips, run `probe-run --list-chips.`
    rustflags = [
      "-C", "link-arg=-Tlink.x",
    ]
    
    [build]
    target = "thumbv7em-none-eabihf"
    

    edit: After removing the

    rustflags = [
      "-C", "link-arg=-Tlink.x",
    ]
    

    line, the error is Error:.vector_tablesection is missing.

    type: question 
    opened by David-OConnor 9
  • We are on vacation ⛄

    We are on vacation ⛄

    Dear Knurling-rs community,

    Most of us maintainers of Knurling-rs will be on vacation from this week until the beginning of January. Therefore please do not expect too much activity in our repositories and issue tracker.

    We wish you a great holiday season (if you have it) or, otherwise, just a good time.

    Best, your Knurling-rs team ❄️

    opened by Urhengulas 0
  • Erase-all flash option

    Erase-all flash option

    Would an option to erase all flash be considered generally useful? The gen 3 nRF52 boards have AP Protect enabled by default, so it might be handy for an optional erase all to enable subsequent flashing.

    type: enhancement good first issue difficulty: easy priority: low status: needs PR 
    opened by huntc 2
  • Unable to use --chip-description-path option

    Unable to use --chip-description-path option

    Describe the bug Using probe-run from revision 8add0cf passing --chip-description-path option throws the error Deserializing the yaml encountered an error

    To Reproduce I've created https://github.com/Dblm0/probe-run/tree/probe-rs_yaml_fail to reproduce.

    It turns out, something is wrong with probe-rs dependency from crates.io. Changing it to be fetched from git solves the problem for me. I understand, it's not the probe-run issue, but have no idea how this kind of dependency problems have to be solved.

    type: bug status: blocked difficulty: medium priority: medium 
    opened by Dblm0 1
  • Probe visible with `probe-run --list-probes` but cannot be used by runner

    Probe visible with `probe-run --list-probes` but cannot be used by runner

    I'm using pico-debug debugger on my Pi Pico W, and my dev setup consists of Win11 + WSL2. I've flashed debugger onto the board (my understanding is that pico-debug allows using just one pico and debugger runs on one of 2 pico cores), used usb passthrough so USB is usable inside WSL2.

    I've also needed to

    chmod 777 /dev/bus/usb/001/011
    

    so I can access usb from non-root user. Now when I run the following commands

    lsusb
    probe-run --list-probes
    

    everything seems fine. Probe is found and I'd expect that I could run my code.

    image

    However when I try cargo run --release I encounter the following.

    Running probe-run --chip RP2040 target/thumbv6m-none-eabi/debug/cyw43-example-rpi-pico-w
    Error: Probe could not be created
    
    Caused by:
        Probe was not found.
    

    I suspect it might have something to do with permissions (maybe for some reason chmod is not enough?) but truth being told i'm not used to linux/embedded enough to solve it myself. Did anyone encounter that error before? Did I make any obvious mistakes?

    type: bug difficulty: medium priority: medium status: needs design 
    opened by nxy7 14
  • Command failed with status SwdApFault

    Command failed with status SwdApFault

    Describe the bug Attempting to probe-run and flash a STM32WL55JC1 returns a variety of errors with the probe connection.

    To Reproduce

    $ probe-run --chip STM32WL55JCIx --verbose
    $ # or
    $ cargo-flash --chip STM32WL55JCIx
    

    Example This was run using standard stm32-hal quickstart main and files. Also tried empty main and that gave the same errors.

    config.toml

    [target.'cfg(all(target_arch = "arm", target_os = "none"))']
    # Change this runner as required for your MCU.
    runner = "probe-run --verbose --chip STM32WL55JCIx" # to list chips, run `probe-run --list-chips.`
    rustflags = [
    #  "-C", "linker=flip-link",
      "-C", "link-arg=-Tlink.x",
    #  "-C", "link-arg=-Tdefmt.x",
      # This is needed if your flash or ram addresses are not aligned to 0x10000 in memory.x
      # See https://github.com/rust-embedded/cortex-m-quickstart/pull/95
    #  "-C", "link-arg=--nmagic",
    ]
    
    [build]
    # Change this target as required for your MCU.
    target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7a (eg F, L4, H7)
    #target = "thumbv6m-none-eabi"    # Cortex-M0 and Cortex-M0+ (eg G)
    # target = "thumbv8m.main-none-eabihf" # Cortex-M33F and Cortex-M35F (eg L5, U5)
    
    [alias]
    rb = "run --bin"
    rrb = "run --release --bin"
    rr = "run --release"
    

    Have also tried with and without flip-link, defmt, and nmagic but no difference.

    cargo.toml

    [package]
    authors = ["Your name <[email protected]>"]
    name = "project_name"
    edition = "2021"
    version = "0.1.0"
    
    [dependencies]
    defmt = "0.3.0"
    defmt-rtt = "0.3.0"
    panic-probe = { version = "0.3.0", features = ["print-defmt"] }
    
    cortex-m = "0.7.3"
    cortex-m-rt = "0.7.0"
    
    # Change this import as required for your MCU.
    stm32-hal2 = { version = "^1.4.5", features = ["wle5", "wlrt"]}
    # stm32-hal2 = { version = "^1.3.3", features = ["h743v", "h7rt"]}
    
    # Peripheral access crate
    # stm32wl = { version = "0.15.1", optional = true }
    
    # cargo build/run
    [profile.dev]
    codegen-units = 1
    debug = 2
    debug-assertions = true # <-
    incremental = false
    opt-level = 3 # <-
    overflow-checks = true # <-
    
    # cargo test
    [profile.test]
    codegen-units = 1
    debug = 2
    debug-assertions = true # <-
    incremental = false
    opt-level = 3 # <-
    overflow-checks = true # <-
    
    # cargo build/run --release
    [profile.release]
    codegen-units = 1
    debug = 2
    debug-assertions = false # <-
    incremental = false
    lto = 'fat'
    opt-level = 3 # <-
    overflow-checks = false # <-
    
    # cargo test --release
    [profile.bench]
    codegen-units = 1
    debug = 2
    debug-assertions = false # <-
    incremental = false
    lto = 'fat'
    opt-level = 3 # <-
    overflow-checks = false # <-
    

    ──────────────────────────────────────────────────────────────────────────────── Response of probe-run:

    warning: `project_name` (bin "project_name") generated 3 warnings
        Finished release [optimized + debuginfo] target(s) in 22.93s
         Running `probe-run --verbose --chip STM32WL55JCIx target/thumbv7em-none-eabihf/release/project_name`
    (HOST) DEBUG vector table: VectorTable { initial_stack_pointer: 20008000, hard_fault: 8000525 }
    └─ probe_run::elf @ /Users/morgan/.cargo/registry/src/github.com-1ecc6299db9ec823/probe-run-0.3.5/src/elf.rs:31
    (HOST) DEBUG RAM region: 0x20000000-0x2000FFFF
    └─ probe_run::target_info @ /Users/morgan/.cargo/registry/src/github.com-1ecc6299db9ec823/probe-run-0.3.5/src/target_info.rs:115
    (HOST) DEBUG section `.bss` is in RAM at 0x20000000..=0x20000003
    └─ probe_run::target_info @ /Users/morgan/.cargo/registry/src/github.com-1ecc6299db9ec823/probe-run-0.3.5/src/target_info.rs:153
    (HOST) DEBUG valid SP range: 0x20000004..=0x20007FFC
    └─ probe_run::target_info @ /Users/morgan/.cargo/registry/src/github.com-1ecc6299db9ec823/probe-run-0.3.5/src/target_info.rs:167
    (HOST) DEBUG found 1 probes
    └─ probe_run::probe @ /Users/morgan/.cargo/registry/src/github.com-1ecc6299db9ec823/probe-run-0.3.5/src/probe.rs:25
    (HOST) DEBUG opened probe
    └─ probe_run::probe @ /Users/morgan/.cargo/registry/src/github.com-1ecc6299db9ec823/probe-run-0.3.5/src/probe.rs:33
    Error: An error with the usage of the probe occurred
    
    Caused by:
        0: An error specific to a probe type occurred
        1: Command failed with status SwdApFault
    

    Running using connect-under-reset gives the same error or occasionally SwdApWait status.

    Problem was originally #27 but through some resets and restarts its now moved to SwdApWait or SwdApFault response each time.

    $ RUST_LOG=probe_rs=debug probe-rs-cli info
     DEBUG probe_rs::probe::cmsisdap::tools > Searching for CMSIS-DAP probes using libusb
     DEBUG probe_rs::probe::cmsisdap::tools > Found 0 CMSIS-DAP probes using libusb, searching HID
     DEBUG probe_rs::probe::cmsisdap::tools > Found 0 CMSIS-DAP probes total
     DEBUG probe_rs::probe::cmsisdap::tools > Attempting to open 0483:3754 in CMSIS-DAP v1 mode
     DEBUG probe_rs::probe::stlink::usb_interface > Acquired libusb context.
     DEBUG probe_rs::probe::stlink::usb_interface > Aquired handle for probe
     DEBUG probe_rs::probe::stlink::usb_interface > Active config descriptor: ConfigDescriptor { bLength: 9, bDescriptorType: 2, wTotalLength: 105, bNumInterfaces: 3, bConfigurationValue: 1, iConfiguration: 4, bmAttributes: 128, bMaxPower: 250, extra: [] }
     DEBUG probe_rs::probe::stlink::usb_interface > Device descriptor: DeviceDescriptor { bLength: 18, bDescriptorType: 1, bcdUSB: 512, bDeviceClass: 239, bDeviceSubClass: 2, bDeviceProtocol: 1, bMaxPacketSize: 64, idVendor: 1155, idProduct: 14164, bcdDevice: 256, iManufacturer: 1, iProduct: 2, iSerialNumber: 3, bNumConfigurations: 1 }
     DEBUG probe_rs::probe::stlink::usb_interface > Claimed interface 0 of USB device.
     DEBUG probe_rs::probe::stlink::usb_interface > Succesfully attached to STLink.
     DEBUG probe_rs::probe::stlink                > Initializing STLink...
     DEBUG probe_rs::probe::stlink                > Current device mode: Jtag
     DEBUG probe_rs::probe::stlink                > STLink version: (3, 10)
     DEBUG probe_rs::probe::stlink                > attach(Jtag)
     DEBUG probe_rs::probe::stlink                > Current device mode: Jtag
     DEBUG probe_rs::probe::stlink                > Switching protocol to JTAG
     INFO  probe_rs::probe::stlink                > Target voltage (VAPP): 3.26 V
     DEBUG probe_rs::probe::stlink                > Successfully initialized SWD.
     DEBUG probe_rs::architecture::arm::ap        > Reading register IDR
     DEBUG probe_rs::probe::stlink                > Opening AP 0
     DEBUG probe_rs::architecture::arm::ap        > Read register    IDR, value=0x24770011
     DEBUG probe_rs::architecture::arm::ap        > Reading register IDR
     DEBUG probe_rs::probe::stlink                > Opening AP 1
     DEBUG probe_rs::architecture::arm::ap        > Read register    IDR, value=0x84770001
     DEBUG probe_rs::architecture::arm::ap        > Reading register IDR
     DEBUG probe_rs::probe::stlink                > Opening AP 2
     DEBUG probe_rs::architecture::arm::ap        > Read register    IDR, value=0x0
     DEBUG probe_rs::architecture::arm::ap        > Reading register IDR
     DEBUG probe_rs::architecture::arm::ap        > Read register    IDR, value=0x24770011
     DEBUG probe_rs::architecture::arm::ap        > Reading register BASE
     DEBUG probe_rs::architecture::arm::ap        > Read register    BASE, value=0xe00ff003
     DEBUG probe_rs::architecture::arm::ap        > Reading register BASE2
     DEBUG probe_rs::architecture::arm::ap        > Read register    BASE2, value=0x0
     DEBUG probe_rs::architecture::arm::ap        > Reading register CSW
     DEBUG probe_rs::architecture::arm::ap        > Read register    CSW, value=0x23000052
     DEBUG probe_rs::architecture::arm::ap        > Writing register CSW, value=CSW { DbgSwEnable: 1, HNONSEC: 1, PROT: 6, CACHE: 3, SPIDEN: 0, _RES0: 0, MTE: 0, Type: 0, Mode: 0, TrinProg: 0, DeviceEn: 0, AddrInc: Single, _RES1: 0, SIZE: U8 }
     DEBUG probe_rs::architecture::arm::ap        > Reading register CSW
     DEBUG probe_rs::architecture::arm::ap        > Read register    CSW, value=0x23000050
     DEBUG probe_rs::architecture::arm::ap        > Writing register CSW, value=CSW { DbgSwEnable: 0, HNONSEC: 0, PROT: 2, CACHE: 3, SPIDEN: 0, _RES0: 0, MTE: 0, Type: 0, Mode: 0, TrinProg: 0, DeviceEn: 1, AddrInc: Single, _RES1: 0, SIZE: U32 }
     DEBUG probe_rs::architecture::arm::communication_interface > HNONSEC supported: false
     DEBUG probe_rs::architecture::arm::ap                      > Reading register CFG
     DEBUG probe_rs::architecture::arm::ap                      > Read register    CFG, value=0x0
     DEBUG probe_rs::probe::stlink                              > AP ApAddress {
        dp: Default,
        ap: 0x0,
    }: MemoryAp(MemoryApInformation { address: ApAddress { dp: Default, ap: 0 }, only_32bit_data_size: false, debug_base_address: 3759140864, supports_hnonsec: false, has_large_address_extension: false, has_large_data_extension: false })
     DEBUG probe_rs::architecture::arm::ap                      > Reading register IDR
     DEBUG probe_rs::architecture::arm::ap                      > Read register    IDR, value=0x84770001
     DEBUG probe_rs::architecture::arm::ap                      > Reading register BASE
     DEBUG probe_rs::architecture::arm::ap                      > Read register    BASE, value=0xf0000003
     DEBUG probe_rs::architecture::arm::ap                      > Reading register BASE2
     DEBUG probe_rs::architecture::arm::ap                      > Read register    BASE2, value=0x0
     DEBUG probe_rs::architecture::arm::ap                      > Reading register CSW
     DEBUG probe_rs::architecture::arm::ap                      > Read register    CSW, value=0x438000d2
     DEBUG probe_rs::architecture::arm::ap                      > Writing register CSW, value=CSW { DbgSwEnable: 1, HNONSEC: 1, PROT: 6, CACHE: 3, SPIDEN: 0, _RES0: 0, MTE: 0, Type: 0, Mode: 0, TrinProg: 0, DeviceEn: 0, AddrInc: Single, _RES1: 0, SIZE: U8 }
     DEBUG probe_rs::architecture::arm::ap                      > Reading register CSW
     WARN  probe_rs::probe::stlink                              > send_jtag_command 242 failed: SwdApFault
     DEBUG probe_rs::probe::stlink                              > Current device mode: Jtag
    thread 'main' panicked at 'This should not be an unwrap...: Probe(ProbeSpecific(CommandFailed(SwdApFault)))', /Users/morgan/.cargo/registry/src/github.com-1ecc6299db9ec823/probe-rs-cli-0.13.0/src/info.rs:74:22
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    

    This is using STLinkV3 built into the development WL55JC1 board. Programming using STM32CUBE is possible and works fine.

    morgan:stm32-nucleo/ (main*) $ probe-rs-cli list                     [16:46:07]
    The following devices were found:
    [0]: STLink V3 (VID: 0483, PID: 3754, Serial: 0009002E4D46501720383832, StLink)
    

    Any help would be appreciated!

    opened by MorganTechngs 1
  • augment backtraces with

    augment backtraces with "stack depth"

    the --measure-stack feature reports the maximum stack usage of an entire program. it would be useful to have a more fine-grained report of stack usage per function. there are static analysis tools like cargo-call-stack that provide that kind of information but they rely on a nightly Rust toolchain and break often. as a complement to that tool, probe-run could report the stack usage of each function -- or more precisely the "stack depth" -- when it computes / prints a backtrace with relatively low implementation effort.

    more details on the idea from a conversation:


    when probe-run does (host-side) unwinding of the target's call stack it's also indirectly reading the value the SP register had at the start of each call frame. this is because it had to read the value of the Link Register (LR) that was pushed onto the stack in the prologue of each called function (+) to figure out the call site (PC value) of the function is currently unwinding.

    in theory, it would be possible to include this information in the backtrace so each backtrace frame includes the "stack depth".

    you can glimpse at the SP information right now by looking at probe-run logs but it's going to non-obvious to figure out which frame the SP value refers to.

    for example, given this program

    #[cortex_m_rt::entry]
    fn main() -> ! {
        a();
        loop {}
    }
    
    #[inline(never)]
    fn a() {
        let mut bytes = [MaybeUninit::<u8>::uninit(); 4];
        // "use" the stack
        black_box(&mut bytes.as_mut_ptr());
        b();
    }
    
    #[inline(never)]
    fn b() {
        let mut bytes = [MaybeUninit::<u8>::uninit(); 12];
        black_box(&mut bytes.as_mut_ptr());
        c();
    }
    
    #[inline(never)]
    fn c() {
        let mut bytes = [MaybeUninit::<u8>::uninit(); 20];
        black_box(&mut bytes.as_mut_ptr());
        unsafe { asm!("BKPT") } // exit
    }
    
    fn black_box<T>(x: &mut T) {
        unsafe { asm!("// {0}", in(reg) x as *mut T as usize) }
    }
    

    the probe-run logs and backtrace look like this:

    $ probe-run $other_flags --backtrace=always -v my-program
    (HOST) TRACE update reg=Register(14), rule=Offset(-4), abs=0x2003fb80 -> value=0x00000485
    (HOST) TRACE update reg=Register(14), rule=Offset(-4), abs=0x2003fb98 -> value=0x00000471
    (HOST) TRACE update reg=Register(14), rule=Offset(-4), abs=0x2003fba8 -> value=0x000004ad
    (HOST) TRACE update reg=Register(14), rule=Offset(-4), abs=0x2003fbb0 -> value=0x000004a3
    (HOST) TRACE update reg=Register(14), rule=Offset(-4), abs=0x2003fbb8 -> value=0x00000445
    (HOST) TRACE update reg=Register(14), rule=Offset(0), abs=0x2003fbbc -> value=0xffffffff
    stack backtrace:
       0: 0x00000494 @ cg::c
            at src/bin/cg.rs:33:14
       1: 0x00000484 @ cg::b
            at src/bin/cg.rs:27:2
       2: 0x00000470 @ cg::a
            at src/bin/cg.rs:20:2
       3: 0x000004ac @ cg::__cortex_m_rt_main
            at src/bin/cg.rs:11:5
       4: 0x000004a2 @ main
            at src/bin/cg.rs:8:1
       5: 0x00000444 @ Reset
    (HOST) INFO  device halted without error
    └─ probe_run::backtrace @ src/backtrace/mod.rs:108
    

    register # 14 is the Linker Register (LR) I mentioned. abs= in the logs is the stack address from which LR was read; that's actually the SP value of each frame in the backtrace (++)

    so roughly:

    • frame 0, function cg::c. SP = ? (currently not printed in the logs +++)
    • frame 1, function cg::b. SP = 0x2003fb80
    • frame 2, function cg::a. SP = 0x2003fb98 (change 0x18 = 24 bytes)
    • frame 3, function cg::main. SP = 0x2003fba8 (change 0x10 = 16 bytes)
    • frame 4, function main. SP = 0x2003fbb0 (change 0x08 = 8 bytes)

    this (the per-frame "changes") matches the stack usage values reported by cargo-call-stack:

    cg

    not sure how much this SP in backtrace would help you but it doesn't require instrumenting the program so it's both runtime cost free and requires minimal changes to the program (introduce an artificial panic to print the backtrace at the desired spot)

    (+) most functions start like this:

    00000460 <cg::a::h1368587aa2735475>:
         460: 80 b5         push    {r7, lr}
    

    which in pseudo-rust is roughly *sp = lr where sp: *mut u32 and lr: u32

    (++) well, not always; exceptions (interrupts) need special handling but it's still possible to determine some SP value in that case, I think. also, the backtrace sometime includes inlined functions; there's no actual function call there so the SP stays the same in those frames.

    (+++) this missing value can be obtained by reading the value of the SP when unwinding starts. I think the unwinding algorithm already does this but I don't think the value is printed in the logs.


    TBD: the format in which to print the stack depth. one option is to include the SP value in each backtrace frame, like this:

    stack backtrace:
       0: 0x00000494 @ cg::c (SP=0x2003fb60)
            at src/bin/cg.rs:33:14
       1: 0x00000484 @ cg::b (SP=0x2003fb80)
            at src/bin/cg.rs:27:2
       2: 0x00000470 @ cg::a (SP=0x2003fb98)
            at src/bin/cg.rs:20:2
       3: 0x000004ac @ cg::__cortex_m_rt_main (SP=0x2003fba8)
            at src/bin/cg.rs:11:5
       4: 0x000004a2 @ main (SP=0x2003fbb0)
            at src/bin/cg.rs:8:1
       5: 0x00000444 @ Reset (SP=0x2003fbb8)
    
    type: enhancement 
    opened by japaric 0
Releases(v0.3.5)
  • v0.3.5(Oct 6, 2022)

    What's Changed

    • Mark v0.3.4 as released in CHANGELOG.md by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/343
    • Replace pub(crate) with pub by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/344
    • Fix CHANGELOG.md by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/346
    • Update dev-dependency serial_test by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/345
    • Add PROBE_RUN_SPEED env variable by @haata in https://github.com/knurling-rs/probe-run/pull/349
    • Add option to verify written flash by @Suyash458 in https://github.com/knurling-rs/probe-run/pull/353
    • Update to clap 4.0 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/357
    • Release probe-run v0.3.5 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/358

    New Contributors

    • @haata made their first contribution in https://github.com/knurling-rs/probe-run/pull/349
    • @Suyash458 made their first contribution in https://github.com/knurling-rs/probe-run/pull/353

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.3.4...v0.3.5

    Source code(tar.gz)
    Source code(zip)
  • v0.3.4(Oct 6, 2022)

    What's Changed

    • update README by @japaric in https://github.com/knurling-rs/probe-run/pull/314
    • Clarify "can't determine stack overflow" error message by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/317
    • snapshot tests: update test__panic_verbose.snap to new TRACE output by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/293
    • Warn on target chip mismatch by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/319
    • Disable terminal colorization if TERM=dumb is set by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/320
    • Add changelog enforcer by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/321
    • Make use of i/o locking being static since rust 1.61. by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/326
    • Simplify, by capturing identifiers in logging macros by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/328
    • Update probe-rs to version 0.13.0 by @jannic in https://github.com/knurling-rs/probe-run/pull/329
    • Fix fn round_up. by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/330
    • Refactor stack painting by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/331
    • Clean up enum Outcome by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/333
    • Simplify snapshot tests by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/334
    • Test round up by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/335
    • Clean snapshot tests by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/337
    • Simplify fn round_up by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/339
    • Optimize stack usage measuring by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/327
    • Add option to disable double buffering while loading firmware by @berkowski in https://github.com/knurling-rs/probe-run/pull/305
    • Release probe-run 0.3.4 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/340
    • Revert "Release probe-run 0.3.4" by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/341
    • Release probe-run 0.3.4 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/342

    New Contributors

    • @jannic made their first contribution in https://github.com/knurling-rs/probe-run/pull/329
    • @berkowski made their first contribution in https://github.com/knurling-rs/probe-run/pull/305

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.3.3...v0.3.4

    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Oct 6, 2022)

    What's Changed

    • round up canary size to a multiple of 4 by @japaric in https://github.com/knurling-rs/probe-run/pull/311
    • changelog update & version bump by @japaric in https://github.com/knurling-rs/probe-run/pull/312

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.3.2...v0.3.3

    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Oct 6, 2022)

    What's Changed

    • Update Cargo.lock by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/294
    • turn some println! into writeln! by @japaric in https://github.com/knurling-rs/probe-run/pull/296
    • probe-run json output by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/295
    • Simplify verbose matching by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/300
    • Fix and refactor fn extract_stack_info by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/299
    • Add way to pass chip description file by @KOBA789 in https://github.com/knurling-rs/probe-run/pull/301
    • Don't bail, but only warn if using --no-flash with defmt. by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/303
    • Make stack painting fast again! 🇪🇺 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/302
    • Update CHANGELOG.md by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/304
    • bump crate version by @japaric in https://github.com/knurling-rs/probe-run/pull/308

    New Contributors

    • @KOBA789 made their first contribution in https://github.com/knurling-rs/probe-run/pull/301

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

    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Nov 26, 2021)

    What's Changed

    • Turn demangling back on by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/280
    • Report flashing size using probe-rs's FlashProgress system. by @jonathanpallant in https://github.com/knurling-rs/probe-run/pull/281
    • Include program counter value in backtrace when -v is passed by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/282
    • Update snapshot tests by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/283
    • Update probe-rs, probe-rs-rtt to 0.12 by @korken89 in https://github.com/knurling-rs/probe-run/pull/285
    • unwind: skip FDEs with initial address of 0 by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/287
    • Update dependencies by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/286

    New Contributors

    • @jonathanpallant made their first contribution in https://github.com/knurling-rs/probe-run/pull/281
    • @korken89 made their first contribution in https://github.com/knurling-rs/probe-run/pull/285

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.3.0...v0.3.1

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

    What's Changed

    • Enable deactivated tests for Windows by @justahero in https://github.com/knurling-rs/probe-run/pull/246
    • Removes call to fill in user survey from readme. by @BriocheBerlin in https://github.com/knurling-rs/probe-run/pull/251
    • feat: add help message for JtagNoDeviceConnected by @numero-744 in https://github.com/knurling-rs/probe-run/pull/253
    • Backtrace options by @BriocheBerlin in https://github.com/knurling-rs/probe-run/pull/250
    • Print dedicated message on control + c by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/248
    • Add support for measuring the program's stack usage by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/254
    • fix ci on nightly by @japaric in https://github.com/knurling-rs/probe-run/pull/260
    • Update snapshot tests by @japaric in https://github.com/knurling-rs/probe-run/pull/259
    • Split "set rtt to blocking-mode" into function by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/257
    • set blocking mode to 0b10 (BLOCK_IF_FULL) by @japaric in https://github.com/knurling-rs/probe-run/pull/263
    • use new stream decoder API by @japaric in https://github.com/knurling-rs/probe-run/pull/264
    • Print troubleshooting information on "probe not found" error by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/247
    • Recover from decoding-errors by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/266
    • Minimize dependencies by disabling default-features by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/267
    • Update change log with recent entries by @justahero in https://github.com/knurling-rs/probe-run/pull/269
    • Cargo.toml: Remove unused dependencies by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/272
    • Update to Rust 2021 🎉 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/273
    • Update CHANGELOG.md by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/274
    • Release probe-run 0.3.0 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/276

    New Contributors

    • @numero-744 made their first contribution in https://github.com/knurling-rs/probe-run/pull/253

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.2.5...v0.3.0

    Source code(tar.gz)
    Source code(zip)
  • v0.2.5(Aug 2, 2021)

    What's Changed

    • cli::tests: rstest-ify tests for fn extract_git_hash by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/225
    • probe-run 0.2.4 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/229
    • Some clarifications and corrections by @huntc in https://github.com/knurling-rs/probe-run/pull/233
    • Feature-gate windows tests by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/234
    • Update to probe-rs 0.11 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/235
    • Adds add for user survey into readme. by @BriocheBerlin in https://github.com/knurling-rs/probe-run/pull/240
    • Fix clippy warnings by @justahero in https://github.com/knurling-rs/probe-run/pull/244
    • probe-run v0.2.5 by @justahero in https://github.com/knurling-rs/probe-run/pull/245

    New Contributors

    • @huntc made their first contribution in https://github.com/knurling-rs/probe-run/pull/233

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.2.4...v0.2.5

    Source code(tar.gz)
    Source code(zip)
  • v0.2.4(Jun 23, 2021)

    What's Changed

    • Fix EXC_RETURN detection on thumbv8 by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/216
    • add more explicit hint if elf path doesn't lead to an existing file by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/219
    • Make unwind::target() infallible by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/212
    • refactor the huge "main" function into smaller functions + module by @japaric in https://github.com/knurling-rs/probe-run/pull/222
    • target_info: print ram region again by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/224
    • Obtain git-version from macro, instead of custom build-script by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/221
    • add first, user-triggered snapshot tests by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/218
    • Remove unused file utils.rs by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/228
    • CI: Run tests and clippy by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/226

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.2.3...v0.2.4

    Source code(tar.gz)
    Source code(zip)
  • v0.2.3(Jun 17, 2021)

    What's Changed

    • README.md: Replace ${PROBE_RUN_CHIP} in code example by @bobmcwhirter in https://github.com/knurling-rs/probe-run/pull/190
    • README: Add installation instructions for Fedora by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/192
    • Check PROBE_RUN_IGNORE_VERSION on runtime by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/193
    • REAMDE: Fix ubuntu installation instructions by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/194
    • refactor "print backtrace" code by @japaric in https://github.com/knurling-rs/probe-run/pull/197
    • add column info to backtrace by @japaric in https://github.com/knurling-rs/probe-run/pull/199
    • backtrace: highlight frames that point to local code by @japaric in https://github.com/knurling-rs/probe-run/pull/200
    • make 'stopped due to signal' force a backtrace by @japaric in https://github.com/knurling-rs/probe-run/pull/204
    • fix unwinding exceptions that push FPU registers onto the stack by @japaric in https://github.com/knurling-rs/probe-run/pull/206
    • unwind: read as little stacked registers as possible by @japaric in https://github.com/knurling-rs/probe-run/pull/207
    • add --shorten-paths by @japaric in https://github.com/knurling-rs/probe-run/pull/203
    • make --shorten-paths format more cross platform by @japaric in https://github.com/knurling-rs/probe-run/pull/209
    • mv backtrace.rs backtrace/mod.rs by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/211
    • extend --shorten-paths; highlight path segments by @japaric in https://github.com/knurling-rs/probe-run/pull/210
    • probe-run v0.2.3 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/214

    New Contributors

    • @bobmcwhirter made their first contribution in https://github.com/knurling-rs/probe-run/pull/190

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

    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Jun 17, 2021)

    What's Changed

    • remind the user that the bench profile should be also overridden by @japaric in https://github.com/knurling-rs/probe-run/pull/161
    • Remove panic-probe by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/162
    • Various simplifications by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/165
    • Introduce even more verbose log level by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/171
    • Report exit reason, make backtrace optional by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/163
    • Run cargo fmt -- --check in CI by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/175
    • Skip defmt version check by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/174
    • limit backtrace length, make limit configurable by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/179
    • README: add copypasteable example how to run from repo by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/181
    • README.md: Add troubleshooting for use with RTIC by @davidlattimore in https://github.com/knurling-rs/probe-run/pull/183
    • add some bounds checking to unwinding by @japaric in https://github.com/knurling-rs/probe-run/pull/184
    • v0.2.2 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/191

    New Contributors

    • @davidlattimore made their first contribution in https://github.com/knurling-rs/probe-run/pull/183

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

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

    What's Changed

    • Remove unnecessary log feature by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/155
    • Update changelog by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/154
    • Fix Ctrl+C handling by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/158
    • v0.2.1 by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/159

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

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

    What's Changed

    • bump version in Cargo.toml and -.lock by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/136
    • Fix link to v0.1.9 by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/140
    • Satisfy clippy by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/141
    • README.md: add troubleshooting section by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/145
    • Pin unstable path dependencies by @Urhengulas in https://github.com/knurling-rs/probe-run/pull/146
    • Update defmt by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/147
    • Update deps by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/149
    • discard arguments that come after the ELF file path by @japaric in https://github.com/knurling-rs/probe-run/pull/151
    • Allow selecting a probe by serial number by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/152
    • Update to 0.2.0 by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/153

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.1.9...v0.2.0

    Source code(tar.gz)
    Source code(zip)
  • v0.1.9(Nov 10, 2021)

    What's Changed

    • add bors by @japaric in https://github.com/knurling-rs/probe-run/pull/121
    • bump git dependencies by @japaric in https://github.com/knurling-rs/probe-run/pull/122
    • mv bors.toml into .github by @japaric in https://github.com/knurling-rs/probe-run/pull/123
    • bump git deps by @japaric in https://github.com/knurling-rs/probe-run/pull/125
    • Print probe list when multiple probes were found by @hasheddan in https://github.com/knurling-rs/probe-run/pull/126
    • reject use of defmt and --no-flash (again) by @japaric in https://github.com/knurling-rs/probe-run/pull/129
    • use defmt-logger by @japaric in https://github.com/knurling-rs/probe-run/pull/132
    • Update defmt, dependencies by @mattico in https://github.com/knurling-rs/probe-run/pull/134
    • Do not display full version with --help by @Javier-varez in https://github.com/knurling-rs/probe-run/pull/133
    • CHANGELOG.md: update by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/135

    New Contributors

    • @hasheddan made their first contribution in https://github.com/knurling-rs/probe-run/pull/126
    • @mattico made their first contribution in https://github.com/knurling-rs/probe-run/pull/134
    • @Javier-varez made their first contribution in https://github.com/knurling-rs/probe-run/pull/133

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.1.8...v0.1.9

    Source code(tar.gz)
    Source code(zip)
  • v0.1.8(Nov 10, 2021)

    What's Changed

    • Wait for breakpoint to actually hit before switching RTT to blocking. by @Dirbaio in https://github.com/knurling-rs/probe-run/pull/117
    • connect-under-reset option by @burrbull in https://github.com/knurling-rs/probe-run/pull/119

    New Contributors

    • @burrbull made their first contribution in https://github.com/knurling-rs/probe-run/pull/119

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.1.7...v0.1.8

    Source code(tar.gz)
    Source code(zip)
  • v0.1.7(Nov 10, 2021)

    What's Changed

    • colorize defmt::assert_eq output by @japaric in https://github.com/knurling-rs/probe-run/pull/110
    • Report defmt decode errors to the user. by @Dirbaio in https://github.com/knurling-rs/probe-run/pull/112
    • pin hidapi dependency to version 1.2.3 by @japaric in https://github.com/knurling-rs/probe-run/pull/114

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.1.6...v0.1.7

    Source code(tar.gz)
    Source code(zip)
  • v0.1.6(Nov 10, 2021)

    What's Changed

    • bump probe-rs dependency by @japaric in https://github.com/knurling-rs/probe-run/pull/108
    • don't print more thn once per frame by @japaric in https://github.com/knurling-rs/probe-run/pull/109

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.1.5...v0.1.6

    Source code(tar.gz)
    Source code(zip)
  • v0.1.5(Nov 10, 2021)

    What's Changed

    • READMEs: update knurling link to website by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/100
    • turn this panic-probe crate into a dummy that redirects to the real one by @japaric in https://github.com/knurling-rs/probe-run/pull/101
    • bump defmt git version by @japaric in https://github.com/knurling-rs/probe-run/pull/104
    • Autodetect defmt usage by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/105
    • report program size by @japaric in https://github.com/knurling-rs/probe-run/pull/106
    • prepare for v0.1.5 release by @japaric in https://github.com/knurling-rs/probe-run/pull/107

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.1.4...v0.1.5

    Source code(tar.gz)
    Source code(zip)
  • v0.1.4(Nov 10, 2021)

    What's Changed

    • Simplify obtaining unwind info by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/23
    • Increase RTT attach retries by @Bobo1239 in https://github.com/knurling-rs/probe-run/pull/25
    • reorder 'rtt logs not found' message by @japaric in https://github.com/knurling-rs/probe-run/pull/28
    • Add --no-flash option to probe-run by @therealprof in https://github.com/knurling-rs/probe-run/pull/30
    • ci: run on all platforms by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/34
    • Document CLI by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/40
    • Automatic canary-based stack overflow detection by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/33
    • Add panic-probe by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/18
    • display location info by @japaric in https://github.com/knurling-rs/probe-run/pull/38
    • Better diagnostic when linker script was missing by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/44
    • Use object instead of xmas-elf by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/45
    • Allow environment variables to set chip arguments. by @Hoverbear in https://github.com/knurling-rs/probe-run/pull/41
    • Add some logging to the backtrace code by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/48
    • ctrlc -> signal-hook, remove the handler when done by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/47
    • Actually deregister the Ctrl+C handler by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/51
    • Ignore thumb bit when checking for repeated frames by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/50
    • Allow listing and selecting probe by @aurelj in https://github.com/knurling-rs/probe-run/pull/49
    • Improve CLI output formatting by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/53
    • rm env-logger by @japaric in https://github.com/knurling-rs/probe-run/pull/56
    • set a HW breakpoint on the hard fault handler by @japaric in https://github.com/knurling-rs/probe-run/pull/55
    • stack overflow detection: adjust for full descending stacks by @japaric in https://github.com/knurling-rs/probe-run/pull/58
    • print module path by @japaric in https://github.com/knurling-rs/probe-run/pull/57
    • tweak output format by @japaric in https://github.com/knurling-rs/probe-run/pull/60
    • adapt to upstream changes in elf2table by @japaric in https://github.com/knurling-rs/probe-run/pull/61
    • place breakpoint on an even address by @japaric in https://github.com/knurling-rs/probe-run/pull/64
    • add location info to the backtrace by @japaric in https://github.com/knurling-rs/probe-run/pull/63
    • backtrace: handle the 'FrameIter is empty' case by @japaric in https://github.com/knurling-rs/probe-run/pull/67
    • toggle RTT mode after RAM initialization by @japaric in https://github.com/knurling-rs/probe-run/pull/69
    • flush after each stdout write when defmt is not enabled by @japaric in https://github.com/knurling-rs/probe-run/pull/77
    • add bug report template by @japaric in https://github.com/knurling-rs/probe-run/pull/78
    • Fix 80 by @Lotterleben in https://github.com/knurling-rs/probe-run/pull/81
    • use latest git version of decoder and elf parser by @japaric in https://github.com/knurling-rs/probe-run/pull/82
    • add git info to --version output by @japaric in https://github.com/knurling-rs/probe-run/pull/83
    • update defmt git dep by @japaric in https://github.com/knurling-rs/probe-run/pull/84
    • Update defmt by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/87
    • Update defmt by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/92
    • Added option to specify probe clock frequency by @eboskma in https://github.com/knurling-rs/probe-run/pull/88
    • make panic-probe compile-able on hosted systems by @japaric in https://github.com/knurling-rs/probe-run/pull/94
    • panic-probe: add crate metadata & crates.io dependencies by @japaric in https://github.com/knurling-rs/probe-run/pull/97
    • update the CHANGELOG by @japaric in https://github.com/knurling-rs/probe-run/pull/95
    • hard-enable the defmt Cargo feature by @japaric in https://github.com/knurling-rs/probe-run/pull/96
    • print supported defmt version from --version by @japaric in https://github.com/knurling-rs/probe-run/pull/98

    New Contributors

    • @Bobo1239 made their first contribution in https://github.com/knurling-rs/probe-run/pull/25
    • @therealprof made their first contribution in https://github.com/knurling-rs/probe-run/pull/30
    • @Hoverbear made their first contribution in https://github.com/knurling-rs/probe-run/pull/41
    • @aurelj made their first contribution in https://github.com/knurling-rs/probe-run/pull/49
    • @eboskma made their first contribution in https://github.com/knurling-rs/probe-run/pull/88

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.1.3...v0.1.4

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

    What's Changed

    • Remove comment about missing hard-float support by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/20
    • Prepare 0.1.3 by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/21

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

    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Nov 10, 2021)

    What's Changed

    • Update dependencies by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/10
    • FPU register unstacking support by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/11
    • Simplify print_chips by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/13
    • Clean up CLI argument handling by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/12
    • prepare for v0.1.2 release by @japaric in https://github.com/knurling-rs/probe-run/pull/19

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.1.1...v0.1.2

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

    What's Changed

    • adapt to changes in defmt by @japaric in https://github.com/knurling-rs/probe-run/pull/6
    • improve error messages and docs by @japaric in https://github.com/knurling-rs/probe-run/pull/7

    Full Changelog: https://github.com/knurling-rs/probe-run/compare/v0.1.0...v0.1.1

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

    What's Changed

    • deal with rename, add CI, add note about issue #1 by @japaric in https://github.com/knurling-rs/probe-run/pull/3
    • Update readme by @jonas-schievink in https://github.com/knurling-rs/probe-run/pull/4

    Full Changelog: https://github.com/knurling-rs/probe-run/commits/v0.1.0

    Source code(tar.gz)
    Source code(zip)
Owner
Knurling
Get a handle on bare metal Rust
Knurling
Trying embedded Rust on the Pinecil GD32VF103 RISC-V device.

Pinecil GD32VF103 RISC-V Rust Demos My personal collection of Rust demos running on the PINE64 Pinecil portable soldering iron, featuring a GD32VF103T

alvinhochun 39 Nov 28, 2022
Shows how to implement USB device on RP2040 in Rust, in a single file, with no hidden parts.

Rust RP2040 USB Device Example This is a worked example of implementing a USB device on the RP2040 microcontroller, in Rust. It is designed to be easy

Cliff L. Biffle 9 Dec 7, 2022
Rust wrapper for the LeapC Ultraleap (Leap Motion) hand tracking device API.

LeapRS LeapRS is a safe wrapper for LeapC, the Leap Motion C API. It uses the generated binding provided by leap-sys. This is an API for accessing Lea

Pierre Lulé 4 Oct 10, 2022
A highly extensible runner that can execute any workflow.

Astro run Astro Run is a highly extensible runner that can execute any workflow. Features Workflow runtime for Docker Support for gRPC server to coord

Panghu 3 Aug 19, 2023
Serialize & deserialize device tree binary using serde

serde_device_tree Use serde framework to deserialize Device Tree Blob binary files; no_std compatible. Use this library Run example: cargo run --examp

Luo Jia 20 Aug 20, 2022
Custom formatting for Rust.

custom-format This crate extends the standard formatting syntax with custom format specifiers, by providing custom formatting macros. It uses : (a spa

null 6 Dec 14, 2022
Custom deserialization for fields that can be specified as multiple types.

serde-this-or-that Custom deserialization for fields that can be specified as multiple types. This crate works with Cargo with a Cargo.toml like: [dep

Ritvik Nag 7 Aug 25, 2022
proc-macro to help with using surrealdb's custom functions

SurrealDB Functions This is a proc-macro crate that given a path to a .surql file or a folder of .surql files, will parse DEFINE FUNCTION fn::s inside

Aly 5 Jul 30, 2023
Create custom ID types that are guaranteed to be valid `RecordID` in SurrealDB

surreal-id The surreal-id crate offers a standardized way to create and validate IDs in your application for usage with SurrealDB. Using the NewId tra

Liam Woodleigh-Hardinge 4 Oct 5, 2023
A library for extracting #[no_mangle] pub extern "C" functions (https://docs.rust-embedded.org/book/interoperability/rust-with-c.html#no_mangle)

A library for extracting #[no_mangle] pub extern "C" functions In order to expose a function with C binary interface for interoperability with other p

Dmitrii - Demenev 0 Feb 17, 2022
An embedded key-value storage for learning purpose, which is based on the idea of SSTable / LSM-tree.

Nouzdb An embedded key-value storage for learning purpose, which is based on the idea of SSTable / LSM-tree. Plan Implement a memtable. Implement the

Nouzan 1 Dec 5, 2021
Key-value store for embedded systems, for raw NOR flash, using an LSM-Tree.

ekv Key-value store for embedded systems, for raw NOR flash, using an LSM-Tree. Features None yet TODO Everything Minimum supported Rust version (MSRV

Dario Nieuwenhuis 16 Nov 22, 2022
TypeRust - simple Rust playground where you can build or run your Rust code and share it with others

Rust playground Welcome to TypeRust! This is a simple Rust playground where you can build or run your Rust code and share it with others. There are a

Kirill Vasiltsov 28 Dec 12, 2022
Rust, cargo and QEMU setup for multi-architecture OS development.

rust-osdev-jumpstart Rust, cargo and QEMU setup for multi-architecture OS development. Goal This repo should give you a boost in starting a bare-metal

Alister Lee 27 Nov 20, 2022
ArbOS operating system, to run at Layer 2 on Arbitrum chains. Also a compiler for Mini, the language in which ArbOS is written.

ArbOS and Mini compiler ArbOS is the "operating system" that runs at Layer 2 on an Arbitrum chain, to manage the chain's operation, maintain security,

Offchain Labs 88 Nov 6, 2022
Multi-platform desktop app to download and run Large Language Models(LLM) locally in your computer.

Multi-platform desktop app to download and run Large Language Models(LLM) locally in your computer ?? Download | Give it a Star ⭐ | Share it on Twitte

Julio Andres 73 Jun 15, 2023
A cargo plugin for showing a tree-like overview of a crate's modules.

cargo-modules Synopsis A cargo plugin for showing an overview of a crate's modules. Motivation With time, as your Rust projects grow bigger and bigger

Vincent Esche 445 Jan 3, 2023
A cargo subcommand to fetch the $OUT_DIR environment variable from build scripts

cargo-outdir A cargo subcommand to fetch the $OUT_DIR variable from build scripts. This is extremely useful to inspect the output of automatically gen

null 2 Sep 29, 2022
cargo-add command to make dependencies into dylibs

cargo add-dynamic This cargo command allows to wrap dependencies as dylibs. For why you might want this see Speeding up incremental Rust compilation w

Robert Krahn 62 Dec 27, 2022