ciniml / rust-dap

CMSIS-DAP Rust implementation
Apache License 2.0
88 stars 10 forks source link

各種RP2040ボードへの対応 #14

Closed elfmimi closed 2 years ago

elfmimi commented 2 years ago

https://github.com/ciniml/rust-dap/pull/13 Add Raspberry Pi Pico というプル-リクエストが挙がっていますが\ 基本的に、一つのバイナリでほとんどのRP2040ボードに対応できるのではないかと思っています。\ LEDの接続方式だけ切り替えたいというのが実情ではないでしょうか?

例えば feature によってビルドし分けることが出来るのではないかと気になっています。\ こういう場合はどうするとスジが良いのでしょう?

tnishinaga commented 2 years ago

私はSWD(将来的にはJTAGも)のポートも変更したいです。 よりよい方法があればそちらに合わせます。

elfmimi commented 2 years ago

Cargo.toml に複数の [[bin]] を指定すると、それぞれビルドしてくれるようです。

[[bin]]
name = "rpi-pico"
path = "src/main.rs"

[[bin]]
name = "xiao-rp2040"
path = "src/main.rs"

しかし それぞれの [[bin]] に独立して feature の有無を指定することは今のところ出来ないようでした。

const BIN_NAME: &str = env!("CARGO_BIN_NAME");\ を使った判定であれば、事実上コンパイル時の評価として扱えそうです。

うーん、どうなんでしょうか。

ciniml commented 2 years ago

基本的に embedded-hal を使ったBSPはボードごとに用意される前提だと思うので、単一バイナリで複数ボードというのはBSPの方針に合わないんじゃないかなと思ってます。

XIAO RP2040向けのポート設定のバイナリ→Raspberry Pi PicoはPicoのほうがボード外に出ているピンが多いので対応可能ですが、逆は不可能ですし、今後出てくるRP2040のボードがすべて同じピンが出ているとも限らないです。

Seeed以外が出しているRP2040ボードでよく似た形状のものもいくつかありますし。 (私自身は現状XIAOと別のボードを使う予定はないですが…)

なので、RP2040での共通事項を rust-dap-rp2040 クレートなどにくくりだしたうえで、RP2040ボードごとにピン定義や初期化をする構造にするのがいいかなと思います。

elfmimi commented 2 years ago

回答ありがとうございます。

リポジトリのオーナーとして\ ごった煮でとりあえず動作するものを作るよりも、\ Rust らしく再利用できるクレートとして整備されて行くのを見たい、ということで了解しました。

ciniml commented 2 years ago

とりあえずくくりだすのは近いうちにやるとして、一旦 #13 マージしてしまおうかなと思います。

ciniml commented 2 years ago

くくりだし方針

ciniml commented 2 years ago
ciniml commented 2 years ago

いい加減 Workspaceにして管理したほうがいい気がしてきた。

https://doc.rust-jp.rs/book-ja/ch14-03-cargo-workspaces.html

ciniml commented 2 years ago

現状、 rust-dap のツリーの中に他のクレート含んでるので、 rp-rs/rp-hal みたいに rust-dapもディレクトリを作った方がよさそう。

ciniml commented 2 years ago

うーん、 workspace にすると依存関係を共有するので、各ボードでのcortex-mクレートとかが同じバージョンに解決できる状態じゃないとダメになりそうか…

ciniml commented 2 years ago

workspaceにするとmemory.xをみつけられなくなる?

  = note: rust-lld: error: /home/kenta/repos/rust-dap/14-rp2040_boards/target/thumbv6m-none-eabi/debug/build/cortex-m-rt-7937df25112c458d/out/link.x:23: cannot find linker script memory.x
          >>> INCLUDE memory.x
          >>>         ^       
ciniml commented 2 years ago

うーん、cargoにそれっぽいissueあるけど、workspaceだとダメそうな感じか

https://github.com/rust-lang/cargo/issues/9537

ciniml commented 2 years ago

とりあえず共通箇所をくくりだそうとしているが、本体が RTICのappなので外に出すのが難しいな…

ciniml commented 2 years ago

ほとんどRPi PicoとXIAO RP2040がコピペのままだけど、一旦仕方ないか…

line_codingとswdio_pinは共通化できた

https://github.com/ciniml/rust-dap/commit/5fd6a7aab4f6636a3a95322248b7fd6c85a8fdde

ciniml commented 2 years ago

@tnishinaga @elfmimi ↑の変更内容で、この辺もうちょい何とかならんの?みたいなところがありましたら、ご指摘いただければと思います。

ciniml commented 2 years ago

https://github.com/ciniml/rust-dap/pull/15 をマージしたので、一旦各RP2040ボードへの対応は

という方針にする。