メモ:WindowsでDocker DesktopなしでDevcontainerを使うときは"Execute In WSL"の設定をオンに

宗教上の理由でDocker Desktopを入れたくないのでWSLのDockerを使っている。 当然devcontainerでもWSLを使いたいので適当にググって出てきた手順を試してたけど、なぜかWindows側のdockerが使われてうまくいかなかった(Open in WSLしてからやってもなぜかWindows側が使われる)。

なんか設定あるのかな?、と思ってDev Containers: Settingsを開くとそれっぽい項目があって、チェックを入れるとうまく動いた。

1年くらい前に実装されたものなので、それより前に書かれた記事では考慮できてなさそう。

RustからRのC APIを使う時、エラーをちゃんとハンドリングしたい

RのC APIを使う時、当然ですが任意の操作は失敗する可能性があります。 このために、RのコードでいうtryCatch()にあたるものがいくつか提供されています。

https://cran.r-project.org/doc/manuals/r-release/R-exts.html#Condition-handling-and-cleanup-code

この中で、もっともオーバーヘッドが少ないのが R_UnwindProtect() であり、cpp11 でも extendr でも使われているものです。 しかし、これを使うにはけっこう難しい話を理解する必要があります。

続きを読む

メモ:2023年4月時点で rp-hal と rtic を使おうとして遭遇した問題

前回、大変そう、みたいなことを書いたけど、実際大変だったので遭遇した問題をメモっておく。 たぶん1年後くらいに見るとだいたい解決されてそうな気はする。

続きを読む

メモ:rp-hal(RustでRaspberry Pi Picoをプログラミングするやつ)でタイマーを使いたい

ある関数を定期的に実行したいとき、公式のSDKだと

  • add_repeating_timer_ms()
  • add_repeating_timer_us()

という関数が用意されていて、callback関数を渡すとそれを定期的に実行してくれるらしい。 実際のコードはこのへんとか、RP2040のデータシートの「4.6.4. Timer - Programmer’s Model」あたりにある。

(実際にやってることはこのへんらしい)

で、同じことを Rust でもやりたかったけど、こんなお手軽にやる方法がなかった。 まだよくわかってないけど、難しかったのでとりあえずメモ。

続きを読む

メモ:rp-hal(RustでRaspberry Pi Picoをプログラミングするやつ)でPIOでシフトレジスタIC(74HC595)を使う

すでに詳しくブログを書かれている方がいるので、書くほどでもないと思いつつメモ。

続きを読む

メモ:rp-hal(RustでRaspberry Pi Picoをプログラミングするやつ)でPIOを使ってPWMする

PIOでPWMを実現するのは、公式のexamplesにコードがある。

rp-halでもpio-rs経由でPIOが使えて、このコードをRustに書き直したバージョンが以下のコードらしい。 これを理解するのにちょっと手間取ったのでメモ。

続きを読む