Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
elfmimi opened this issue May 5, 2022 · 16 comments
Closed

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

elfmimi opened this issue May 5, 2022 · 16 comments

Comments

@elfmimi
Copy link
Contributor

elfmimi commented May 5, 2022

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

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

@elfmimi elfmimi changed the title 各種のボードへの対応 各種RP2040ボードへの対応 May 5, 2022
@tnishinaga
Copy link
Contributor

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

@elfmimi
Copy link
Contributor Author

elfmimi commented May 5, 2022

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
Copy link
Owner

ciniml commented May 5, 2022

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

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

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

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

@elfmimi
Copy link
Contributor Author

elfmimi commented May 5, 2022

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

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

@ciniml
Copy link
Owner

ciniml commented May 6, 2022

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

@ciniml
Copy link
Owner

ciniml commented May 8, 2022

くくりだし方針

  • C/C++ SDKの構成としては、rp2040を含む rp2 系共通部分と、 rp2040 SoC固有部分、 RPi Picoのボード定義の構成になっている。
  • rp-rs/rp-hal は現時点ではRP2系ではなく、RP2040向けのクレート となっている。
  • rust-dapのRP2040対応もRP2040の共通項をくくりだし、 rust-dap-rp2040 クレートとする

@ciniml
Copy link
Owner

ciniml commented May 8, 2022

  • main相当の関数に関しては、RTICつかってるのもありくくりだすのは難しいと思われる。

@ciniml
Copy link
Owner

ciniml commented May 8, 2022

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

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

@ciniml
Copy link
Owner

ciniml commented May 8, 2022

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

@ciniml
Copy link
Owner

ciniml commented May 8, 2022

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

@ciniml
Copy link
Owner

ciniml commented May 8, 2022

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
Copy link
Owner

ciniml commented May 8, 2022

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

rust-lang/cargo#9537

@ciniml
Copy link
Owner

ciniml commented May 8, 2022

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

@ciniml
Copy link
Owner

ciniml commented May 8, 2022

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

line_codingとswdio_pinは共通化できた

5fd6a7a

@ciniml
Copy link
Owner

ciniml commented May 8, 2022

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

@ciniml
Copy link
Owner

ciniml commented May 15, 2022

#15 をマージしたので、一旦各RP2040ボードへの対応は

  • 共通項を rust-dap-rp2040 にいれる
  • 各ボードの定義は今まで通り boards/ にいれる

という方針にする。

@ciniml ciniml closed this as completed May 15, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants