---
# System prepended metadata

title: probe-rs Roadmap

---

# probe-rs Roadmap

## probe-rs library
Order of the following list does not matter yet.

- Features
    - support for targets with multiple Cores
    - Sequences support (convert XML+C dialect initialization scripts to [Rhai](https://github.com/jonathandturner/rhai))
    - Target-definitions patches
    - Architectures
        - Extend Riscv
        - MSP430
        - [AVR](https://www.avr-rust.com/)
            - tracking issue https://github.com/probe-rs/probe-rs/issues/391
            - support avr arduinos using debug-wire
                - use arduino to debug arduino https://sites.google.com/site/wayneholder/debugwire
                - use ftdi chip on arduino as debug wire driver
            - alternative implemenation of functions from avr-dude
                - there are existing rust implemenations which could maybe be used/ fused
        - MIPS
    - support for backtraces (might already work/ together with defmt)
    - gdb support HW watchpoints

- Stability
    - remote logging integration (done in https://github.com/probe-rs/probe-rs/pull/420)
    - Fix JLink speed issues
        - batching https://github.com/probe-rs/probe-rs/issues/297
    - Test-Hive
    - Systematic unittests
        - tests which run on actual hardware using probe-rs as a library to control the hardware
    - improve GDB useability
        - https://microsoft.github.io/debug-adapter-protocol/
        - https://github.com/headcrab-rs/headcrab
    - Code documentation
    - Improve errors (add more Context/ Traces https://github.com/probe-rs/probe-rs/issues/257)
    - Code cleanup
    - Architecture (code wise) documentation

- UX
    - PR examples to HALs of how to use embed/ embed2, currenlty mainly OpenOCD is given as an example
    - Tell the user when the linker script might be broken (wrong ram sections)
    - Tell the user that probes might be inacessible due to permissions when no probes are listed or the probe can't be opened
    - Tell the user when the core might be locked
    - Tell the user when there might be an issue with wait for interrupt (WFI)
    - Tell the user when they might have compiled for the wrong arch
    - Tell the user when they might have the wrong HAL
    - make it easier for probe-rs maintainers to publish/ shorter publish workflow
    - Tell the user when they should be using --nmagic
    - OS specific FAQs
    - Connect under reset for cargo-embed

- Docs
    - different docs for professionals end enthusiasts (different needs)
        - book with two chapters
    - FTDI support
    - document all abbreviations/ reduce abbreviations to a minimum
    - different debugging protocols/ pro/ cons/ what should be preferred
    - Prerequisites in general
    - Github Sponsoring info
    - reach out to universities which frequently need remote access for students for boards and could use the probe-rs library
        - student projects/ contributing to probe-rs
    - migration guide from OpenOCD
        - many people will come from OpenOCD
        - how to do x in cargo-embed
        - what can OpenOCD not do (use probe-rs as a library)
    - more examples of possible things to build with probe-rs as a library
        - maybe someone even wants to maintain Pyo3 python bindings 

## hs-probe
- how to buy
    - find someone who can manfucature it/ do the shipping
    - https://twitter.com/korken89/status/1321443204810551302
- promote on probe-rs side
- promote for cpp use cases
- port [hs-probe-firmware](https://github.com/probe-rs/hs-probe-firmware) to widely available hardware (with limited/ slower functionality)
    - blackpill
    - bluepill
    - Why? 
        - many probes/ implementations don't support SWO and thus no ITM
        - hs-probe hardware not yet widely available
        - whole stack in rust much better for debugging and understanding

## Vscode ([repository](https://github.com/probe-rs/vscode))
- https://microsoft.github.io/debug-adapter-protocol/
- ... Many things

## cargo-embed v2
- Server/ Client architecture
- Server:
    - emulate usability of `npm run dev`
- Clients:
    - Graphing (https://github.com/probe-rs/cargo-embed/pull/32)
        - ITM traces https://github.com/probe-rs/itm-tracer
    - GDB
    - LLDB [using gdb-remote protocol]
        - https://lldb.llvm.org/use/remote.html (are there usefull extensions?)
        - https://www.youtube.com/watch?v=281sEoJYm8E
    - SVD viewer https://twitter.com/yatekii/status/1295854391635869696
    - flashing
        - flash all kinds of files (elf, obj, ...)
        - verify flashed files
        - download flash
- API
    - separate crate with RPC API to build clients which connect to 
    - client can get config of server
        - not every client should invent a new config format for chip config
- Better config
    - not too many differenct config locations/ overrides
    - edit config through browser like *fish shell* [can do](https://fishshell.com/docs/current/cmds/fish_config.html)

- usable from other languages
    - first they use rust for flashing and then they patch something in probe-rs and then they use it for small embedded projects on chips and then for bigger ones
        - like zig: "Zig is better at using C libraries than C is at using C libraries" 
        - rust is better at programming embedded cpp code than cpp
    - zig
        - possible PR: replace OpenOCD with cargo embed and call from `build.zig` https://github.com/tralamazza/embedded_zig#running-on-a-bluepill
    - cpp
        - add cmake based example with bluepill chip and rtt and modern cpp 
            - call cargo from cmake https://github.com/AndrewGaspar/corrosion (link rust embedded libs into rust)
            - cpp side/ cmake scripts: https://www.youtube.com/watch?v=c9Xt6Me3mJ4
    - c
- use as [cargo runner](https://doc.rust-lang.org/cargo/reference/config.html#target)
- Make it possible to exec RTT handlers:
    - exec:
        - command: my-graphing-tool.py
          stdin: rtt-up-1
        - command: my-graphing-tool.py
          stdin: rtt-up-2
- Catch all view for all selected channels