Closed4

RasPi Pico SDKの sm_config_set_in_pins()

堀江誠一堀江誠一

sm_config_set_in_pins()には存在意義が無い

RasPi Pico SDK 2.0.0のPIO APIのうち、out命令に関するピン構成のAPIだけ抜き出すと次のようになっている(static inlineを削ってプロトタイプの形にしている)。ここでsm_config_set_out_pins()はsm_config_set_out_pin_base()とsm_config_set_out_pin_count()を呼び出しているだけである。

void sm_config_set_out_pin_base(pio_sm_config *c, uint out_base);
void sm_config_set_out_pin_count(pio_sm_config *c, uint out_count);
void sm_config_set_out_pins(pio_sm_config *c, uint out_base, uint out_count);

同様にset命令に関するピン構成のAPIだけ抜き出すと次のようになっている。ここでsm_config_set_set_pins()はsm_config_set_set_pin_base()とsm_config_set_set_pin_count()を呼び出しているだけである。

void sm_config_set_set_pin_base(pio_sm_config *c, uint set_base);
void sm_config_set_set_pin_count(pio_sm_config *c, uint set_count);
void sm_config_set_set_pins(pio_sm_config *c, uint set_base, uint set_count);

さらににin命令に関するピン構成のAPIだけ抜き出すと次のようになっている。ここでsm_config_set_in_pins()はsm_config_set_set_pin_base()を呼び出しているだけである。

void sm_config_set_in_pin_base(pio_sm_config *c, uint in_base) ;
void sm_config_set_in_pin_count(pio_sm_config *c, uint in_count);
void sm_config_set_in_pins(pio_sm_config *c, uint in_base);

おかしいよねぇ!

in命令のAPIだけsm_config_set_XX_pins() APIに存在価値が無い。ちなみにソースコード上の位置もこのAPIだけ変なので、たぶんコピペミス。

堀江誠一堀江誠一

SDKにはリポートされていない

GitHubのRasPi Pico SDKには、IssueもPull Requestも寄せられていない。

今やってるプロジェクトがひと区切りついたら考えてみる。

堀江誠一堀江誠一
堀江誠一堀江誠一

現在の実装で正しいとのこと

背景にはRP2040のPIO実装がある。RP2040にはPIOのOUTピンの数を指定するSMx_PINCTR.OUT_COUNTフィールドがあるが、INピンの数を指定するIN_COUNTフィールドが無い。

なので、そもそも sm_config_in_pin_count()もなかった(か、何もしていなかった)模様。そういうわけで、sm_config_in_pins()はsm_config_in_pin_base()を呼ぶだけだった。

RP2350になってPIOにSMx_SHIFTCTRL.IN_COUNTフィールドが実装された。それに従いsm_config_in_pin_count()が実装されたが、sm_config_in_pins()は互換性のためにそのまま留め置かれているとのこと。

C++ならデフォルト値付きの引数を追加して解決できるが、仕方ない。

このスクラップは2ヶ月前にクローズされました