新しいものづくりがわかるメディア

RSS


Raspberry Pi Picoを始めよう! 週末工作でステップアップ

Raspberry Pi Pico 2の性能を引き出す——Picoprobeでネイティブコード開発に挑戦

Raspberry Pi Picoシリーズの開発言語の一番人気は、おそらくMicroPythonでしょう。マイクロコントローラー(以下、マイコン)のプログラミングはハードルが高くなりがちですが、MicroPythonはREPL(Read-Eval-Print Loop)を備え、リアルタイムでコーディングとデバッグを行えます。このインタープリタ言語ならではの手軽さが、マイコンのハードルを大きく下げてくれます。

もっとも、その代償も小さくはありません。特に実行速度の点で、MicroPythonには大きな制約があります。MicroPythonはコード数行でも、数十μ秒程度の実行時間を見込まねばならず、MicroPythonを時間的にシビアなアプリケーションに使用するのは簡単ではありません。対策として、PIOを使うとか、@micropython.nativeや@micropython.viperなどのMicroPythonが備えるネイティブコード変換機能を使うといった方法があるものの、実行速度が重要なアプリケーションなら最初からネイティブコードで開発したほうが手っ取り早いでしょう。

また、MicroPythonの公式ライブラリはPicoシリーズが持つペリフェラルのすべてをカバーしているわけではありません。たとえば、Picoシリーズのアナログ/デジタルコンバーター(ADC)は最大500kspsの高速サンプリングに対応できるものの、MicroPythonの公式ライブラリではADCの連続サンプリングをサポートしていません。MicroPythonでPicoシリーズの実力を100%引き出すことは容易ではないのです

Raspberry Pi Picoシリーズの純正ネイティブコード開発環境である、Pico C SDKは、CMakeやninja build systemといった、Windowsユーザーに馴染みが薄そうなシステムを使用して構築されています。Linuxにはごく簡単にインストールできる一方、Windowsだとインストールや維持、管理が面倒というハードルがありました。

しかし、Raspberry Pi Pico 2(以下、Pico 2)のリリースに前後して、Raspberry Pi財団純正のVisual Studio Code(以下、VSCode)向けExtension(拡張機能)が利用できるようになり、状況が一変しました。VSCodeにRaspberry Pi Pico Extensionをインストールするだけで、Pico C SDKを使ったネイティブコード開発環境が自動で構築されます。

Windowsユーザーにとっても、ほぼ手間なしでネイティブコード開発環境が利用できるようになったことから、ネイティブコード開発を選択肢の1つとして持っておいて損はありません。

というわけで若干、前フリが長くなりましたが、本稿ではネイティブコード開発環境に必須と言えるデバッグプローブPicoprobeを自作して、VSCodeを使ったネイティブコード開発を実際に紹介していきます。


MicroPythonでもライブラリを使用せずにハードウェアを直接に制御すれば、ADCの高速サンプリングが利用できます。MicroPythonでDMAを援用し高速サンプリングを利用した例をhttps://github.com/jbentham/pico見られます。

デバッグプローブの必要性

MicroPythonは先述のように、REPLコンソール上でコードを実行し、MicroPythonインタープリタと対話してデバッグができます。一方、ネイティブコード開発は、CPUが実行できるマシンコードを作成するので、デバッグはMicroPythonほど簡単ではありません。

最近のマイコンは、マシンコードのデバッグを行う「オンチップデバッグ機構」を内蔵しています。専用のインターフェースを通じてオンチップデバッグ機構とホストPC(※プログラムを作成しているWindows機など)とが通信を行い、対話的にデバッグを行えます。

オンチップデバッグ機構とホストPCとのインターフェースとしては、「JTAG」という標準規格が存在しています。JTAGは、その名前のもとになっている業界団体「Joint Test Action Group」が策定し、IEEE標準に取り込まれたインターフェース規格です。

Raspberry Pi Picoシリーズでは、JTAGの代わりに「SWD(Serial Wire Debug)」と呼ばれる2線式のインターフェースを採用しています。SWDは、イギリスの半導体設計企業であるArmが提唱したインターフェースです。JTAGよりも少ない、わずか2本の信号線でオンチップデバッグ機構とデータのやり取りを行います。簡易版のJTAGと考えていいでしょう。

