IPA


開発成果一覧へ





2005年度上期 未踏ソフトウェア創造事業  採択案件評価書


 



1.担当PM

   高田 浩和 (株式会社ルネサステクノロジ システムコア技術統括部 CPU開発第二部)



2.採択者氏名


開発代表者

田村 修 (有限会社リカージョン 取締役)

共同開発者

なし


3.プロジェクト管理組織


  日本エンジェルズ・インベストメント株式会社



4.委託金支払額


  4,804,510



5.テーマ名


  組み込み機器向け軽量コンパイラの開発



6.関連Webサイト


  http://www.recursion.jp/mitou17/



7.テーマ概要


 
近年、ローエンドの組み込みマイコンにおいても、大幅な高機能化、高速化、低価格化が進むとともに、インシステムプログラム機能やプログラム書き込み可能なフラッシュメモリの搭載など、開発面をも支援する特徴が一般化しつつある。ファームウェアの開発は、通常、メーカごとの統合環境を用いてCやアセンブラでプログラムを作成し、専用の書き込み器を用いながらデバッグするが、
 1)OSのない環境、メモリ配置、割り込み制御、メーカごとに異なる開発環境など、独特の開発スタイルの習得が必要。
 2)ローエンドマイコンのアーキテクチャには物理的な制約から高級言語と整合が難しいものがあり、またハードウェアを意識したコーディングを要する部分も多い。
といった問題があり、入門者のみならず、プロにとっても組み込み開発の障壁となっている。
 本開発では、煩雑なCPUアーキテクチャの理解や専用の開発環境の習熟を要しない開発方式として、組み込みマイコン自体に軽量の言語環境を実装したスクリプト制御技術を提案する。業務用途での迅速な開発を可能にするとともに、趣味のマイコン製作を手軽に楽しむ手段を提供することで、マイコン応用の裾野を広げる効果を狙う。
 搭載メモリがRAM512バイト、ROM4〜6Kバイト程度の小規模なマイコン上でコンパイル可能かつ実用的なプログラミング言語環境を整備し、シリアル通信で直接ソースコードを送り込み実行するスクリプト制御を実現する。迅速な開発や動的な機能入れ替え、長期的な保守を容易にするとともに、小学生からシルバー世代までが手軽にマイコン応用システムを製作できる環境の構築を目指す。



8.採択理由


 
組み込み用のローエンド・マイコンを対象とした、小規模組み込みシステム開発環境の開発を行うものである。メモリ容量が少なく、アーキテクチャ的にも制約の多いローエンド・マイコンを使った組み込みシステムにおいても、コンパイルされた中間コードをインタプリタで実行することで、スクリプト言語のような使い勝手と開発スタイルを利用できるようにしようというもの。OSのない組み込みシステムの開発効率化に向けてのアプローチであるが、マイコンの学習教材や小規模システムの開発には手軽に使用できるかもしれない。
  ただし、このプログラミング言語の言語仕様は独特なものであり、同じスタック型言語であるFORTHやPostscriptともずいぶん異なっていることから、「初心者にもわかりやすい」という申請者の主張は必ずしもすべてのユーザに受け入れられるものではないと思われる。また、ある程度大規模な開発には、クロス開発環境の充実が望まれるところ。ユーザの声を反映し改良することで、より実用的なシステムとなることを期待する。



9.開発目標


 物理的制約の厳しい組み込み機器に、超小型の言語処理系を実装する技術を開発する。PC側に専用の開発環境を用意せずに、プログラムテキストを送り込むのみで直ちに実行できるしくみを整える。実用的な技術となるよう完成度を高め、開発環境を整備するとともに、評価基板を配布して技術普及の下地を作ることを目指した。

 具体的には、本プロジェクト開始時点で以下の5項目を目標とした。
 ア.コンパイラの改良
  言語仕様を改良し扱い易くする。インライン展開、割り込み機構の実装、辞書検索の高速化、エラー生成の詳細化を行う。
また、日本語でのプログラムが可能なバージョンを作成する。
 イ.各種CPUへの実装
  様々な用途に柔軟に適合できる技術であることを実証するため、Microchip, ATMEL,ルネサス(M32R, R8C/Tiny)社の
CPUに実装する。R8C/Tiny についてはUSB インターフェースも組み込む。
 ウ.開発支援環境の整備
  プログラムの誤りや動作状態を迅速に把握するためのPC上のツールを作成する。
基本的な構文チェックとスタック状態のトレース機能を有する。
 エ.評価・デモ用ボード製作
  技術の実用性をアピールするために、3種以上の応用事例を製作する。
また、客観的な評価を得るために100台程度の小型基板を用意し、モニターに貸与する。
 オ.資料作成とWeb公開
  移植法、プログラミングなどを詳説した技術資料とマニュアルを作成する。
また、これらをWeb上で公開する。Webでは英語ページも用意する。



10.進捗概要


 2005 年6月〜2006 年2月までの活動はつぎのとおり。プログラム開発に並行して、開発技術を公知し反応を得ることにも注力した。

 

