RTOSとはなんぞやというのは、なかなか説明が難しいものではあるのですが、基本的には複数のタスクで動作し、タスク間でのリソースを共有出来る仕組みを持ったOSといったところでしょうか。
Wikipediaや、このあたりが参考になるでしょうか。
書籍では、リアルタイムOSと組み込み技術の基礎がとても詳しく解説されていると思いますので、オススメです。
μITRONなんかは、非常に有名ですね。
今回使用するFreeRTOSは、サイズが小さくシンプルで、色々なマイコンに対応しているので、覚えておくと移植も楽なのではないかと思います。
FreeRTOSのリファレンスマニュアルやチュートリアルは、公式サイトで有償で販売されています。
が、APIリファレンスくらいであれば、公式サイトの左側のメニューから、FreeRTOS->API Referenceで見ることができますので、まずはこれで感じを掴んでから、さらに深く知りたい場合には購入してみてもいいかもしれません。
私はまだ買ってませんけどw
構成は、LEDチカチカ(RTOS)の方と変わりません。
基板上のLEDを、FreeRTOSを使用して点滅させます。
まずは、新規プロジェクトを作りますが、前回とは選ぶプロジェクトが違います。
QuickStartPanelのNew projectから、LPC176Xの「FreeRTOS Project」を選択して、適当なプロジェクト名をつけます。
ここでは、「ledtest02」としました。
MCUはLPC1769を選び、途中Advanced OptionでFreeRTOSのrootをを選べますが、とりあえずはこのままで。
すると、以下の様な構成で、プロジェクトが出来上がります。
FreeRTOS_なんとかというフォルダは、FreeRTOS用のファイルであり、ここは自分でいじることはありません。
自分でいじるのは、srcフォルダにある、cr_startup_lpc17.c、main.cと、FreeRTOSConfig.hになります。
ざっと、デフォルトで作られたmain.cを見てみると、2つのタスクが作られて、vUserTask1は一定時間ごとに状態を反転させ、vUserTask2は一定時間ごとにカウンタを増やしているのがわかります。
それぞれに関連性はないので協調して動くものではないですが、これらが同時に、並行して動くんだなということは、なんとなくわかると思います。
main関数は、これらのタスクを生成して、スタートさせているだけです。
RTOSのイメージが、なんとなく掴めるでしょうか。
次にFreeRTOSConfig.hを見てみましょう。
この中身をいじることにより、FreeRTOSの機能をカスタマイズすることが可能です。
とりあえず直しておく必要があるのは、configCPU_CLOCK_HZです。
これは、CPUクロックを設定する必要があるので、ledtest01で使ったのと同じ、SystemCoreClockを設定しておきます。
#define configCPU_CLOCK_HZ ( ( unsigned long )SystemCoreClock )
ただし、実はこれではビルドが通りません。
SystemCoreClockというのは、元々CMSISライブラリのsystem_LPC17xx.cに定義されているものであり、CMSISライブラリのincフォルダにあるsystem_LPC17xx.hでexternされています。
このため、CMSISライブラリを参照する必要がありますが、ledtest01の時には、CMSIS Library to link project toを設定するところがあり、CMSISv2p00_LPC17XXを選択しましたが、今回はその指定がありませんでした。
FreeRTOSを選んだ時には、FreeRTOSのソースが組み入れられるだけで、デフォルトではCMSISライブラリを使えるようには出来ていないようです。
ledtest01の時と同じように、CMSISv2p00_LPC17xxと、DriverLibを使用してLEDの点滅をさせたいので、このプロジェクトに対して、これらを使えるように、設定を変更します。
ledtest02のプロジェクトを、右クリックからプロパティを開きます。
まず、「Project References」で、CMSISv2p00_LPC17xxと、DriverLibの両方にチェックを入れておきます。
次に、「C/C++ General」の「Paths and Symbols」を開いて、includeとライブラリの設定をします。
IncludesタブのLanguagesがGNU Cのところを選択し、/CMSISv2p00_LPC17xx/incと、/DriverLib/incを追加します。
これでヘッダファイルを参照出来るようになったので、FreeRTOSConfig.hの先頭で、LPC17xx.hをincludeするようにしておきましょう。
#include "LPC17xx.h"