Picoシリーズでは、USBコネクターの反対側の端にある3ピン(図1)のうちの2ピンがSWDポートです。三角形のマークがシルク印刷されている端子から順に「SWDIO」「GND」「SWCLK」という割当になっています。I2Cと似ていて、SWDIOがデータライン、SWCLKがシリアルクロック信号です。

図 1: PicoシリーズのSWDポート 図 1: PicoシリーズのSWDポート

なお、ピンヘッダー実装済みの「Raspberry Pi Pico H」「Raspberry Pi Pico WH」では、SWDポートに1mmピッチのJST-SH型コネクターが取り付け済みとなっています。後述する純正のデバッグプローブ「Raspberry Pi Debug Probe」には、JST-SH型コネクターケーブルが付属しており、ケーブルで直結できます。

一方、ピンヘッダーなしの標準版Picoシリーズでは、SWDポートが2.54mmピッチのスルーホールになっています。一般的には図1のように標準サイズのピンヘッダーをはんだ付けして使うでしょう。

SWDを通じてデバッグ機構とやり取りするといっても、マイコンのプログラム作成を行うWindows機やLinux機には、SWDと直接的にやり取りできるようなインターフェースはありません。Windows機やLinux機でSWDを介した通信を行うために使うのが、デバッグプローブなどと呼ばれるUSB接続のインターフェースです。

Armは、同社が手掛けるコアIPを採用するマイコン向けにCMSIS(Common Microcontroller Software Interface Standard)と呼ばれるソフトウェアインターフェースの標準化を行っています。また、オンチップデバッグ機構としてCoreSightと呼ばれるCMSIS準拠の技術を提供しており、PicoシリーズもCoreSightを搭載しています。

したがって、CMSIS-DAP(DAPはDebug Access Portの略)と呼ばれるCMSISに準拠するファームウェアを組み込んだデバッグプローブを使って、ホストPC上のデバッガーがPicoシリーズに組み込まれているCoreSightとやり取りを行うというのが標準的なデバッグのスタイルです(図2)。

オンチップデバッグのイメージ オンチップデバッグのイメージ

というわけなので、Picoのネイティブコードのデバッグを行うには、まずSWDを扱えるCMSIS-DAP仕様のデバッグプローブを用意しなければなりません。


Linuxが動作するRaspberry Piシリーズでは、GPIOにPicoシリーズのSWDを接続して、Raspberry Pi上で動作するデバッガ(OpenOCD)とデバッグ機構とのやり取りを行う仕組みがサポートされています。したがって、Raspberry Pi上でPicoのプログラム作成を行うのであれば、外付けのデバッグプローブは必要ありません。ただ、最新のRaspberry Pi 5ならともかく、Raspberry Pi 4やそれ以前のRaspberry Piは、VSCodeをはじめとする開発ツールが快適に動作するとは言い難く、利用には忍耐が必要になります。よって、Raspberry Pi 5以外のユーザーには、その方法でのPicoのプログラム作成は、積極的にはおすすめしません。

Picoprobeとは?

CMSIS-DAPに対応するデバッグプローブは色々と市販されていますが、Raspberry Pi財団では2種類のプローブを標準品として採用しています。

1つは、完成品として市販されている「Raspberry Pi Debug Probe」(図3)です。国内販売価格は2000円強で、Raspberry Pi Picoシリーズが販売されているショップで入手できます。

図 3: Raspberry Pi Debug Probe 図 3: Raspberry Pi Debug Probe

Raspberry Pi Debug Probeを購入すればケース付きの本体に加えて、USBケーブルやSWDポートに接続するケーブルなど一式が含まれているので手間なしですが、同製品の内部は初代Raspberry Pi Pico(以下、Pico 1)に搭載されているオリジナルマイコン「RP2040」を使った単なるマイコン製品です。Pico 1との違いは、フラッシュメモリにあらかじめデバッグプローブ用のファームウェアが書き込まれているだけと考えても良いでしょう

