![](https://jhalfmoon.com/dbc/wp-content/uploads/2018/11/JH-2-150x150.png)
前回、TinyGoのオブジェクトをラズパイPicoに書き込むのに「まどろっこしい」方法を書いてしまいました。そしたらば「takasago様」からツイッターで「もっといい方法」お教えいただきました。ありがとうございます。やってみました。良い感じです。今回はついでにVSCodeも使えるように。細かい躓きはいつもあり。
※「Pico三昧」投稿順 index はこちら
Raspberry Pi 4 model Bを「母艦」としてラズパイPico用の TinyGo を始めたので、折角のSWDデバッグ用の配線を使いたく、前回はOpenOCDを起動してから、別ウインドウで gdb 走らせてオブジェクトをLoadするというとてもまどろっこしい方法をとっておりました。しかし、天の声あり、tinygo flashで
-programmer=raspberrypi-swd
を付加するべし、と。やってみました。こんな感じ。
長いので途中省略、最後の方が以下に。
ちゃんと書き込んでオブジェクト動作しました。ありがとうございます。これでらくちんだね。
次はVSCode
通例、ラズパイ4で何か作業するときは、WindowsPC上のVSCodeからラズパイ4にSSH接続でやっています。前回は直接ラズパイ4に入っていたので、nanoで編集してました(蛇足ですが、別件「スマホでGo!」で nano使っているのです。スマホ上での編集ではvimよりnanoの方が楽に思えます。それで最近nanoをおぼえましたです。)
VSCodeの拡張機能のTinyGoをインストールすれば良いのでしょ、と以下をリモート接続先にインストールしましたです。なお、TinyGo機能をインストールするとご本家Goの拡張機能もインストールされるようです。
さて、リモート接続したVSCodeで、動作実験に使っているHello.go のソース(前回より若干長くなっとります)を開いたところが以下に。
不吉な赤の波線があり
問題のエラーが以下に。どゆこと、machineモジュールがインポートできないって。これが無いとラズパイPicoのハード機能を使えないじゃん!
そうだったです。TinyGoの拡張機能は悪くありません。私が、まだラズパイPico用にソース書くのだ、と宣言してなかったためでした。コマンドパレット開いて、TinyGo target で、ターゲットを pico にすればよかったのです。
ターゲットを設定すると以下のように青のステータスライン上に、TinyGo: pico と表示されるようになります。
これで、上記の不吉なエラーは消えました。お教えいただいた方法でフラッシュに書き込めば、以下のように動作OK。シリアル出力だけでなく、ちゃんとオンボードLEDも点滅しとりますぞ。
GDBはシンボリックデバッグできないでいます
SWDでの接続方法をお教えいただいたので、調子にのってGDBでのデバッグを行うべし、とやってみました。GDBの起動の様子が以下に。
こちらでもオブジェクトのロードは成功しているのですが、よく見ると不吉なエラーがでています。
Dwarf Error: Cannot handle…以下省略
どうもデバッグ用のシンボルをロードできないみたいです。
実際、b main みたいにしても main など定義なし、とつれないです。list コマンドも効きませぬ。シンボルが無いので当たり前か。
でもcontすればプログラムは動作しますし、CTRL-Cでデバッガに制御が戻ります。runすれば頭から走り直しもできると。どうもアセンブラレベルではデバッグできそうな感じ。不在なのはシンボルだけ。
大昔、初期のMS-DOS、シンボリックデバッガのSYMDEBがなくて、debugだったことを思い出しましたぜ。リスティングファイルを作ってイチイチ16進数を打ち込んでおれば、デバッグできないことは無い。でもとてもメンドイ。シンボルなしのデバッガなど今時手も足もでまへん。まあ、おいおいやね。いろいろやってみると。