マイコン工作実験日記

Microcontroller を用いての工作、実験記録

CMSIS-RTOS/FreeRTOS

2014-06-25 21:06:48 | Weblog
最近仕事がらみでSTM32F2上でFreeRTOSを使い始めたのですが、それでハマったのでメモしておくことにします。

自分が使うものであればターゲットが何であれCortex-MであればCrossWorksとCTLで用が足りるのですが、仕事となるとそういうわけにもいかず、今回はSTMicroが提供しているSTMCubeF2を使うことになったのですが。。

STMCubeF2には、STMicroが提供するデバイスライブラリや、HAL, USBスタック等とともに、FreeRTOS, LwIP, FatFsも含まれています。自分でRTOS移植する必要もなく、できあいのサンプルをビルドすればTCP/IPまで動かせるようです。ソース一式をダウンロードして中身を見てみると FreeRTOSのパッケージにはCMSIS_RTOSのAPIが含まれています。Applicationとして提供されているFreeRTOSのサンプルプロジェクトもこのCMSIS_RTOSのAPIを使って書かれています。

FreeRTOSのAPIに慣れずともCMSIS_RTOSのAPIで書けばいいというのは便利だと思って、実際に使ってアプリを書き始めたのですが、これがちゃんと動いてくれません。osSemaphoreWaitでタイムアウトした場合の処理がおかしいので、ソースを確認してみてビックリ。APIで定義している関数の戻り値と実装とがぜんぜん違います。APIではタイムアウト発生時には0を返すことになっていますが、実際のコードではosErrorOS(0xff)を返し、トークンが取得できた時にosOK(0x00)を返すではありませんか。。

どうやら、「なんちゃってCMSIS-RTOS」だったみたいです。もっとも「CMSIS-RTOSで共通化できるかも」と期待するのが、幻想なのかもしれません。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。