皆さん こんにちは。
今回はCQ出版社から出ているインターフェース2023年7月号の記事「ゼロから作るOS」の環境構築について書いていきます。
こちらでは本に書かれている通りで問題なく動作しましたが、うまく環境を構築できない方のためにまとめておきます。
触り程度しか記事を読んでいませんけれど、組み込みOSを学ぶにはとても良い教材だと思います。
デバッガーをつないで動作させることで、より詳しく組み込みOSについて理解することができます。
コストも数千円程度ですから、ぜひトライしてみてください。
ラズピコを2つ用意して、そのうちの1つをデバッグ用のプロープとすればラズピコのソフトウェア開発環境をつくることができます。
デバッグ用のプローブはPicoprobeと呼ばれています。
初めてラズピコの記事を書いた際にはSDKを使った環境について説明しましたが、今回はSDKを使いません。
記事の内容に沿った開発環境を構築していきます。
開発環境
以下の通りです。
ホストPC :
Windows10
開発ボード(ターゲット) :
Raspberry Pi Pico 1個
デバッガー(Picoprobe):
Raspberry Pi Pico 1個
USBケーブル :
USB A-MicroB 2本
( AコネクタはPC側を想定していてラズピコ側がMicroBコネクタです )
デバッガー (Software) :
Visual Studio Code (VSCode)
その他 ブレッドボード、ジャンパーワイヤー等
トライしてみようと思われる方は秋月電子等でご購入ください。
ラズピコとは
ラズピコは Raspberry Pi Pico を省略した呼び方で正式名称ではありません。
ただ冗長になるのでこちらのサイトでは「ラズピコ」と呼ぶことにします。
ラズピコは Raspberry Pi財団が独自に開発したRaspberry Piシリーズでは初めての「マイコン」と呼ばれる部類のデバイスを使ったボードです。
最高133MHzのクロックで動作するARM Cortex M0+デュアルコアのRP2040 というマイクロコントローラーを実装しています。
C/C++及びMicroPythonでの開発が可能ですが、ここでは主に C/C++ の記事を紹介していく予定です。
RP2040はデュアルコアでRTOSを使うことが可能でUSBの機能もマイコン内部に持っています。
それからPIO(プログラマブルIO)というI/Oの操作に特化したコアも持っています。
もちろん、一般的なペリフェラルのUART, SPI, I2C, PWM, RTC, ADC, GPIOなどの機能も持っています。
メモリー:
SRAM : 264KB です。
フラッシュはRP2040から見ると外付けになり、ラズピコでは2MByteの部品が実装されています。
それからラズピコはLinuxが動くボードではないので、その点はご注意ください。
ドキュメント
ラズピコのドキュメントはこちらのDocumentsの部分にリンクが貼られています。
いろいろと読みごたえがありそうです。
まずは目を通していきたいですね。
ブロック図
ブロック図を以下に示します。
デバッグ用の信号は SWD です。GNDを除けば信号線は2本なので接続が容易です。
UARTの信号はデバッグ用のインターフェースとしては不要ですが、UARTの通信をPicoprobeを介してPCで確認することができるので図のように接続しておくと便利です。
PicoprobeがUSB-シリアル通信機能の役割を担ってくれます。

接続
ピン配置、信号、接続はそれぞれ以下の通りになります。
ピン配置
ピン番号は以下の画像を参考にしてください。

信号の接続
信号の接続は以下の通りです。
色:次の姿図の配線の色を示しています。
| 信号 | Picoprobe | ラズピコ | 色 |
|---|---|---|---|
| GND | 3 | 3 | 黒色 |
| SWCLK | 4 | D1 | 水色 |
| SWDIO | 5 | D3 | 紫色 |
| UART0 RX | 6 | 2 | 橙色 |
| UART0 TX | 7 | 1 | 黄色 |
接続の姿図
接続した様子を画像にしてみました。
USBケーブルを2本使う構成にします。
左がデバッガーのPicoprobe、右がターゲットのラズピコです。

