生成AI、Gemini様に「タイマで割り込みをするプログラムを書いて」とお願いしてます。前回は5機種目、ラズパイPico機のMicroPython環境でした。見事に実機動作。Gemini様は2勝2敗1引き分けに星を戻しました。さて今回は同じRaspberry Pi PicoでもC/C++ SDK環境でお願いしてみます。
※Google様の生成AI、Gemini(無料プランだけれども)を使ってソフトをコーディングしてもらっています。
プロンプトへの問いかけ
前回は「Raspberry Pi Picoで1ms毎にタイマで割り込みをするプログラムを書いて」とお願いしたところ、まさかのC/C++とMicroPythonの両案併記でご回答をいただきました。前回MicroPythonの方だけ動作確認をしたので、今回はC言語限定で行きたいと思います。
プロンプトへの最初の茫漠とした入力は以下としました。
Raspberry Pi Picoで1ms毎にタイマで割り込みをするプログラムをC言語で書いて
結果は三案とも、Pico C SDKを使い、「出力」としてはLEDを点滅させるコードが出来てきました。前回の茫漠とした入力では、標準出力へのprintfであったのに比べるとCと指定されて考え直したのかもしれませぬ(C言語で標準出力を使うためには必要なライブラリとリンクしたりとかちょっとメンドくなります。その点、LEDを点滅させるだけなら簡単。)
しかし、当方からはもう一つおっかぶせて以下もお願いいたしました。
CMakeLists.txtも
ぶっきらぼうな入力ですが、Gemini様ならお分かりの筈。Pico C SDKの場合、標準では cmake 使ってビルドするので、そのためのCMakeLists.txtも作ってね、というお願いです。自分で作るのちょっとメンドイから。
CMakeLists.txt
Gemini様にCMakeLists.txtを作っていただいたのですが、ちょっとね。折角生成してもらったのに難癖つけて誠に申し訳ないんだけれども「ほんわかした一般的なCMakeLists.txt、Pico C SDK用の各種設定などは自分でやってという感じ」です。メンドイところは解決していただいてない?だいたい、当方のビルド環境(Windows11上のPico C SDK)のパスの在処とか、ライブラリのバージョン(1.5.0)とか「コマケー話」はGemini様には決められないハズ。その辺をぐちゅぐちゅ説明していったらGemini様は書けるのかも知れませんが、自分で書くより遥かにメンドイっす。
結局CMakeLists.txtについては自前で作る(実際は、他プロジェクトで作成済のファイルをコピペして小修正)ことにいたしました。これが一番お楽。
Cのソース
生成いただいたCのソースは「動きそうな」雰囲気がバリバリあったのですが、ビルドしたところエラーがでました。こんな感じ。
結局のところ、Gemini様のソースでは、add_repeating_timer_msというSDKの関数に2つしか引数を与えてなかったのだけれども、当方環境のSDKは4個必要としているみたいです。
以下にある御本家のマニュアルを探索してみると
上記のページ内の pico_time >> repeating_timer というところに問題の関数の説明が掲載されてます。確かに引数は4つ必要ね。そこで引数4個になるようにソースを修正(勿論、変数を1個追加宣言した上で、割り込みハンドラの型も変更しました。) ビルドしたところ問題なく通りました。
上記のマニュアルページは SDKのバージョン 1.5.1に対するもの。当方手元の環境はちょっと古くて 1.5.0 でした。この2バージョンの間では互換とれているみたいです。もしかするとGemini様がお勉強していたのはもっと古いバージョンだったのかしら。
生成されたオブジェクト(.UF2形式)をRaspberry Pi Pico実機に書き込むと動作しましたぞ(LEDを1ms毎に点滅してもなんだか分からないので、自分で1msと指定したのに、割り込み周期を100msに手修正したオブジェクトでですが。)こんな感じ。
いい線までいってるけれど、ライブラリのバージョンとか、ビルド環境とかは違いがありすぎて詰め切れない感じ。しょうがない?