年月
活動
備考
2005/6 学生向けにデモ 大阪電気通信大学
7-8 実験ロボット試作 R8C/Tiny, PIC12F683
8 学会発表と展示 SWEST7(浜松)
9 マイコンデザインコンテスト応募 CQ 出版社
9-10 分散制御向け差分コンパイラに拡張  
10 評価基板1号製作 ATmega88
10 学会発表と展示 ESS2005(東京)
10 フォーラム発表と展示 関西オープンソース
10-11 ATmega88移植と日本語対応  
12 評価基板1号配布と資料公開  
2006/1 グラフィックアプリケーション開発 Windows版
1-2 高性能プロセッサへ移植 Mappi-II (M32R)
1 英文紹介ページ公開  
1 評価基板1号追加製作と配布 ATmega88+ATtiny45
2 スタックトレース機能実装  
2 評価基板2号(USB 対応)製作  




11.成果


 期間前半はデモ機の試作や学会発表を、後半は評価基板の配布サポートや資料公開などを中心に行った。言語処理系の改良は期間を通じて進めた。

 開発結果として以下を達成した。
 ア.コンパイラの改良
  割り込み機構の実装(R8C/Tiny, ATmega88)、アセンブラ記述による辞書検索の高速化を行った。また、日本語プログラミングのための拡張や32bit 版の作成を行った。


 イ.各種CPUへの実装
  つぎのマイクロコントローラに実装した。
    Microchip: PIC12F683, PIC16F88
    ATMEL: ATmega88
    ルネサステクノロジ: R8C/Tiny, M32R
    USB インターフェースは評価基板2号(ATmega88+ATtiny45)に組み込んだ。


 ウ.開発支援環境の整備
  コンパイル時にプログラム中のスタックレベルの変動を監視し構文誤りを検出する機能を、PC上のコンパイラのなかに組み込んだ。実機でのデバッグが困難なときに用いれば迅速に不具合を検出できる。また、言語環境に馴染むためのグラフィックアプリケーションも試作した。


 エ.評価・デモ用ボード製作
  応用事例として、分散マルチプロセッサシステムへの差分コンパイル配信機構を拡張して小型ロボットに実装し、学会などで発表した。評価ボード600 枚を作成し、モニターへの配布と評価を継続している。一部のモニターから感想、不具合報告、作成したプログラムや、ハードウェアの製作事例が寄せられている。


 オ.資料作成とWeb公開
  Web上で、マニュアル、ソースコード、サポート情報などの技術資料を公開した。また、英語ページも一部公開し、継続して整備している。

 今回のプロジェクトで得られたこれらの成果の中から、いくつかの主要な内容について詳細を以下に示す。

 (1) 多品種のマイクロコントローラへ移植
 プロジェクト開始時点ではPIC16F88 で動作するのみであった。まず分散システムの実験を兼ねて、R8C/Tiny およびPIC12F683 に移植した。R8C/Tiny には後に割込み機構を追加した。また、評価基板の作成に向け、R8C/Tiny と同等の機能をATmega88に移植した。これまでホストPC との通信速度が2400bps でコンパイルの待ち時間が長かったため、辞書検索処理をアセンブラ記述にして高速化し、4800bps での通信を可能とした。また、漢字コード(Shift-JIS)処理も追加するなどして簡易な日本語プログラミングにも対応した。

 

図1 マイクロコントローラのメモリ配置(PIC16F88)

 

 その他、ローエンドマイコン以外の例として、32ビットRISCマイコンである M32Rにも移植を行った。移植は容易であり、FPGAボード上のM32Rソフトマクロコアでも動作を確認することができた。

 (2) 分散制御用に拡張
 小型軽量コンパイラであることを活かした応用例として、言語処理系自体を機器組み込みするとともに、分散マルチプロセッサシステムの制御に拡張する試みを行った。
 R8C/Tiny へコンパイラとインタープリタを、PIC12F683 にはインタープリタのみを実装した。いずれもインタープリタ部分はアセンブラで記述した。これにより、R8C/Tiny をマスターとし多数の PIC12F683 をスレーブとするマルチプロセッサシステムを構成した。R8C/Tiny は自身とスレーブのプロセッサ向けにコンパイルし、スレーブプロセッサへ中間コードを配信、起動するしくみを整えた。差分プログラミングのための拡張も行った。



図2、写真1 分散マルチプロセッサの実験

 

 (3) 32ビット符号付整数版
 ハイエンドの組み込みマイコンへの実装や、組み込みでないPC環境での応用を想定して、より汎用的に使える版を作成した。また、中間コードが冗長であっても実行時の性能を優先するような修正も施した。
  ・スタックを32bit 幅とし、演算は符号付整数化。
  ・中間コード中のイミディエイト値やオフセット値がワード境界にかからないよう配置し、インタープリタ実行を効率化。
  ・バイト順をインテル系(Little Endian)のままで中間コード生成、実行する版を作成。

 (4) 割り込み機構
 組み込み機器への現実的な応用に際しては、タスク管理や一定時間ごとの処理起動のためのしくみが重要となる。割込みやタスク管理は組み込みプログラミングでは上級の課題となるが、これをインタープリタのスレッドループの狭間で呼び出す方式でR8C/Tiny およびATmega88 に実装した。10m 秒または 1 秒間隔で、ベクタ登録した任意の関数を起動できるため、I/O ポートの監視やタスク切り替えに利用できる。

 