ダウンロードするツール等
以下の5種類のファイル群をダウンロードしておきます。
ひとまずCドライブに DevTools というフォルダを作成しておきます。
(1)ソースコード
C:DevToosの下に src というフォルダを作成しておきます。
ソースコードはインターフェース2023年7月号(以降 書籍)の22ページに紹介されています。
上記サイトの「7月号 ラズパイPicoで1500行 ゼロから作るOS」
特集 関連ファイル一式 から以下の圧縮ファイルをダウンロードします。
IF2307TK.zip
これを右のフォルダに保存して解凍します C:\DevTools\src
IF2307TKというフォルダがつくられ、その下にソースが解凍されます。
(2)ビルドツール
ソースコードをビルドするためのツール群です。
xPack Windows Build Tools v4.4.0-1
上記サイトから xpack-windows-build-tools-4.4.0-1-win32-x64.zip をダウンロードします。
C:\DevTools フォルダにzipファイルを移動して展開します。
C:\DevTools\xpack-windows-build-tools-4.4.0-1
というフォルダがつくられます。
(3)picoprobe
片側のラズピコをデバッグ用のプローブとして使うためのファームウェアです。
上記サイトから picoprobe.uf2 をダウンロードします。
ひとまずC:\DevToolsに移動しておきます。
(4)OpenOCD
オンチップデバッガー(ソフトウェア)です。
eclipse IDE と連携してデバッグに使用します。
上記サイトから openocd-win.zip をダウンロードします。
(組み込みシステム界隈で有名な井田さんが用意してくださったopenocdのバイナリです、使わせて頂きます)
C:\DevTools フォルダにzipファイルを移動して展開します。
C:\DevTools\openocd-win というフォルダがつくられます。
(5)eclipse IDE
今回はIDEに eclipse を使います。
(アセンブラのデバッグがしやすい等の理由で選ばれたようです)
上記サイトからオレンジのDownloadボタンを押します。
C:\DevTools フォルダにzipファイルを移動して展開します。
C:\DevTools\eclipse というフォルダがつくられます。
picoprobeの書き込み
書き込む基板は「接続の姿図」では左側になります。間違えないように注意してください。
書き込む基板に対して、BOOTSELボタン(白いボタン)を押しながらUSBケーブルをPCにつなぎ基板に電源を供給します。
この起動方法により、ラズピコがPC上にドライブとして表示されますので、DevToolsに保存しておいた picoprobe.uf2 をドラッグ&ドロップでドライブにコピーします。
これでpicoprobeのファームウェアが書き込まれます。
eclipseの設定
Eclipse(IDE)の設定
C:\DevTools\eclipse\eclipse.exe を起動する
このままlaunchボタンを押します。
(m3925の部分は皆さんのユーザー名になります)
C:\Users\xxxxx\eclipse-workspaceの下にプロジェクトがつくられます。
xxxxx : 皆さんのユーザー名
eclipseを起動したら File – New – C/C++ Project から新規プロジェクトを作成します。

“Templates for New C/C++ Project”
左 All 、右 C Managed Build を選択し Next

“C Project”
Project name: pico_tryknl (ピコ トライカーネルの略)とする
左 Entry Point 、右 Arm Cross GCC を選んで Next
次の Select Configurations はそのまま Next (画像は省略)

“GNU Arm Cross Toolchain”
Browse を押して C:\DevTools\xpack-windows-build-tools-4.4.0-1\bin を選択してFinishを押します。
ソースコードをプロジェクトに追加する
eclipseのソースツリーにフォルダをドロップしてみましたが、うまくいきませんでした。
手作業でフォルダをつくってからファイルをコピーします。
Eclipse上の Project Explorer のツリー pico_tryknl を右クリックして New – Folder で
application, boot, include, linker を追加して
DevTools\src\IF2307TK\part_2\sect_3 から各フォルダ内のファイルをコピーします。
(注)part_2\sect_3 のソース群が最初に試してみるソースコードです。
ソースは全部で9パターンあるようです。

ツリーで以下の通りにファイル群を確認できれば成功です。
プロジェクトのプロパティを設定する
Project Explorer に表示されている pico_tryknl を右クリックしProperties を選択します。

C/C++ Build – Settings を選択し Tool Settingsタブの Arm family (-mcpu)で cortex-m0plus を選択します。
(ラズピコで使われているマイコンRP2040では cortex-m0+ が使われています)

次に Optimaization- Optimazaiton Levelは None (-O0) を選択します。

次に GNU Arm Cross C Compiler Includes を選択します。
+ボタンのアイコンを押して Include paths (-I) にソースのパスを指定します。
C:\Users\xxxx\eclipse-workspace\pico_tryknl\include を指定します。

次に GNU Arm Cross C Compiler – Optimaization の Language standerd に ISO C99 (-std=C99)を指定します。

次に GNU Arm Cross Asembler – Preprocessor の Use preprocessor にチェックを入れます。

次に GNU Arm Cross C Linker – General の Script files(-T)にファイルを指定します。
C:¥Users\xxxx\eclipse-workspace\pico-tryknl\linker\pico_memmap.ld
指定後 Apply and Closeボタンを押して設定を完了します。
ビルドする
Project – Build Project でプロジェクトをビルドします。

0 errors, 0 warnings となれば成功です。
OpenOCDの設定
Run – Debug Configurations でウィンドウが出るので、GDB OpenOCD Debugging をダブルクリックします。

Debuggerタブをクリックし Executable path: に C:\DevTools\openocd-win\bin\openocd.exeを指定します。
Config options: に -f interface/cmsis-dap.cfg -f target/rp2040.cfg を指定します。
デバッグしてみる
PCにUSBケーブルでターゲット、デバッガ(picoprobe)をつないで Debugボタンを押します。
ConsoleにOpenOCD Debugging で接続する過程が表示されmain()関数のところで停止します。

F8キー(Resume)でプログラムが動きLチカすれば成功です。
いかがでしたか?皆さんの環境ではうまく動作できたでしょうか?
少々長くなってしまいました、お疲れさまでした。
この記事のつづきは こちら です。