Pico三昧(15) PicoでもGo!Flash書き込み方法教えてもらった+VSCode

Joseph Halfmoon

前回、TinyGoのオブジェクトをラズパイPicoに書き込むのに「まどろっこしい」方法を書いてしまいました。そしたらば「takasago様」からツイッターで「もっといい方法」お教えいただきました。ありがとうございます。やってみました。良い感じです。今回はついでにVSCodeも使えるように。細かい躓きはいつもあり。

Raspberry Pi 4 model Bを「母艦」としてラズパイPico用の TinyGo を始めたので、折角のSWDデバッグ用の配線を使いたく、前回はOpenOCDを起動してから、別ウインドウで gdb 走らせてオブジェクトをLoadするというとてもまどろっこしい方法をとっておりました。しかし、天の声あり、tinygo flashで

-programmer=raspberrypi-swd

を付加するべし、と。やってみました。こんな感じ。

flash000

長いので途中省略、最後の方が以下に。

flash001

ちゃんと書き込んでオブジェクト動作しました。ありがとうございます。これでらくちんだね。

次はVSCode

通例、ラズパイ4で何か作業するときは、WindowsPC上のVSCodeからラズパイ4にSSH接続でやっています。前回は直接ラズパイ4に入っていたので、nanoで編集してました(蛇足ですが、別件「スマホでGo!」で nano使っているのです。スマホ上での編集ではvimよりnanoの方が楽に思えます。それで最近nanoをおぼえましたです。)

VSCodeの拡張機能のTinyGoをインストールすれば良いのでしょ、と以下をリモート接続先にインストールしましたです。なお、TinyGo機能をインストールするとご本家Goの拡張機能もインストールされるようです。

VScodeTinyGo

さて、リモート接続したVSCodeで、動作実験に使っているHello.go のソース(前回より若干長くなっとります)を開いたところが以下に。

不吉な赤の波線があり

VScodeHello

問題のエラーが以下に。どゆこと、machineモジュールがインポートできないって。これが無いとラズパイPicoのハード機能を使えないじゃん!

VScodeERROR

そうだったです。TinyGoの拡張機能は悪くありません。私が、まだラズパイPico用にソース書くのだ、と宣言してなかったためでした。コマンドパレット開いて、TinyGo target で、ターゲットを pico にすればよかったのです。

ターゲットを設定すると以下のように青のステータスライン上に、TinyGo: pico と表示されるようになります。

VScodeHelloStatusLine

これで、上記の不吉なエラーは消えました。お教えいただいた方法でフラッシュに書き込めば、以下のように動作OK。シリアル出力だけでなく、ちゃんとオンボードLEDも点滅しとりますぞ。

running

GDBはシンボリックデバッグできないでいます

SWDでの接続方法をお教えいただいたので、調子にのってGDBでのデバッグを行うべし、とやってみました。GDBの起動の様子が以下に。

gdb000

こちらでもオブジェクトのロードは成功しているのですが、よく見ると不吉なエラーがでています。

Dwarf Error: Cannot handle…以下省略

どうもデバッグ用のシンボルをロードできないみたいです。

gdb001_NOSYM_ERROR

実際、b main みたいにしても main など定義なし、とつれないです。list コマンドも効きませぬ。シンボルが無いので当たり前か。

でもcontすればプログラムは動作しますし、CTRL-Cでデバッガに制御が戻ります。runすれば頭から走り直しもできると。どうもアセンブラレベルではデバッグできそうな感じ。不在なのはシンボルだけ。gdb002

大昔、初期のMS-DOS、シンボリックデバッガのSYMDEBがなくて、debugだったことを思い出しましたぜ。リスティングファイルを作ってイチイチ16進数を打ち込んでおれば、デバッグできないことは無い。でもとてもメンドイ。シンボルなしのデバッガなど今時手も足もでまへん。まあ、おいおいやね。いろいろやってみると。

Pico三昧(14) PicoでもGo! TinyGoのオブジェクトがPico上で走るまで へ戻る