mruby/cのI2C,SPI,UARTのunit
mruby/cで、UARTに加えてI2CやSPIでunit番号使えるようにしつつ、必要無いときには使わないようにしたいと考えていたが、良い方法を思いついた。 例えばNO_UART_HANDLEという定数を定義してある場合には、handleとunitを無くして、そうで無いときにはunitを処理するという方法である。
このようにすれば、マイコン毎にhandleを定義するかどうかを変えることができ、mruby/c側のプログラムでそれを判定して、コードを分岐すれば良いのである。 しかし、マイコン側の関数は、呼び出すたびにhandleを使う場合と使わない場合で分岐するか、引数の数を等しくするためにhandleを使わないときにはダミーの引数を指定するようにしなければならない。 後者の方が無難かな。
そのためには、マイコン側としてこれまで書いてきたarduino, ch32, gv32vfの三つのプログラムを修正しなければならない。 これらのマイコンには、複数のI2CやSPIを持っているものもあったのだが、これまではそれらの一つしか有効にしていなかった。 これらを有効にするよい機会かも知れないけど、コンパイルサイズも大きくなってしまうだろうから、それが問題だ。 I2Cの場合には、アドレスで複数のデバイスと通信できるのに、複数のI2Cを持つ必要はあまり無い気もする。 SPIは複数のデバイスを繋ぐのは得意では無いので、複数のSPIがあるのは納得できるけど。 Arduinoでも、ハードでは複数使える場合でも、一つしか定義されていないことが普通のようだ。 mruby/c側だけ書いておいて、マイコン側は後から考えることにしよう。