Pico 1に書き込んで利用できるデバッグプローブ用ファームウェアも、オープンソースとして公開されており、Pico 1があればRaspberry Pi Debug Probeと同じ機能を持つデバッグプローブを自作できます。Pico 1を使って自作したデバッグプローブをPicoprobeといいます。

Pico 1の国内価格は800円前後ですから、ケーブルやケースを節約すれば、Raspberry Pi Debug Probeより安く作れるかもしれないことがPicoprobeのメリットの1つです。後述するPico 1互換ボードを使えば、さらに安価で自作できるでしょう。

もっとも、安く作れるといってもせいぜい数百円ですから、価格は大きなメリットとは言えません。自作したPicoprobeは、Raspberry Pi Debug Probeより自由度が高く、後述するようにPicoprobeからデバッグターゲットに電源を供給できます。さらにファームウェアを改造すれば、大量に余っているGPIOを他の用途に利用するといったことも不可能ではありません。安く、かつ自由度もあるので、Raspberry Pi Debug Probeを買うよりはPicoprobeを自作して利用することをおすすめします。


実際には使用されているフラッシュメモリチップなどが異なるので、Pico 1と全く同じハードウェアというわけではありません。

Picoprobeの材料を用意しよう

Picoprobeを自作するには、次の材料が必要です。

  • Pico 1
  • SWDなどに接続するケーブルやコネクター類
  • ケース

順に見ていきましょう。

Pico 1は互換品でもOK

RP2040を使用したデバッグプローブ用のファームウェアは、Pico 1を使用したPicoprobe向けと、Raspberry Pi Debug Probe向けの2種類に対応しています。

Pico 2をデバッグプローブ化するファームウェアは、本稿執筆時点では開発されていないようです。デバッグプローブはRP2040で十分なので、RP2040の製造が終了しない限りは、Pico 2をデバッグプローブ化するファームウェアは当面、開発されないかもしれません。いずれにしても、Picoprobeを自作するなら専用のPico 1を1つ用意しておく必要があります。

より節約したいのであれば、中国の通販サイトで売られているPico 1の互換ボードを使うのも1つの方法です。RP2040を搭載した、Pico 1とピン互換のボードがAliexpress(中国)などの通販サイトで購入できます。価格は為替相場やセールの有無に左右されますが、本稿を執筆している時点で送料込み450円前後です。純正のPico 1を購入するよりは安価ですから、Picoprobe用に使い潰すのには最適です。

図 4: 中国通販で買える安価なPico 1互換ボードの例(フラッシュメモリ16MB版) 図 4: 中国通販で買える安価なPico 1互換ボードの例(フラッシュメモリ16MB版)

図4は、筆者が購入して利用している互換ボードですが、同じ製品が多数のショップで売られています。フラッシュメモリ容量がオリジナルの実に8倍の16MBになっているほか、USBコネクターがType-Cだったり、リセットボタンとUSRという2つのボタンがオンボードに載っていたりなどオリジナルとの若干の相違点があります。また、両サイドのピンアサインはオリジナルと同じである一方、デバッグポートのピンアサインが異なっていました。

基板の仕上げや部品の実装が少々荒っぽいものの、動作に問題はありません。この互換ボードでもPicoprobeのファームウェアが、正常に動作することを確認しました。Picoシリーズは回路図やファームウェアが公開されているオープンソースの製品ですから、互換ボードであっても動作に問題はないと期待して良いでしょう。

デュポンケーブルを切って利用

PicoprobeをデバッグターゲットのSWDポートに接続するケーブルや、Picoprobeが備えるシリアルモニター機能を使うためにシリアルポートに接続するケーブルが必要になります。

先述のようにPicoシリーズのSWDポートはピンヘッダーを立てて使うので、接続にはデュポンコネクターのメスが必要です。一方、シリアルモニターの接続はデバッグターゲットがブレッドボードなら、接続先はデュポンコネクターのオスになります。

自作派なら、デュポンコネクターなどの圧着を行う工具を揃えてケーブルを自前で作れるようにしておくと便利ですが、そこまでは必要ないという人も多いでしょう。一般的には、出来合いのデュポンケーブルをセットで買っておいて、それを切って使うのが簡単です。

