Ideal Reality

興味の赴くままに

Raspberry Pi PicoでFreeRTOSを使う

FreeRTOS-SMP-Demos/FreeRTOS/Demo/CORTEX_M0+_RP2040 at main · FreeRTOS/FreeRTOS-SMP-Demos

Raspberry Pi PicoでFreeRTOSを動かす - Qiita

どっちを参考にしようか迷った結果、両方を合わせたようなテンプレートが出来上がった話

Contents
スポンサーリンク

前提条件

Raspberry Pi Pico C/C++ SDKのセットアップを行い、PICO_SDK_PATH環境変数にSDKのパスが入っている状態にしてください。

SDKのインストール方法は調べれば沢山出てくるので割愛します

Example

GitHub - Hiroki-Kawakami/pico-freertos-example: Use FreeRTOS on Raspberry Pi Pico

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)
  • 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-KernelFreeRTOS-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+CLI

Raspberry Pi PicoでFreeRTOSを使うFreeRTOS-SMP-Demos/FreeRTOS/Demo/CORTEX_M0+_RP2040 at main · FreeRTOS/F...

スポンサーリンク

コメント

投稿されたコメントはありません

名前

メールアドレス(任意)

コメント

関連する投稿

Raspberry Pi PicoでFreeRTOSのSMPを試してみる

Raspberry Pi PicoでFreeRTOS+CLI