リスト1 割込み機構の使用例

 

 (5) 日本語対応
 日本語のままでプログラミングすることにより、プログラミング言語を知らずとも即座に処理動作を把握できる利点がある。FORTH のような後置記法型言語は日本語文法との親和性が高いため、僅かの拡張でそれらしい記述ができる。試みに、Shift-JIS の漢字コードを扱えるようにするとともにコメント挿入を容易にするしくみを導入し、可能性を探った。つぎのようなプログラム記述をそのままマイクロコントローラに送り込み実行することができる。
 以下で末尾が’ ,’となるワードはコメントとして無視される。

 

リスト2 日本語的プログラム記述例

 

 (6) グラフィック
 処理系が軽量であることを、組み込み以外の面に応用できるか検討した。数Kバイトで実装できることから、汎用のアプリケーションに組み込んでのスクリプト制御が考えられる。その第一歩としてグラフィック機能を追加したプログラミング環境をWindows に実装した。ウィンドウにグラフィック描画するコマンドを追加したものであるが、LEGO 言語のように教育現場で用いることを想定してタートルグラフィックスができるようにした。簡単なプログラムで多彩な描画を楽しめる。

 

リスト3、図3 グラフィック描画アプリケーション

 

 (7) スタックトレース機能
 後置記法型言語でスタックを想定したプログラミングでは、スタックの増減を意識したコーディングが必要とされるが、バグの多くもこのスタックレベルの整合がとれないことに起因する。コンパイル時に、スタックの増減を自動的にトレースし、制御構造のなかで整合がとれないところを検出するしくみを実装した。



12.プロジェクト評価


 今回の未踏プロジェクトは、開発者としては2度目の採択であるが、その非常に真摯な取り組みは高く評価できるものであった。アイデア自体はかねてから開発者が思い入れをもって世に問うべく暖めていたものである。
 ForCyと呼ばれる軽量コンパイラ・インタプリタ環境を搭載することで、非常に簡単にプログラムを効率よく開発し実行することを可能としている。電源を入れるとすぐに立ち上がり、そのままプログラムを実行できるインタプリタが立ち上がるのは、PCなどとは比べ物にならない軽快さである。ローエンド・マイコン向けの小規模な組み込み機器用プログラムをアセンブラで開発することの多い人にとっては、非常に有用な開発ツールとなると思われる。Microchip PICマイコン、Atmel AVR, Renesas R8C/Tinyなど多くのマイクロコントローラに対応しており、かつ開発成果が基本的にオープンソースとなっていて誰でも利用することができるのは非常にすばらしい。
 採択の時点でプロトタイプが既に動作していたものの、最終的に開発された成果物は当初想像した以上のものとなった。これはやはり、開発者の田村氏の思い入れの強さが反映されたためであろうかとも思われる。意欲的に学会発表やイベントでの展示を行って積極的にプロジェクトの普及につとめ、それらの機会を通じ、生の声のフィードバックを得て、さらによりよい物を開発してゆこうとする姿勢は非常にすばらしいと感じた。技術的にも、ハードウェアの仮想化をローエンドマイコン用の組み込みプログラムの開発における開発効率向上に積極的に利用した点は大いに評価できる。
 どれぐらい普及し利用されるかはまだ未知数な部分があるが、分散環境への対応や、日本語環境、組み込み以外のグラフィックス用途など、面白い種もまかれている。今後どのように芽が出て成長してゆくのかをじっくり見守っていきたいと考えている。



13.今後の課題


 組み込み用の処理系の場合、開発環境がすぐに利用できるのに加えて、すぐに使える評価ボードのような環境があることが実際には非常に大切である。今回評価用のサンプルとして配布した簡単なボードのようなものだけでなく、もう少し実際の応用に近い、リファレンスボードを作ることも普及のためには重要かもしれない。誰でも入手できる共通なプラットフォームが整えば、オープンソース・ソフトウェアとしてさらに普及が加速し、ユーザ会やコミュニティ・ベースでの組み込みシステム開発というのもひょっとすると夢でなくなるかもしれない。
 今回、田村氏にはM32Rソフトマクロ・コアを搭載したFPGAボードもターゲット比較評価のために使っていただいた。実は、このようなFPGAボードとシンセサイザブル・コアを使えば、究極的には理想のForCyエンジンを作ることも不可能ではない。組み込みマイコンのアーキテクチャの壁を乗り越えることは、未踏プロジェクト的にもある意味興味深いテーマと考えられる。


  ページトップへ   






  Copyright(c) Information-technology Promotion Agency, Japan. All rights reserved 2004