デュポンケーブルのセットはパーツショップで入手できるほか、Amazonなどの通販サイトでデュポンケーブルを検索すれば100~200本程度のセット品が多数ヒットします。オス-オス、オス-メス、メス-メスの3通りのセットを買っておけば、不自由しません。

なお、Pico H/Pico WHに使用されているJST-SH型コネクターは、ケーブルの自作に特殊工具が必要で簡単ではありません。千石電商で3ピンのJST-SH型コネクター付きアセンブル済みケーブルが販売されているので、それを利用すると良いでしょう。


たとえば、https://www.amazon.co.jp/dp/B072KH53HRなど

ケースは定番のFRISKケースがおすすめ

ケースには定番中の定番であるFRISK(図5)を使います。コンビニやスーパーで手に入るうえ、カッターひとつで加工でき、Picoがぴったり入る大きさですからPicoprobeのケースには最適でしょう。Picoの固定には両面テープを使います。

図 5: FRISKのケースを使おう 図 5: FRISKのケースを使おう

Picoprobeを組み立てる

Picoprobeに関しては、日本語版公式ドキュメント「Raspberry Pi Picoをセットアップしよう」 の付録A(P.66~)に記載されています。これを参考にして、デバッグターゲットに接続するケーブルをPicoにはんだ付けするだけなので、製作はごく簡単です。筆者は図6のようにコネクター付きのワイヤーをはんだ付けしました。

図 6: Picoprobeから引き出すワイヤー(画像:Fritzingで作成) 図 6: Picoprobeから引き出すワイヤー(画像:Fritzingで作成)

VSYSは、デバッグターゲットに電源を供給するために使います。デバッグターゲットのVSYSを接続することで、デバッグターゲット側の電源が不要になり便利です。

ただ、デバッグターゲット側が自前の電源を持つようなケースではVSYSラインは必要なくなります。そのような利用ケースだと未使用のVSYSがGNDと接触してショートするといった事故が起きる危険があります。

なので、筆者はケーブルの先のコネクターをオスにしてしまいましたが、メスのコネクターにして必要なときだけジャンパーワイヤーを使ってVSYSをデバッグターゲットに接続したほうがいいでしょう。

TXDとRXDはシリアルモニター用で、デバッグターゲットのUART0にクロス接続することでデバッグターゲットのシリアル出力をホストPCからモニターできます。ケーブルをはんだ付けしたPicoprobeを図7に掲載しておきます。

図 7: コネクター付きのケーブルをPicoにはんだ付け 図 7: コネクター付きのケーブルをPicoにはんだ付け

次に用意したFRISKケースに、USBポート部とケーブルを通す穴をカッターで開けてケース内部に両面テープで止めます(図8)。

図 8: FRISKケースの内部に両面テープで固定 図 8: FRISKケースの内部に両面テープで固定

ここまでの作業を終えたら、Picoprobeのファームウェアを書き込みましょう。GithubのReleasesページを開きます。最新のバージョン(執筆時はdebugprobe-v2.0.1)のAssets欄からdebugprobe_on_pico.uf2をダウンロードします。なお、「debugprobe.uf2」は、Raspberry Pi Debug Probe用のファームウェアで、Pico 1には使えません。ダウンロードすべきファイルを間違えないよう注意してください。

組み立てたPicoprobeのBOOTSELボタンを押しながら、USBケーブルでPCに接続します。USBストレージが開くので、先にダウンロードしたファイルdebugprobe_on_pico.uf2をUSBストレージにドラッグ&ドロップしてコピーしてください。

コピーが終わるとPicoprobeが再起動します。Windows機ならばデバイスマネージャーを開いてみましょう。図9のようにユニバーサル シリアル バス デバイスの下に「CMSIS-DAP v2 Interface」が見えるはずです。

図 9: デバイスマネージャーでチェック 図 9: デバイスマネージャーでチェック

ファームウェアの書き込みを終えたら、FRISKケースのふたを元に戻してPicoprobeの完成です(図10)。

図 10: これで完成 図 10: これで完成

