CMakeを使って、FreeRTOS最小構成のVisualStudioプロジェクト作る


概要

Windows上でFreeRTOSを動かす
は提供されているサンプルプロジェクトの実行のみでした。

実際の開発では異なる開発環境や複数人開発、またビルド環境の管理に対応することが必要になると思います。
この記事ではCMakeでFreeRTOSのVisual Studioプロジェクトを構築します。

この記事で説明するコード

手順

FreeRTOS

ダウンロード

必要なファイルを選ぶ

FreeRTOS各ポート(コンパイラ、アーキテクチャの組み合わせ)のコードがすべて含まれています。
ここからWindows Visual Studio環境に必要なファイルだけ取得します。

FreeRTOS/Source直下にあるファイル、FreeRTOS/include以下のファイルがカーネルコアとなる部分で、どのポートでも必要なファイルになります。
FreeRTOS/portable/以下がポートごとのファイルになります
 MemMangはheap管理用で必要
 MSVC-MingWはVisualStudio用で必要
となります。

これら必要のファイルのみ自身のプロジェクトに取り込みます。

アプリケーションコード

自身で開発するアプリケーションコードをいれます。
Github Repositoryにはチュートリアルのサンプルコードを入れてあります。

全体のツリー構成は

となっています。

CMake

基本的な使い方

日本語の記事がいろいろとあるので参照してください。
https://qiita.com/shohirose/items/45fb49c6b429e8b204ac
とか良いです。

今回用のCMakeLists.txt

# ----------------------------
# 必要な最小バージョンを指定
# ----------------------------
cmake_minimum_required(VERSION 3.1).

# ----------------------------
# プロジェクト名, 言語(C言語)を指定.
# ----------------------------
project(freertos_project C)

# ----------------------------
# include directory
#   Makefile の -include 命令や,コンパイラでの -I オプションは include_directories で代用.
# ----------------------------
include_directories(./src)
include_directories(./src/Supporting_Functions)
include_directories(./FreeRTOS/Source/include)
include_directories(./FreeRTOS/Source/portable/MemMang)
include_directories(./FreeRTOS/Source/portable/MSVC-MingW)

# ----------------------------
# コンパイル対象のソース一覧を作成
#   - 指定されたGLOBパターン<globbing_expressions>にマッチするファイルを探索し、その一覧をリストとして変数<variable>に格納します。
#     このとき絶対パスで格納されますが、RELATIVE <path>が指定されていると、このパスからの相対パスとなります。
#   - 以下の正規表現のメタ文字に似たものが使えます。
#       - 任意の文字の0回以上の繰り返し*
#       - 任意の文字?
#       - ブラケット内で指定された文字[ ]とその範囲
# フォーマット
#   file(WRITE <filename> [<content1> ...])
#   file(APPEND <filename> [<content1> ...])
# filenameがVCだとプロジェクト名になるみたい.
# ----------------------------
file(GLOB freertos_files FreeRTOS/Source/*.[ch] FreeRTOS/Source/portable/MSVC-MingW/*.[ch] FreeRTOS/Source/portable/MemMang/*.[ch])
file(GLOB src_files src/*.[ch] src/Supporting_Functions/*.[ch])

# ----------------------------
# オブジェクトファイルを作るソースを指定
# ----------------------------
add_library(freertos OBJECT ${freertos_files})
add_library(src OBJECT ${src_files})

# ----------------------------
# VisualStudioのFilterを作るようにする.
# ----------------------------
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

# ----------------------------
# 実行ファイルを作る方法を指定
# ----------------------------
add_executable(${PROJECT_NAME}
 $<TARGET_OBJECTS:freertos>
 $<TARGET_OBJECTS:src>
)

CMakeの実行

buildディレクトリで cmake .. します。

PS F:\git-work\cmake_freertos_visualstudio\build> cmake ..
-- The C compiler identification is MSVC 19.27.29110.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: F:/git-work/cmake_freertos_visualstudio/build

※Shift押しながら右クリックでPowerShellを開けるので便利です

VisualStudio立ち上げる

ここまでくるとbuildディレクトリ内は

となっているので、freertos_project.slnをダブルクリックしましょう。
あとはスタートアッププロジェクトを設定すれば実行できます。

build以下はGit Repository管理ではなく、CMakeから作成するので管理も楽ですし、配布もしやすいですね。