概要
TOPPERS(Toyohashi OPen Platform for Embedded Real-time Systems)は、豊橋技術科学大学の高田広章教授を中心に開発・維持されている、日本発のオープンソース組み込みOSプロジェクトです。ITRON(Industrial TRON)仕様を実装したRTOSを中心に、産業機器・車載・航空・医療分野で広く使われています。
ITRON(アイトロン)は、TRONプロジェクトの一部として1980年代後半に坂村健教授が主導して策定された組み込みOS仕様です。実装ではなく「仕様」であり、その仕様に適合するOSを各ベンダーが実装できる設計になっています。TOPPERS/ASP・TOPPERS/FMP・TOPPERS/HRP2などがITRON準拠の代表的な実装です。
FreeRTOSやZephyrが国際的に広く使われるのに対し、TOPPERS/ITRONは国内産業・車載・防衛・医療分野での長い実績と、機能安全規格への対応で差別化されています。
歴史・背景
TRONプロジェクトは1984年に坂村健教授(東京大学)が「日本発のコンピュータ・アーキテクチャ」として提唱した壮大な構想です。その一部として、産業用途向けの「ITRON」仕様が1987年に策定されました。
ITRON仕様は版を重ね、μITRON(マイクロITRON)2.0・3.0・4.0と改訂されました。μITRON4.0(1999年)は最も普及した仕様で、現在のTOPPERS/ASP3のAPIはμITRON4.0をベースに拡張したものです。
2000年代初頭、名古屋大学の高田広章教授がTOPPERS Projectを立ち上げ、μITRON4.0準拠のオープンソース実装「JSPカーネル」を公開しました。その後、TOPPERS/ASP(Advanced Standard Profile)・HRP2(High Reliable Profile)・FMP(Flexible Multiprocessor Profile)など目的別のカーネルが整備されました。
車載分野ではAUTOSAR(Automotive Open System Architecture)との連携も整備され、機能安全ISO 26262に対応したTOPPERS/A3(Automotive)も開発されています。
技術仕様
TOPPERS主要カーネルの比較
| カーネル | 対象 | 特徴 |
|---|---|---|
| TOPPERS/ASP3 | 一般組み込み | μITRON4.0拡張準拠、最も汎用 |
| TOPPERS/HRP3 | 高信頼性 | メモリ保護機能付き(MPU活用) |
| TOPPERS/FMP3 | マルチコア | 対称型マルチプロセッサ対応 |
| TOPPERS/HRMP3 | HRP3+FMP3 | メモリ保護+マルチコア |
| TOPPERS/SSP | 超省リソース | 2KB程度のROMで動作可能 |
| TOPPERS/A3 | 車載AUTOSAR | AUTOSAR OSとの連携 |
μITRON APIの主要サービスコール
ITRONではOSの機能を「サービスコール」と呼びます。命名規則はプレフィックスで操作を示します(cre_=create, del_=delete, act_=activate等):
/* タスク生成 */
ER ercd = cre_tsk(TASK_ID, &ctsk);
/* タスク起動 */
act_tsk(TASK_ID);
/* タスク終了 */
ext_tsk();
/* セマフォ */
cre_sem(SEM_ID, &csem);
wai_sem(SEM_ID); /* 待機(ブロック) */
sig_sem(SEM_ID); /* シグナル(解放) */
pol_sem(SEM_ID); /* ポーリング(ブロックなし) */
/* イベントフラグ */
cre_flg(FLG_ID, &cflg);
set_flg(FLG_ID, 0x01); /* フラグセット */
wai_flg(FLG_ID, 0x01, TWF_ANDW, &p_flgptn); /* 待機 */
/* データキュー(メッセージ受け渡し) */
cre_dtq(DTQ_ID, &cdtq);
snd_dtq(DTQ_ID, data); /* 送信 */
rcv_dtq(DTQ_ID, &data); /* 受信 */
/* アラーム(ワンショットタイマー) */
cre_alm(ALM_ID, &calm);
sta_alm(ALM_ID, 1000); /* 1000ティック後に起動 */
オブジェクト定義(静的定義)
TOPPERS/ASP3では、タスク・セマフォ・フラグなどのオブジェクトを静的に定義するのが特徴です(動的生成も可能)。静的定義はコンパイル時にメモリが確定するため、組み込みに適しています:
/* kernel_cfg.c(カーネル設定ファイル,自動生成) */
CRE_TSK(SENSOR_TASK, {
TA_NULL, /* タスク属性 */
0, /* 拡張情報 */
sensor_task, /* タスク関数 */
SENSOR_PRIORITY,/* 優先度(1が最高)*/
STACK_SIZE, /* スタックサイズ */
NULL /* スタック領域(NULLで自動割付)*/
});
CRE_SEM(UART_SEM, {
TA_NULL, /* セマフォ属性 */
1, /* 初期値(1=使用可能) */
1 /* 最大値 */
});
タスク状態遷移
ITRONのタスク状態は以下の5状態で管理されます:
act_tsk()
[休止状態]────────→[実行可能状態]
(DORMANT) (RUNNABLE)
↑ ↗↘ ↘
ext_tsk() 実行中 優先度順 待ち状態
(RUNNING) スケジュール (WAITING)
↘ ↗ ↙
強制待ち状態(SUSPENDED)
動作原理
μITRON優先度体系
μITRON4.0では優先度1が最高優先度です(FreeRTOSとは逆)。優先度の数が大きいほど低優先度になります。タスクの最大優先度数は実装依存ですが、TOPPERS/ASP3では16段階が一般的です。
割り込みハンドラの定義
TOPPERSでは割り込みを「割り込みハンドラ」(ISR: Interrupt Service Routine)として定義し、カーネルの管理下に置きます:
/* 割り込みハンドラ定義(kernel_cfg.c) */
ATT_ISR({
TA_NULL,
0,
UART1_IRQn, /* 割り込み番号 */
uart_isr, /* ハンドラ関数 */
1 /* 割り込み優先度 */
});
/* ISR実装 */
void uart_isr(void) {
/* データ受信処理 */
uint8_t data = UART1->DR;
isig_sem(UART_SEM); /* セマフォシグナル(ISR用) */
}
タイムイベント(周期ハンドラ)
ITRONには「周期ハンドラ(cyclic handler)」という周期実行機能があります:
/* 周期ハンドラ定義 */
CRE_CYC(SENSOR_CYC, {
TA_STA, /* 起動時から動作開始 */
0,
sensor_cyclic, /* ハンドラ関数 */
1000, /* 周期(1000ティック=1秒) */
0 /* 起動位相 */
});
void sensor_cyclic(EXINF exinf) {
iact_tsk(SENSOR_TASK); /* センサータスクを起動 */
}
用途・ユースケース
車載ECU・AUTOSAR
日本の自動車メーカーとそのTier1サプライヤーでは、TOPPERS/A3を用いたAUTOSAR準拠ECUの開発が行われています。ISO 26262のASIL-B/D対応を実現するために、HRP3の保護機能(メモリ保護・サービス保護)が活用されます。
産業機器・工作機械
国内の産業機器メーカーでは、長年の実績と国内サポート体制を理由にTOPPERS/ASP3を採用するケースが多くあります。製造装置・計測器・PLC代替等で使われています。
防衛・航空宇宙
防衛省調達案件や国産航空機の組み込みシステムで、ITRONベースのシステムが採用されている事例があります。
教育・研究
豊橋技術科学大学・名古屋大学をはじめとする国内の大学研究室では、TOPPERS/ASP3を教材・研究プラットフォームとして広く使っています。
実装・開発のポイント
開発ツールチェーン
TOPPERS/ASP3の開発は主にGCC(arm-none-eabi-gcc)とMakefileベースです:
# ビルド例(Cortex-M4向け)
cd asp3/build
make -f ../Makefile.asp3 BOARD=stm32f4discovery
# バイナリ生成:asp3.elf / asp3.bin
コンフィギュレーター
TOPPERSのユニークな特徴として「コンフィギュレーター」があります。CFGファイルにシステム構成(タスク数・優先度・スタックサイズ等)を記述すると、コンフィギュレーターがカーネル設定ファイル(kernel_cfg.c)を自動生成します:
/* system.cfg(システム設定ファイル) */
#include "kernel.h"
#include "t_stddef.h"
/* センサータスク定義 */
CRE_TSK(SENSOR_TASK, { TA_NULL, 0, sensor_task, 3, 512, NULL });
/* セマフォ定義 */
CRE_SEM(UART_SEM, { TA_NULL, 0, 1 });
メモリ保護(HRP3)
TOPPERS/HRP3はCortex-MのMPU(Memory Protection Unit)を活用して、タスクごとのメモリアクセスを制限します。あるタスクが誤って別タスクのスタックを破壊するバグを検出できます:
/* ドメイン定義(メモリ保護の単位) */
CRE_DOM(SENSOR_DOM, { TA_NULL });
/* センサータスクをドメインに所属させる */
CRE_TSK(SENSOR_TASK, { TA_DOM(SENSOR_DOM), ... });
他技術との比較
TOPPERS vs FreeRTOS
| 項目 | TOPPERS/ASP3 | FreeRTOS |
|---|---|---|
| API仕様 | μITRON4.0拡張 | FreeRTOS独自 |
| 優先度体系 | 1=最高 | 高い数値=高優先度 |
| 国内サポート | 豊富(国内フォーラム) | 英語中心 |
| 安全認定 | IEC 61508対応版あり | IEC 62443版あり |
| 静的定義 | 標準(CFGファイル) | ランタイム生成中心 |
| 学習コスト | 国内資料が豊富 | 英語ドキュメントが主 |
TOPPERS vs Zephyr
Zephyrは国際的なIoT・BLE・Matterエコシステムとの親和性で優ります。TOPPERSは国内産業・車載分野での実績と機能安全対応で優位です。新規IoTプロジェクトではZephyr、既存の国内産業システム拡張ではTOPPERSが選ばれる傾向があります。