英語版の「Getting started with Raspberry Pi Pico-series」は、Pico 2を含むシリーズ向けに改定されていますが、日本語版は未改定バージョンの翻訳です。

VSCodeでネイティブコード開発

では、自作したPicoprobeを利用してPicoシリーズのデバッグを行ってみましょう。題材はデバッグのサンプルなので、Lチカということにしておきます。必要な機材は、ホストPC、デバッグターゲット、Picoprobeの3つです。

ホストPCは何でも良いですが、本稿ではWindows機の例にしておきます。ホストPCには、VSCodeをインストールしておく必要があります。VSCodeは、いまや主流といっていいコードエディターですから、多くの読者がインストール済みでしょう。利用していないという方は、VSCodeの公式サイトからインストーラーをダウンロードしてインストールし、必要なセットアップ(日本語化など)を行っておいてください。

デバッグターゲットはPico 1またはPico 2です。本稿ではPico 2を利用しますが、Pico 1でも同じように利用できます。

Raspberry Pi Pico Extensionのインストール

VSCodeを起動して左ツールバー(アクティビティーバー)にある拡張機能アイコンをクリックします。検索欄に「Pico」と入力すると、Raspberry Pi財団公式のRaspberry Pi Pico Extension(以下、Pico拡張)がヒットします(図11)。「インストール」をクリックしてVSCodeにPico拡張を追加インストールしてください。

図 11: VSCodeにRaspberry Pi Pico Extensionをインストール 図 11: VSCodeにRaspberry Pi Pico Extensionをインストール

インストールが完了すると、アクティビティーバーにPicoアイコンが追加されます(図12)。

図 12: Picoアイコン 図 12: Picoアイコン

Lチカプロジェクトの作成

Pico拡張によって、Pico向けのソフトウェア開発がVSCode上で行えるようになります。Picoアイコンをクリックすると、図13のようなクイックアクセスメニューが左ペインに開きます。

図 13: クイックアクセスメニュー 図 13: クイックアクセスメニュー

Pico C SDKを用いた新規開発プロジェクトの作成は、General以下にある「New C/C++ Project」で行います。

ちなみに、新しいPico拡張でMicroPythonの開発プロジェクトの作成が追加されています。つい最近になって追加された機能なので未検証ですが、MicroPythonを使った開発がVSCode上で問題なく行えるようになれば、Pico向けのソフトウェア開発はVSCodeで完結するでしょう。

本稿ではPico C SDKを使ったネイティブコード開発が主題ですから、ここでは「New C/C++ Project」を選択します。少し待つと、図14のような新規プロジェクト作成画面が現れます。

図 14: 新規プロジェクトの作成画面 図 14: 新規プロジェクトの作成画面

Basic Settingsでプロジェクト名やディレクトリパスなどプロジェクトの基本設定を行います。

Name欄にプロジェクト名を、Location欄にプロジェクトを作成するディレクトリパス(Windowsのデフォルトはドキュメントディレクトリ)を設定します。Location欄に設定したパスにプロジェクト名のディレクトリが作成され、その下にファイル群が生成されるので、ディレクトリやファイルに名に利用できる文字を使用したほうがいいでしょう。ここではプロジェクト名をpico2blinkとしておきます。

なお、ExamplesをチェックするとPico Examplesをビルドするプロジェクトの作成に画面が切り替わってしまいます。クリックしないよう注意してください。

Board Typeには、開発ターゲットを設定します。本稿ではPico 2を例にしますが、Pico(Pico 1)、Pico Wが選択できるので、読者が利用しているPicoに合わせて選択してください。Pico 2を選択した場合は、RISC-VにチェックをいれることでRISC-Vコードによるプログラム作成ができます。

Select Pico SDK versionではSDKのバージョンを選択できます。Pico 2は最新のSDK v2.0.0からサポートされています。特段の理由がない限りは最新版にしておけば良いでしょう。

Featuresではプロジェクトに追加するライブラリを設定します。ここで例にしているLチカプロジェクトでは、特別なライブラリは必要ありません。

