ちなみにHello, Worldのサンプルはこんな感じである(リスト1)。これはHelloworld.cの中に含まれるmain()の中から呼ばれるcallback関数として実装されており、このPoll1()は定期的に呼び出されてリアルタイムで処理されるという想定のコードである。
void Poll1(void* param)
{
int x;
#ifdef _DEBUG
fprintf(stderr, "Poll1 started\n");
#endif
:
:
(中略)
:
:
while (!gInit.bShutdown)
{
RtSleep(1000);
#ifdef _DEBUG
fprintf(stderr, "Poll1 waking up\n");
#endif
// TODO: do what has to be done every 1000 milliseconds
// Print Hello World! 10 times
For (x = 0; x < 10; x++)
printf("Hello World!\n");
}
// tell that this thread is dead
gInit.htPoll1 = NULL_RTHANDLE;
}
実行すると図4のようにConsoleに10回“Hello, World!”を出力して終了するが、またすぐに起動して……の繰り返しとなる。APIがちょっと風変わりではあるが、それでも理解できる範囲である。
INtimeの特徴というかメリットは、Windowsのエコシステムと共存できる点である。例えば、通信用のデバイスドライバをINtime用に開発しなくても、Windows用のドライバがあれば、INtimeカーネルの上で動いているアプリケーションからWindows側にGOBSnet経由で送り、Windows上のNTX DLLからWindowsのドライバ経由で通信を行うといったことが可能になる。
といっても、全部が全部Windows任せだとオーバーヘッドが多いためか、ある程度はINtime側でも対応が進められている。例えばTCP/IPは標準装備だが、これに加えてTSNのサポートとRealtime Fieldbusプロトコルを幾つかサポートする。またIntel MKL(Math Kernel Library)およびIntel IPP(Integrated Performance Primitive)にも対応しており、MKL/IPPをそのまま使えるといったRTOSには珍しい対応も目に付く。ストレージはPATA/SATA/NVMeに対応、レガシーBIOSだけでなくUEFIにも対応している(当然Secure Bootにも対応する)。ファイルシステムも、INtime6ではFAT32でファイル名も8+3のみの対応だったが、INtime7ではUFS(Unix File System)の対応やUTF-8を利用したロングファイルネームの対応も果たすなど、大分使い勝手が改良されている。
代理店による説明では、INtimeを利用することで、通常のPC環境で100μs周期のアプリケーションの稼働が可能になるとしており、こうした特殊な用途向けに現在も販売されている。一応連絡すると、Limited Time Licenseが付いた全コンポーネントを含む評価版が入手可能とのことなので、気になる方は連絡してみるとよいだろう。
ソフトでもハードでもノンリアルタイムでもOKなRTOS環境「SHaRK」
ロシア製の「Kaspersky OS」はセキュリティ重視も西側での普及は見通せず
MS-DOSに敗れしCP/Mの落とし子「Real/32」はRTOSとして生き抜いた
欧州の航空宇宙分野で名を馳せるRTOS「PikeOS」の出自はL4 Kernelにあり
MC68000に最適化されたRTOS「pSOS」は波乱万丈の運命を経てVxWorksのカーネルにCopyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク
よく読まれている編集記者コラム