記事の概要
STM32 Discovery開発ボードのSTM32F407 DISCOVERY Boardを用いて、FreeRTOSを動かす際の注意点メモです。
統合開発環境にはKeilの無料試用版を用います。
STM32においてFreeRTOSを使用する事例には、FreeRTOSのラッパーAPIであるCMSIS RTOSを用いている場合が多いです。
CMSIS RTOSは統合開発環境のSTM32CubeMXから自動で組み込むことができるので便利です。
ですが、今回はオープンソースとして提供されているFreeRTOSをダウンロードしてプロジェクトに組み込みます。
方法
基本的には以下のサイトの指示に従えば、STM32F407開発ボードでFreeRTOSを動かすことができます。
FreeRTOSは2022年1月23日時点の最新版であるFreeRTOS 202112.00を使用しても動きませんでした。
また設定ファイルのFreeRTOSCOnfig.hは自分で作成しないといけません。
上記サイトのGitHubのFreeRTOSとFreeRTOSConfig.hを使うのが一番簡単だと思います。
必要に応じて、新しいバージョンのFreeRTOSと置き換えたり、FreeRTOSConfig.hの設定を変更します。
サイトではSTDOUTをIMTとして使用しています。そしてST-LInkのオプション設定もそれに合わせてTrace Enableを有効にしています。
これはDebug Viewerでprintfを使用するためです。
printfを使用しないのでしたら、この設定はしなくても問題ありません。
注意点
KeilのARM Compilerコンパイラが2022年1月23日時点のデフォルト設定であるversion 6だと、RVDS\ARM_CM4Fのファイルport.cが原因で大量のエラーが出ます。
./FreeRTOS/Source/portable/RVDS/ARM_CM4F\portmacro.h(167): error: unknown type name '__forceinline'
static portFORCE_INLINE void vPortSetBASEPRI( uint32_t ulBASEPRI )
RVDS\ARM_CM4Fのport.cをGCC\ARM_CM4Fのport.cに置き換えるとエラーは消えますが、スケジューリングが動作しなくなります。
このエラーは、以下のようにコンパイラを古いバージョンのversion 5に変更すると消えます。
今後、この問題は解消されると思いますが、それまではこの方法で対応します。
参考
Keilでのプロジェクト作成方法については以下をご参照ください。