Stdio supportは、作成するプロジェクトでSDKの標準入出力機能を使用する場合に、その入出力先を設定します。Console over UARTにチェックを入れるとGP0、GP1を使用したUART0が標準入出力先になります。Console over USBにチェックを入れると、USB CDCドライバーが組み込まれ、USBシリアルが標準入出力先になります。先述の通り、ここで利用しているPicoprobeにはシリアルモニターの機能があるので、それをテストするためにConsole over UARTにチェックを入れておきましょう。

Code generation optionsは、生成するコードに関する設定です。デフォルトでUse project name as entry point file nameにチェックが入っています。この設定にチェックを入れておくと、メインのプログラムコードがプロジェクトと同名のファイルになります。本稿の例であればpico2blink.cがメインのファイルとして作成されます。特段の理由がなければ、この設定で良いでしょう。

Debuggerは、このプロジェクトで使うデバッガーの設定です。DebugProbeがCMSIS-DAP仕様のプローブを使う設定で、製作したPicoprobeもそれに含まれます。Raspberry Pi 5を使い、GPIOをSWDに直結して開発を行う場合はSWDを選択しますが、本稿では扱いません。

以上を設定したら、「Create」ボタンをクリックします。初回プロジェクト作成時には、インターネットを介してSDKやツールチェーンと関連ツール(picotoolやOpenOCDなど)のダウンロードと、%USERPROFILE%\.pico-sdk(※デフォルトはc:\Users\ユーザー名\.pico-sdk\)以下へのインストールが実行されます。ダウンロードとインストールに少々時間がかかるので、プロジェクトが作成されるまで待ってください。

プロジェクトの作成が終わると、自動的にプロジェクトディレクトリが開きます。図15の例のようにメインコードとなるpico2blink.cには、標準出力に”Hello, world!”と出力するコードが生成されています。これを適宜、変更して自分のコードを記述していくことになります。

図 15: pico2blinkプロジェクトが開いた 図 15: pico2blinkプロジェクトが開いた

Picoprobeを開発ターゲットに接続

VSCode側の開発準備が整ったので、Picoprobeを開発ターゲットに接続するとともに、PicoprobeをUSBケーブルでホストPCに接続します。Picoprobeと開発ターゲットの接続は図16のような形になります。

図 16: Picoprobe(上)と開発ターゲット(下)の接続(画像:Fritzingで作成) 図 16: Picoprobe(上)と開発ターゲット(下)の接続
(画像:Fritzingで作成)

開発ターゲットの電源は、PicoprobeのVSYSから供給します。こうすることで開発ターゲット側の電源が不要になります。ちなみに、Raspberry Pi Debug Probeには電源ラインがないので、開発ターゲット側にも電源が必要になる面倒があります。

ただし、一般的なUSB 1.1/2.0デバイスは1デバイスあたり100mA以下の消費電流が望ましいとされていて、Picoprobeも接続時のネゴシエーションで消費電流100mAをUSBホストに通知しています。開発ターゲットの消費電流が大きいような利用例だと、Picoprobeと合わせた電流が100mAを超えてしまい、USBホストからの電流制限により正常に動作しなくなることが考えられます。

なので、開発ターゲットに多くのデバイスが接続されていたり、あるいはターゲットにWi-Fiを搭載するPico Wを使用したりするなど大きな消費電流が想定されるときは、Picoprobeからの電源供給はやめて、開発ターゲット側にも独立した電源を接続しましょう。また、開発ターゲットに独立した電源を接続するときには、必ずVSYS端子の接続を外してください。

図 17: 実際につないでいる様子 図 17: 実際につないでいる様子

Lチカをデバッグ実行してみよう

Picoprobeと開発ターゲットの接続を確認したら、PicoprobeをUSBケーブルでホストPCに接続します。これでPicoprobeと開発ターゲットに電源が供給されます。

次にpico2blink.cの内容をLチカに書き換えましょう。次のようなCコードを例にします。なお、このコードはPico 2またはPico 1向けで、オンボードLEDがマイコンのGPIOに接続されていないPico Wでは動作しません。

#include <stdio.h>
#include "pico/stdlib.h"
#include "pico/binary_info.h"

