手持ちのマイコン・ソフトウェアをARMマイコンへ移植する方法について解説 ―― ARM Cortex-Mマイコン・ワークショップ2013
ARM Cortex-Mマイコン(ARM Cortex-MシリーズのCPUコアを内蔵したマイクロコントローラ)のアプリケーション開発者に向けた講演会兼展示会「ARM Cortex-Mマイコン・ワークショップ2013」が2013年5月24日に東京・秋葉原の秋葉原コンベンションホールで開催された(写真1).
ARM Cortex-Mマイコンは,英国ARM社の32ビット RISCアーキテクチャに沿って開発されたCPUコア「Cortex-Mシリーズ」を内蔵するマイコンである.Cortex-Mシリーズにはローエンドからハイエンドまで,いくつかの品種が用意されている.大まかに分類すると,ローエンドのCPUコアが「Cortex-M0/M0+/M1」で,既存の8ビット・マイコンやローエンド/ミッドレンジの16ビット・マイコンを置き換えるべく開発された.続くミッドレンジのCPUコアが「Cortex-M3」で,既存のミッドレンジの16ビット・マイコンやローエンド/ミッドレンジの32ビット・マイコンを置き換える.そしてハイエンドのCPUコアが「Cortex-M4」で,ミッドレンジ/ハイエンドの32ビット・マイコンを実現する.
「ARM Cortex-Mマイコン・ワークショップ2013」の当日は四つのトラックに分かれて数多くの講演が実施された.その中から,これまで使っていた既存の32ビット・マイコンのソフトウェアをARM Cortex-Mマイコンに移植するときのポイントについて解説した講演「ARMマイコン・ソフトウェア――実際にやってみて分かった『ARM Cortex-Mマイコン』と移植のポイント」が非常に興味深かったので,紹介したい.講演者は,横河ディジタルコンピュータでARMトレーニングセンタ長をつとめる殿下 信二氏である.
なお講演スライドの撮影は禁止されていたので,文章を中心とした説明になる.どうかご了承いただきたい.
●世界中で40社を超える半導体ベンダが採用
Cortex-Mシリーズが現在,マイコンの世界で大きく注目されているのは,40社を超える半導体ベンダがマイコンやSoC(System on a Chip)などのCPUコアに採用しているからだ.マイコン・ベンダが違っていても,同じCortex-Mコアを内蔵したマイコンであれば,ほぼ同じアプリケーション・ソフトウェアが動く.そして同じ開発ツールが使える.すなわち,ベンダを超えた標準的な32ビット・マイコンの地位を確保しつつある.
マイコンを使ったシステム開発にとって最も重要なのは,マイコンが内蔵している周辺回路だ.システムが備えるべき機能をすべて,周辺機能として搭載しているマイコンが望ましい.
ここで難しいのが,マイコン製品が搭載している周辺機能はシステムにとって余分であったり,あるいは不足であったりすることだ.使わない周辺機能があるマイコンだと,コストに無駄が出る.周辺機能が足りないマイコンだと,別の周辺ICを外付けして不足の機能を補うことになる.この場合もコストが余分にかかる.
事態をさらに難しくしているのが,システムには派生品の開発が付き物だということだ.周辺機能を豊富に備えたハイエンド品と,基本的な機能だけを持たせたローエンド品では,望ましいマイコンが違う.周辺機能から選択していくと,ハイエンド品とローエンド品について同じマイコン・ベンダから最適な品種が選べないケースがある.CPUアーキテクチャが異なるベンダのマイコンが候補になる場合も少なくない.こうなると今度は,ソフトウェアの変更が必要だったり,開発ツールが違ったりする.開発ノウハウを新たに構築する必要が出てくる.
●異なるベンダでソフトウェアとツールが共通に
Cortex-Mシリーズのマイコンが優れているのは,同じCPUコアのマイコンであれば,異なるベンダでもソフトウェアと開発ツールが共通であることだ.すると例えばCortex-M3コアのマイコンであれば,ベンダに関係なく,最適な周辺機能を備える品種を選べるようになる.複数のベンダからマイコンを気軽に選べるとなると,適切な周辺機能を備えた品種が見つかる可能性が高まる.派生品展開でも,違うベンダの品種が選択候補に入ってくる.
●ARMマイコンへの移行に伴う問題点
ただし,既存のマイコンで開発してきたチームが新たにCortex-Mシリーズのマイコンを採用するとなると,いくつかの問題点が出てくる.まず,これまで使い慣れてきた開発ツールは使えなくなる.ARMの開発ツールを使わなければならない.今後のソフトウェア開発では,ARMの開発ツールに慣れていくことが求められる.
それから既存のソース・コードを行かすためは,いくつかの工夫が必要になる.例えば,初期化コードとデバイス・ドライバを新たに開発しなければならない.そのほかにもソース・コードを一部,修正する必要が出てくる.
そして最後に最も苦労しそうなのが,ソフトウェア移植の対象システムにおけるタイミング設計の最適化だと殿下氏は述べていた.システムが動作するのだけれども,挙動がなにかおかしい.あるいは,正常に動作していたシステムに機能を追加すると,動作しなくなる.このような不具合に遭遇することが少なくない.割り込みの遅延時間をきちんと確保したり,ネスティングのやり方を工夫したりといった対応が必要になる,としていた.
●ハンドラ・モードとスレッド・モード
ここからは,Cortex-Mシリーズの具体的な内容へと話題を転じよう.まず,Cortex-Mシリーズの特徴として,ネスト型ベクタ割り込みコントローラ(NVIC),メモリ保護ユニット(MPU),最少で2ピンのシリアル・ワイヤ・デバッグ(SWD)機能を装備していることを挙げた.
具体的な移植の事例としては,「Corex-M3プロセッサ」を内蔵したマイコンを取り上げた(図1).Cortex-Mシリーズの中では最も標準的な32ビット・マイコンであり,製品を提供しているマイコン・ベンダが多い.
プロセッサ動作モードでは,ハンドラ・モード(特権状態)と,スレッド・モード(特権状態と非特権状態)をサポートする.ハンドラ・モードはリセットやアボート,割り込みなどが生じた後に入るモードである.スレッド・モードは通常のアプリケーションのコードを実行するときのモードで,特権状態と非特権状態のいずれかを選択できる.