APIそのものはC/C++に対応したSEGGER独自のもので、例えばPOSIX互換などは一切考慮されていない。その意味では最初はちょっと面倒かもしれないが、APIそのものは比較的分かりやすい。リスト1は、NXPの「LPCXpresso55S69」向けのLチカコードである。HP(High Priority)とLP(Low Priority)の2つのタスクを起動し、HPは消灯、LPは点灯するというものだ。
#include "RTOS.h" #include "BSP.h" static OS_STACKPTR int StackHP[128], StackLP[128]; // Task stacks static OS_TASK TCBHP, TCBLP; // Task control blocks static void HPTask(void) { while (1) { BSP_ToggleLED(0); OS_TASK_Delay(50); } } static void LPTask(void) { while (1) { BSP_ToggleLED(1); OS_TASK_Delay(200); } } /********************************************************************* * * main() */ int main(void) { OS_Init(); // Initialize embOS OS_InitHW(); // Initialize required hardware BSP_Init(); // Initialize LED ports OS_TASK_CREATE(&TCBHP, "HP Task", 100, HPTask, StackHP); OS_TASK_CREATE(&TCBLP, "LP Task", 50, LPTask, StackLP); OS_Start(); // Start embOS return 0; } /*************************** End of file ****************************/
周辺回路の初期化はBSP_Init()で行われており、その他の周辺回路への操作も全部BSP_xxx()でAPIが提供されているあたりは、SEGGERが各ボード向けにBSPを提供しているからこそ、中まで知らないでもアプリケーションを構築できるいう話である。このBSPの中身はオブジェクトファイルの形で提供されており、中のコードまで見たければソースコードライセンスが必要になるのを不便と考えるか、その部分で問題がありそうならサポートに投げてしまえばいいので楽と考えるかは、どういうスタンスでアプリケーション構築を行うかに絡んでくる話である。
今となってはやや古いスタイルのRTOSと言えなくもないが、古いスタイルが故に安心して使えるという側面もある。冒頭でも書いたがエンビテックとPositive ONEはどちらもembOSを扱っているから、英語(orドイツ語)で質問しなくても済む、というのも安心だろう。
BSP対象外のハードウェアを扱うにはいろいろと苦労が必要かもしれないが、取りあえずの評価を行う上で必要になる開発環境まで含めて無償で提供されているので、試してみるのは悪くないかもしれない。
Copyright © ITmedia, Inc. All Rights Reserved.