int main()
{
    stdio_init_all();

    int flag = 0;
    const uint LED_PIN = PICO_DEFAULT_LED_PIN;

    gpio_init(LED_PIN);
    gpio_set_dir(LED_PIN, GPIO_OUT);
    while(true) {
        gpio_put(LED_PIN, flag ^= 1);
        printf("flag = %d\n",flag);
        sleep_ms(500);
    }
    return 0;
}

Lチカは主題ではないのでコードの説明は省略しますが、flagという変数でLEDを点滅させ、flagをprintf()で標準出力に出力しています。

pico2blink.cを書き換えたら保存します。そして左ペインのファイルエクスプローラ内にある、CMakeLists.txt(CMakeの構成ファイル)上で右クリックしてください。メニューにCMakeの選択肢があります。念のために「すべてのプロジェクトをクリーンしてリビルド」を選択してLチカをビルドしましょう(図18)。

図 18: CMakeでLチカをリビルド 図 18: CMakeでLチカをリビルド

このときツールチェーンの選択が求められたら、picoを選択してください。ビルドが正常に終わると、図19のようにターミナル上に「終了コード0で終了した」と表示されます。異常終了した場合はエラー行が表示されるので、指摘された箇所のエラーを修正しましょう。

図 19: 正常にビルドできた 図 19: 正常にビルドできた

ビルドが完了したら、左アクティビティーバーの「実行とデバッグ」アイコンをクリックします。左ペインがデバッグに切り替わり、図20のように最上段にデバッグ実行ボタン(▶)があるはずです。

図 20: デバッグ実行ボタン 図 20: デバッグ実行ボタン

Picoprobeおよび開発ターゲットが正常に接続されていれば、デバッグ実行ボタンをクリックするとビルドしたバイナリがPicoprobe経由で開発ターゲットにアップロードされ、デバッグ実行が開始されます。実行が始まると自動的に、図21のようにmain()のエントリでブレーク(停止)します。

図 21: main()関数で自動ブレーク 図 21: main()関数で自動ブレーク

コードの上部に図 22のようなデバッグツールバーがあります。左から2番目が実行を続行するボタンです。続行ボタンをクリックするとmain()関数の実行が始まり、オンボードLEDが点滅するでしょう。

図 22: 続行ボタン 図 22: 続行ボタン

Lチカが始まったら、右下ペインをシリアルモニターに切り替えてみましょう。「ポート」欄が正しいCOMポートになっていることを確認します。ボーレートは115200bps、行の終わりはデフォルトの設定で問題ありません。

「監視の開始」ボタンをクリックすると、図 23のように開発ターゲットのUART0に出力されているprintf()関数の内容がシリアルモニターで確認できます。

図 23: シリアルモニターでシリアル出力を確認 図 23: シリアルモニターでシリアル出力を確認

また、コード中でブレークさせたい行の行番号の左をクリックすると、ブレークポイントが設定され、その行に達するとブレークします(図 24)。ブレーク箇所の逆アセンブルを行ったり、変数をウォッチ式に追加してウォッチしたりといったことができるので、試してみてください。

図 24: ブレークさせている例 図 24: ブレークさせている例

その他、条件付きブレークなど便利な機能も使えます。読者自身でいろいろと試してみると良いでしょう。コードの実行を終了させるときは、ツールバーの停止ボタンを押します。


VSCodeにすでにCMake Extensionをインストールしていて、Visual Studioなど他のツールチェーンがインストールされているWindows環境では、ビルド時に使用するツールチェーンの選択が求められる場合があります。

ネイティブコード開発も選択肢の1つに

以上のようにPicoprobeを用意してデバッグができる環境を整えておけば、ネイティブコードによる開発も、さほど困難なく行えるでしょう。

今回は取り上げませんが、CMSIS-DAPはArduino IDEも対応しており、Arduino IDEを使ったPicoの開発時にも利用できます。MicroPythonと合わせて開発環境の1つとしてPicoprobeを用意しておくときっと役に立つでしょう。

おすすめ記事

 

コメント

ニュース

編集部のおすすめ

連載・シリーズ

注目のキーワード

もっと見る