ちなみに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が付いた全コンポーネントを含む評価版が入手可能とのことなので、気になる方は連絡してみるとよいだろう。
Copyright © ITmedia, Inc. All Rights Reserved.