さてそのMQXであるが、Freescale/NXPで全面的に採用されたというだけのことはあり、そつのない作りが特徴である。マルチタスク対応のプリエンプティブカーネルであり、タスクベースの管理システムを取っている。スケジューリングはラウンドロビンとFIFOが標準装備、タスク同期はLightweight Semaphoreがやはり標準装備となっている。
オプション扱い(ビルド時に指定)のものとしては、スケジューラとしてExplicit using task queuesが、タスク同期はSemaphores/Lightweight events/Events/Mutexes/Lightweight message queue/Messages/Task queuesなどが用意されている。タイマーも基本全部オプション扱いだが、Lightweight Timer/Timer/Watchdogが、メモリ管理は可変サイズのメモリブロックのみ標準サポートで、固定サイズのメモリブロックやMMU/キャッシュ/仮想メモリ、Lightweight Memoryがオプションとなっている(図2)。
Threadモデルをサポートしない(ので、変数の共有などがやりづらい)という問題はあるが、それ以外はおおむね困らないというか、まぁちょっと昔のRTOSそのものといった感じで、それほど利用するのには困らないともいえる。例えば、Hello Worldのサンプルプログラムはこちら(リスト1)。最初に立ち上がるのがWorld Taskで、その中からHello Taskを立ち上げ、無事立ち上がったら“World”を出力する。一方Hello Taskは立ち上がったら即座に“Hello”を出力する。これが正常に動作すれば、結果として“Hello World”が出力されるというわけだ。
#include <mqx.h> #include <fio.h> /* Task IDs */ #define HELLO_TASK 5 #define WORLD_TASK 6 extern void hello_task(uint32_t); extern void world_task(uint32_t); const TASK_TEMPLATE_STRUCT MQX_template_list[] = { /* Task Index, Function, Stack, Priority, Name, Attributes, Param, Time Slice */ { WORLD_TASK, world_task, 1000, 9, "World", MQX_AUTO_START_TASK, 0, 0 }, { HELLO_TASK, hello_task, 1000, 8, "Hello", 0, 0, 0 }, { 0 } }; /*TASK*----------------------------------------------------- * * Task Name : world_task * Comments : * This task creates hello_task and then prints "World". * *END*-----------------------------------------------------*/ void world_task(uint32_t initial_data) { _task_id hello_task_id; hello_task_id = _task_create(0, HELLO_TASK, 0); if (hello_task_id == MQX_NULL_TASK_ID) { printf("\n Could not create hello_task\n"); } else { printf(" World \n"); } _mqx_exit(0); } /*TASK*----------------------------------------------------- * * Task Name : hello_task * Comments : * This task prints "Hello". * *END*-----------------------------------------------------*/ void hello_task(uint32_t initial_data) { printf(" Hello \n"); _task_block(); }
またこのMQXの省フットプリント版として「MQX Lite」という製品もある。4KBのSRAMで動作するMQXのサブセットだが、残念ながらこのMQX Liteのコードを生成するProcessor Exportというツールの開発は既に終了しており、新規/現在進行中のプロジェクトには適さないとNXP自体が宣言している。まぁMQX Liteはもう考えない方がいいだろう。
Copyright © ITmedia, Inc. All Rights Reserved.