Raspberry Pi PicoでFreeRTOSを使う
FreeRTOS-SMP-Demos/FreeRTOS/Demo/CORTEX_M0+_RP2040 at main · FreeRTOS/FreeRTOS-SMP-Demos
Raspberry Pi PicoでFreeRTOSを動かす - Qiita
どっちを参考にしようか迷った結果、両方を合わせたようなテンプレートが出来上がった話
前提条件
Raspberry Pi Pico C/C++ SDKのセットアップを行い、PICO_SDK_PATH環境変数にSDKのパスが入っている状態にしてください。
SDKのインストール方法は調べれば沢山出てくるので割愛します
Example
Use FreeRTOS on Raspberry Pi Pico. Contribute to Hiroki-Kawakami/pico-freertos-example development by creating an account on GitHub.
とりあえずGitHubに上げた
$ git clone https://github.com/Hiroki-Kawakami/pico-freertos-example
$ cd pico-freertos-example
$ git submodule update --init
$ mkdir build
$ cd build
$ cmake ..
$ makeFreeRTOSカーネルをsubmoduleで置いているので、それも一緒に取ってくる必要があります。それができればあとは普通にcmake buildするだけ。
自分はVSCodeのCMake Extensionに任せっきりです。
詳細
とりあえず概略だけ説明しようと思います
*_import.cmake
FreeRTOS_Kernel_import.cmakepico_sdk_import.cmake
cmakeでFreeRTOSカーネルとRaspberry Pi Pico SDKを読み込むためのファイルです。これを読み込ませることで、FreeRTOSカーネルやPico SDKがcmakeライブラリとして読み込まれるので、KernelやSDK内の必要なファイルをわざわざ自分でビルド対象に入れたりInclude Pathを指定しなくてもよくなります。
FreeRTOS-Kernel Repoのportable/ThirdParty/GCC/RP2040/に両方ともあるのでコピってきましょう。
CMakeLists.txt
cmake_minimum_required(VERSION 3.13)- おまじない
set(FREERTOS_SOURCE_PATH ${CMAKE_CURRENT_LIST_DIR}/freertos)- FreeRTOS関連のファイルを
freertosディレクトリ以下に全部入れた時に、ここを指し示す変数があったら便利かなーって感じで自分が勝手に追加したやつ set(FREERTOS_KERNEL_PATH ${CMAKE_CURRENT_LIST_DIR}/freertos/FreeRTOS-Kernel)FreeRTOS_Kernel_import.cmakeをincludeするのに必要- Ref: FreeRTOS-Kernel/portable/ThirdParty/GCC/RP2040 at main · FreeRTOS/FreeRTOS-Kernel
include(pico_sdk_import.cmake)- Raspberry Pi Pico SDKの読み込み
include(FreeRTOS_Kernel_import.cmake)- FreeRTOS Kernelの読み込み
project(pico-freertos-example)- プロジェクト名を書いておきませう
pico_sdk_init()- Pico SDKの初期化。おまじない
add_subdirectory(freertos)freertosディレクトリ内でFreeRTOSの用意をしているので、それを読み込みますadd_subdirectory(example)exampleディレクトリ内でPicoで動かしたい実際のアプリを用意をしているので、それを読み込みます
freertosディレクトリ
FreeRTOS-Kernel- カーネル本体
FreeRTOSConfig.h- カーネルの基本設定
- ここから拝借してちょっと書き換えてます
CMakeLists.txt- カーネル本体とカーネルの基本設定を合わせてcmakeライブラリにしています。こうしておくと
exampleの方からfreertosだけ読み込めば良くなるので楽です target_link_librariesFreeRTOS-KernelとFreeRTOS-Kernel-Heap3は上でinclude(FreeRTOS_Kernel_import.cmake)をしているから使えるやつです。pico_stdlibは上でinclude(pico_sdk_import.cmake)をしているから使えるやつです。FreeRTOS-Kernel-Heap3はHeap3が安定だと思います。Heap3って何よ?って思った人は以下の記事が分かりやすいです。
exampleディレクトリ
main.c- プログラム本体
CMakeLists.txttarget_link_librariesfreertosは上記のfreertosディレクトリで組んだcmakeライブラリのこと。pico_add_extra_outputs- これによってRaspberry Pi Picoに書き込むuf2が生成されます。
pico_enable_stdio_usb- Raspberry Pi PicoにUSBで繋いだPCからシリアルポート経由でstdioにアクセスできるようになります
後書き
なんだかんだ書いたけど、推奨のディレクトリ構造とか特になさそうだったから、好き勝手に自分が分かりやすいように作ればいいと思った
続き
続きました。
Raspberry Pi PicoでFreeRTOSを使うFreeRTOS-SMP-Demos/FreeRTOS/Demo/CORTEX_M0+_RP2040 at main · FreeRTOS/F...
コメント