🔖

Raspberry Pi Pico上で動作する組み込みOS TryKernelを試す。

に公開

Interface 2023年7月号でPico上で組込みOSを動作させる組込みOSに関する特集がありましたので試しました。

環境構築

Armコンパイラ

Armのコンパイラをインストールする必要がありますが、xpmだとうまくパスが通らなかったためArmのサイトからexeファイルをダウンロードしてインストールしました。インストール時ダイアログ最後の画面でパスを通すにチェックを忘れずに入れます。

以下のサイトから、Windows (mingw-w64-i686) hosted cross toolchains
AArch32 bare-metal target (arm-none-eabi)という項目の中にあるarm-gnu-toolchain-14.3.rel1-mingw-w64-i686-arm-none-eabi.exeをダウンロードしました。
https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads

PowerShellから以下のコマンドを実行するとインストールおよびパスが通っているかが確認できます。

arm-none-eabi-gcc --version

windows-build-tools

windows-build-toolsについては、Githubからダウンロード・インストールをしました。
https://github.com/xpack-dev-tools/windows-build-tools-xpack/releases

xpack-windows-build-tools-4.4.1-3-win32-x64.zipをダウンロードして、C:\Program Filesに解凍しました。

その後、パスに追加します。システム環境変数の編集>環境変数>ユーザー環境変数>Pathから編集>新規でC:\Program Files\xpack-windows-build-tools-4.4.1-3\binを追加しました。

Eclipse IDE for Embedded C/C++ Developers

以下のサイトからダウンロードしてインストールしました。
https://www.eclipse.org/downloads/

ダウンロードするEclipseを選択する画面でEclipse IDE for Embedded C/C++ Developersを選択しました。

OpenOCD

OpenOCDは以下のサイトから、openocd-win.zipをダウンロードします。
https://github.com/ciniml/debug-tools-builder/releases

ダウンロードしたら、C:\DevToolsに解凍します(DevToolsディレクトリは作成しました。)

Pico本体とPicoProbeの接続

PicoProbeは黄色線を1番ピン、オレンジ線を2番ピン、黒線を3番ピンにそれぞれ接続します。(Pico本体のmicroUSB端子を上にしたときに、左上側の連続した3つのピンと接続する形です。)

配線ができたら、Pico本体およびPicoProveをそれぞれUSBケーブルでPCと接続します。

TryKernelをダウンロード

以下のGithubリポジトリからダウンロードします。
https://github.com/ytoyoyama/interface_trykernel/tree/main

新規プロジェクト作成

Eclipseを起動したら、File>New>C/C++ Projectを選択します。
Templates for New C/C++ Projectのポップアップが出てきたら、C Managed Buildを選択します。

Project nameに好きなプロジェクト名を設定します。
Project typeはEmpty Project、ToolchainsはArm Cross GCCを選択します。

Select Configurationsは特に設定を変更しなくて大丈夫です。

GNU Arm Cross Toolchainでは
Toolchain name: GNU Tools for ARM Embedded Processors(arm-none-eabi-gcc)
Toolchain path: C:\Program Files (x86)\Arm GNU Toolchain arm-none-eabi\14.3 rel1\bin
と設定しました。

設定できたらFinishでプロジェクト設定を終了をします。

コード作成

以下の画像のようにコードを配置するようにします。(上記ではTestProjectとしましたが、今回のプロジェクト名はpicoになっています。)

プロジェクト名を右クリックしてNew>Folderから新規フォルダを作成します。

ポップアップが出てきたら、Folder nameに好きな名前を設定してFinishします。(すでにコードのフォルダが見えていますが、このあとImportします。)

再度プロジェクト名を右クリックしてImportをクリックします。

General > File Systemを選択します。

ダウンロードしたTryKernelのフォルダを選択してインポートします。(今回は2章のLED点滅プログラムを実行させたいので、part2のsect3を選択します。)

ビルド設定

プロジェクト名を右クリックして、Propertiesをクリックします。

C/C++ Build > Settings からビルド設定をします。

Target ProcessorからArm family(-mcpu) cortex-m0plus

OptimizationからAssume freestanding environmentにチェックを入れます。

GNU Arm Cross C CompilerからIncludeを選択します。
Include pathsをsecttion3/includeに設定します。

GNU Arm Cross C CompilerからOptimizationを選択します。
Language standardにISO C99 (-std=c99)を選択します。

GNU Arm Cross AssemblerからPreprocesorを選択して、Use preprocessorにチェックを入れます。

GNU Arm Cross C LinkerのGeneralからリンカスクリプトを指定します。
sect3/linker/pico_memmap.ldを選択します。

また、ダイアログ下部にある**Do not use standard start files (-nostartfiles)**にチェックを入れます。

ビルドおよび書き込み

上記ビルド設定ができたら、再びプロジェクト名を右クリックしてBuild Projectします。

エラーが起きなければビルドが無事完了していることになります。

次にDebug設定を行います。プロジェクト名を右クリック>Debug as>Debug Configurationsを選択します。

GDB OpenOCD Debuggingをダブルクリックします。ダブルクリックして設定画面がでてきたら、Debuggerタブを選択します。Executable pathにC:\DevTools\openocd-win\openocd-win\bin\openocd.exeを設定します(OpenOCDを入れたディレクトリ)。

また、Config Optionsについては以下のように設定します。

-f interface/cmsis-dap.cfg -f target/rp2040.cfg

設定できたら、ダイアログ下部のDebugをクリックしてファームウェア書き込みを行います。

Debugが始まると画面が切り替わります(Perspective変更に関するポップアップが出てきたら、Proceedで続行します)。

While中の緑色にハイライトがかかっているところで停止しています。画面左上のResume(F8キーでも対応)をクリックするとファームウェアが動作開始します。LEDが点滅すれば無事書き込みができています。

引用文献

https://note.com/ysfactory_ys/n/ne27fb58a72d1

https://moons.link/pico/post-654/

Discussion