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 ..
$ make
FreeRTOSカーネルをsubmoduleで置いているので、それも一緒に取ってくる必要があります。それができればあとは普通にcmake buildするだけ。
自分はVSCodeのCMake Extensionに任せっきりです。
詳細
とりあえず概略だけ説明しようと思います
*_import.cmake
FreeRTOS_Kernel_import.cmake
pico_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_libraries
FreeRTOS-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.txt
target_link_libraries
freertos
は上記の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...
コメント