ArduinoのRISC-V CH32V003のdelayなど時間系の関数の結果が変だなぁとは思っていましたので,一応どういう現状か知っておこうと調べてみました。

機材は
・MPU:CH32V003J4M6 (8pin) とCH32V003F4P6 (20pin)
・Boards;CH32 MCU EVT Boards by WCH Ver. 1.0.3
で,出力波形をロジアナで調べるなどしてみました。





[ delayMicroseconds() ]
 引数のマイクロ秒のディレイを実行する関数ですね。

PC1からディレイを効かしながら出力する簡単なプログラムです。



出力結果では引数の2倍の時間がディレイされているようです。




[ delay() ]
 引数のミリ秒のディレイを実行する関数です。

ディレイをミリ秒に変更しただけのプログラムです。



同じように出力結果は引数の2倍の時間がディレイされているようです。




[ millis() と micros() ]
 プログラムのスタートからの経過時間をミリ秒(millis)かマイクロ秒(micros)で得る関数です。




1秒間隔で値を出力しようと思い,delay(500)でやってみましたが,,delayの引数と同じ数値で上がって行っているようです,,(^^;;;;;

実際の出力は1秒間隔でされていたと思いますので,millis, micros関数はともに返り値の2倍の時間が経過していると考えるのが良いのでしょうね,,,???



以上のように出力波形などをみると,CH32V300xのArduinoボード(Ver. 1.0.3)ではdelayなどの時間系でデフォルトの調整が不十分な現状のようです。

UARTのボーレートなど,接続系のクロックは問題がないので,ま,そういうものかと考えてプログラムを書けば良いのでしょうが,,スッキリはしませんね(^^;;;;;


他の開発環境では起こらない事なのかもしれませんが,"あれして,これして,ちょっとmakeしてこうすれば良い事じゃん” 的な話には付き合えない素人オヤジなので,できる事でぼちぼちやっていきましょう。