解決する課題


あなたの開発を楽(ラク)にする、
SOLID
が様々な課題を解決します

開発者が本来のクリエイティブな業務に最大のパフォーマンスを発揮して「かしこく開発」し、また、不具合のモグラ叩きに翻弄されずに「スマートにデバッグ」するために、SOLIDは様々な課題を解決します。

 

コーディング作業や繰返し作業を1秒でも速くしたい

 

タイプミスやコーディングエラーを
自動で防ぐ、サクサク コーディング

 

 

ターゲット依存の設定や、OS・ツール
の環境設定は自動化してほしい      

OS/カーネルを便利に使う

MMU設定は全て自動、RTOSに最適なメモリ管理

 

 

バグは早い段階で、自動検出したい

 

アドレスサニタイザによるメモリバグ
自動検出

 

システム性能のボトルネックを簡単に評価したい


 簡単に使える性能解析ツール

SOLIDでは、Arm Cortex CPUに搭載されるPMU(Performance Monitoring Unit)を利用した計測機能が利用できます。また、RTOSと連携した性能解析機能も持っています。
さらに、京都マイクロコンピュータの性能解析ツールであるQProbeアナライザー(SOLIDとは別売のオプション)をSOLIDに組み込んで使いやすい形で提供します。解析用のフックルーチンを予めSOLID-OSに組み込んであるので、ユーザーはビルドモードを選ぶだけで容易にアナライザー機能を使う事ができます。

※ スターターキット付属のPARTNER-Jet2では、QProbe連携は使えません。通常版のPARTNER-Jet2 Model20以上が必要です

SOLIDの主な性能解析:

 CPU負荷状況
 キャッシュミス率
 メモリアクセス回数
 タスク別の計測や集計
 関数単位やタスク単位の、実行履歴・比率・分散状況

システム性能のボトルネックを簡単に評価したい


 JTAGエミュレータと連携した リッチなRTOS分析

SOLID-IDEとRTOSがデバッガと密接に連携して、タスクリストや状態を表示します。タスクについては、各タスクの状態だけでなく、関数呼び出し状況やローカル変数もタスクを切り替えて表示可能です。

SOLIDの主なRTOS分析機能:

 スタックフェンス、スタック解析機能
 システムコールトレーサ
 タスク状況をIDEに表示
 RTOSの資源表示(SOLID-IDEでは、2017/06 一部実装済み。今後に拡張。またPARTNERデバッガ側では対応済み)
 実行コンテキスト(タスク、割り込み)遷移表示(QProbeで対応。SOLID-IDEでは今後に対応)

バグは早い段階で、自動検出したい


 アドレスサニタイザによるメモリバグ自動検出

組込みソフトウエアの不具合で最も多い原因のひとつがメモリ破壊と言われています。結合テストの段階で発生した不具合は、その現象から原因をつきとめるのに複数の要因が考えられるため、どうしても「人海戦術」や場合によっては不具合の影響が広範囲に及び「モグラ叩き」になってしまうことがあります。
SOLIDでは、「メモリ破壊を起こしていても、まだその影響が何も起きていない」単体テスト段階でバグを自動検出できるアドレスサニタイザ機能を実現しています。

メモリ破壊は初心者だけでなく誰でもうっかり作り込んでしまうものです。結合テストで他人に指摘される前に、不具合を見つけて自分のコードを修正しておきましょう。


アドレスサニタイザ

アドレスサニタイザは、LLVM/Clang コンパイラのデバッグ・テスト支援機能の一つで、メモリ破壊や リークなどを実行時に検出する動的解析機能です。使い方は簡単。アドレスサニタイザモードでビルドして実行するだけです。自分で考えてブレークポイントを設定するなど必要ありません。SOLID-IDE と SOLID-OS が連携して、間違ったメモリアクセスを自動的にあぶり出してくれます。


アドレスサニタイザが検出できるメモリ破壊バグ

アドレスサニタイザを使うと次のようなメモリ破壊バグが自動的に検出できます。

 ローカル変数、グローバル変数の、オーバーランや未定義領域アクセス
 スタックオーバーフロー
 memcpy()など連続するメモリアクセスも、SOLID専用ライブラリの利用で検出可能


アドレスサニタイザが何故便利なのか

通常デバッグ段階では、何等かの不具合によりメモリが破壊「された」ことを起点に、破壊されたメモリ箇所にイベントブレークを設定し、その際のプログラム履歴を取って不具合箇所をたどる方法が一般的です。ただしこの方法では、メモリ破壊が起きた結果として何等かの影響が出なければ、潜在的なバグとして見逃されてしまう可能性があります。

 アドレスサニタイザは、バッファオーバーランや未定義領域のアクセスといった、プログラムの代表的なメモリ破壊に関わる不具合検出を自動的に行う機能です。自動的とは、つまり「不具合箇所の見当を付ける必要がない」ということです。対象のプログラムが不当なメモリアクセスを行った瞬間に、「たとえ不具合症状が起きていなくても」あたかも自己申告するように、アドレスサニタイザが不当動作をあぶり出すのです。

 カジュアルテスト(設定が簡単)で不具合が検出できる
 メモリ破壊バグを自動的にあぶり出す
 対象メモリアドレスの絞り込みが不要
 潜在的不具合を後工程に渡さない


アドレスサニタイザの仕組み
~MMUを活用したメモリ管理~

アドレスサニタイザ機能では、MMUが重要な役割を果たしています。 MMUを活用することで、各機能(モジュール)を仮想アドレス上に分散して配置できるため、その間にガード領域を設けることにより、領域外アクセスであるバッファオーバーランの検出や、特定のメモリ領域に対してアクセス制限をするセキュリティ管理が可能になります。

また、SOLIDでは「コアサービス」と名付けた一連のランタイムがIDEと密接に連携して動作しています。アドレスサニタイザ機能では、コアサービスがアクセス対象のアドレスの有効無効を判断し、無効なアドレスと判定した場合にプログラムをブレークしてデバッガに通知します。
なお、アドレスサニタイザを有効にしたモジュールでは、メモリアクセス判定サイクルによるオーバーヘッドが発生します。

やっぱりコストは抑えたい


 RTOSは量産時でもロイヤリティフリー

SOLIDが採用しているRTOSは、ロイヤリティフリーのTOPPERS/ASP3カーネルです。 RTOSはTOPPERSプロジェクトが規定する以下のライセンス形態に従って利用してください。

 RTOSの使用・複製・改変・ 再配布は無償
 RTOSを機器に組込んで量産する場合は、その利用者がTOPPERSプロジェクトに再配布形態を報告すること

詳細は、TOPPERSライセンス(https://www.toppers.jp/license.html)に従ってください。

なお、量産にあたっては、お客様が京都マイクロコンピュータにその旨を報告する必要はありません。また、SOLID Starter Kitなど、評価目的での利用に関しては、TOPPERSプロジェクトへの再配布報告は不要です。

やっぱりコストは抑えたい


 SOLIDは利用者単位のサブスクリプションライセンス

SOLIDの価格は、全ての開発プラットフォームを一括としサブスクリプションライセンスとなっています(費用には保守料も含まれます)。開発スケジュールや開発人数の増減に柔軟に対応いたします。

 含まれるものは次のツールです
 - SOLID-IDE(Visual Studio ベース。Visual Studio の別途購入不要)
 - SOLID コンパイラツールチェイン(GCC & LLVM/Clang)
 - ARM 用デバッガ(JTAG 方式 & モニタ方式)
 - RTOS(標準 TCP/IP+標準 FATFS 含む)
 ライセンスはSOLIDの利用者単位です

 RTOSカーネルや標準付属のTCP/IPやFATFSには、ライセンス料金やランタイムロイヤリティは発生しません。

 ライセンス契約数に応じたボリュームディスカウントをいたします(詳しくはお問合せください)

また、SOLIDのライセンスをご購入いただいた場合は、開発ツール用の JTAG デバッガ(PARTNER-Jet2 Model10 本体)の特別提供プランを用意しています。

詳しくは当社までお問合せください。

品質を確保し、開発効率を向上させたい


  実績の高いTOPPERSカーネル

SOLID-OSであるTOPPERS/ASP3は、組み込み機器として幅広く採用実績のあるμITRON 4.0仕様に準拠しています。
トロンフォーラムによる、「2015年度組込みシステムにおけるリアルタイムOSの利用動向に関するアンケート調査報告書」においても、日本国内で組込みシステムに組み込んだOSのAPIで、ITRON仕様APIが43%のシェアを占めており、リアルタイムOSのデフォルトとしての位置づけとなっています。

出典:2016/4/5 トロンフォーラム発表記事
  (http://www.tron.org/ja/wp-content/uploads/sites/2/2016/04/TEP160405_u01.pdf)

TOPPERS/ASP3の大きな特徴の一つは、ティックレスの高分解能時間管理機能です。この機能によりタスク処理の実行タイミングをマイクロ秒単位で制御することができ、不必要なタイミングで割込みがかかることを抑止するので、次のようなメリットがあります。

 省電力性に優れる
● μsecオーダーの時間管理を効率的に実現 。

また、スターターキットでは、SOLID-OSとして簡単に使えるよう、資源動的生成版カーネルと、よりコンパクトな静的生成版カーネルの2種類のカーネルを用意しており、FPU使用の有無も指定可能です。新規にプロジェクト作成する時に、システム仕様に適したカーネルをご選択する事が出来るようになっています。

品質を確保し、開発効率を向上させたい


  複数拠点での共同開発に有効なインテリジェントローダー

プログラムの規模が大きくなってくると、複数の拠点や機能単位での分割開発するケースが多くなります。その場合、プログラムを変更する度にカーネルを含む全てのプログラムをビルド・ロードしていたのでは、大変効率が悪くなります。また、更新する必要がないモジュールは、開発時に固定しておきたい(ブラックボックス化したい)というニーズも存在します。

SOLID-OSでは、「コアサービス」と名付けた一連のランタイムがIDEと密接に連携することで、多くの便利な機能を実現しています。共同開発に有効なローダーも、コアサービスの大きな特徴のひとつです。


MMUを活用してモジュールを分散配置

SOLIDでは、モジュールを各開発拠点単位に分割・分散配置して、開発対象モジュールだけに限定してデバッグ操作を行うといった管理が簡単に実施できます。
Linuxであれば、仮想アドレスで空間を多重化し、なおかつデマンドページングによって動的にメモリ割り当てを行うといった機能がありますが、RTOSの場合はリアルタイム性(再現性)を重視するので、空間の多重化は使用しません。SOLIDのアプローチとしては、単一の大きな仮想アドレス空間にプログラムを分散配置するのにMMUを利用しています。

SoCの構成に合わせた仮想アドレスの設定は全てIDE側の簡単な操作で利用できるようにしましたので、ユーザーはメモリの設定プログラムを自分で作成する必要はありません。


モジュール間参照も解決、開発対象モジュールを単体ロード

MMUを活用してモジュールの分散配置が出来たら、次はプログラムのローディングです。
プログラムの規模が大きくなってくると、修正の度にプログラム全体をビルド・ロードする時間が開発者の負担になってきます。そのためSOLIDでは新たに開発対象モジュール単体だけをビルド・ロードする仕組みを設けました。

これまでの開発ツールでは、モジュール単体でビルド(リンク)すると、モジュール間参照などの問題があるため、単にビルドしただけではプログラムが正常に動作しません。しかし
SOLIDでは、ローダーにリンク機能を持たせることでモジュール間に参照が残っているときの問題を解決しました。

リンクもDLLのような形式ではないので、モジュール間の双方でシンボル参照をしていても問題ありません。関数だけでなく変数のアドレスの解決も可能です。つまり従来のコーディングスタイルを変更する必要もありません。


インテリジェントローダーが
スマートなデバッグ環境を生み出す

ローダーはRTOSカーネル情報、MMUによるマッピング情報、IDEのビルダが持っているシンボル情報やデバッグ情報の全てと連携して動作しています。モジュールが追加された場合、ローダーがIDEに通知するので、IDE側でシンボルを自動的にロードしたり、逆にロードするモジュールをIDE側で差し替えたりすることも可能です。 そのため、追加モジュールだけをロードした場合でも、プログラム全体がデバッグ可能です。

これは、SOLIDが開発環境の一体化をしたことで初めて実現できる機能であり、ソフトウエア開発全体の効率アップに大きく貢献できるものと考えています。

コーディング作業や繰返し作業を1秒でも速くしたい


 タイプミスやコーディングエラーを自動で防ぐ、サクサク コーディング

「コーディング時のちょっとしたタイプミスは防ぎたい」また「ツールのメニューやオプションを探してイライラしないようMHIは直感的に操作したい」、そんな課題を解決するため、SOLIDではプログラマー・フレンドリーな統合開発環境(IDE)であるVisual Studio® IDE、エディタ、デバッガを採用しました。


Visual Studio®エディタが持つ高度な入力支援機能を、
Clangコンパイラと連携して実現

エディタでソースコードを編集する際、入力リストを候補を表示するIntellisense機能がシンボル名のちょっとしたタイプミスを防いでくれます。
メンバの型も表示します。

また、ソースコード編集時にバックグラウンドでコンパイラエンジンが動作することで、コンパイル時に起きうる問題を自動的に警告します。単純な文法エラーだけでなく、モジュール内のプログラムの流れを解析した結果のゼロ除算警告なども自動検出する、かしこい機能です。


Visual Studio®ベースのIDEで軽やかに

 直感的なツール ウィンドウと簡単にアクセスできるメニュー オプションはMicrosoft ® Visual Studio®の使い勝手をそのままに、メニューの中身は京都マイクロコンピュータが独自開発したロイヤリティフリー(有償版のVisualStudioを別途購入しなくても良いということ)のIDEです。

コンパイルからデバッグまで、全てWindows上で作業できるので、ソースコード全体を見渡すことができ、「ビルド>転送>実行>デバッグ」、の手順がシンプルに行えます。

ターゲット依存の設定や、OS・ツール の環境設定は自動化してほしい


MMU設定は全て自動、RTOSに最適なメモリ管理

RTOS環境でも、Linuxのようなファイル分割やメモリプロテクション機能を利用したいという声は多く寄せられています。SOLIDでは、プロセッサが持つMMUを活用し、広い仮想メモリ空間にメモリ資源を分散配置することで、実行ファイルを分割したローダー機能や実行時メモリプロテクション機能を実現しました。
しかし、MMUを組み込み環境で使おうとすると、MMUの設定にはある程度の専門知識が必要となる事、MMU設定プログラムはデバッグが難しい(プロセッサが命令をフェッチできない状態に陥るなど)という点から、SOLIDではMMUの設定プログラムを自動生成する仕組みを設けています。

SOLID-OSでは、「コアサービス」と名付けた一連のランタイムがIDEと密接に連携することで、多くの便利な機能を実現しています。MMUによるメモリ管理機能は、コアサービスの大きな特徴のひとつです。


MMUを活用してモジュール分割

SOLIDでは、プロジェクト全体をモジュール単位に分割・分散配置した管理が簡単に実施できます。
Linuxであれば、仮想アドレスで空間を多重化し、なおかつデマンドページングによって動的にメモリ割り当てを行うといった機能がありますが、RTOSの場合はリアルタイム性(再現性)を重視するので、空間の多重化は使用しません。SOLIDのアプローチとしては、単一の大きな仮想アドレス空間にプログラムを分散配置するのにMMUを利用しています。


メモリマップデザイナでメモリ空間を簡単設定

SOLID-IDEでは、メモリマップデザイナというエディタを使用して、簡単にメモリ空間の設定・確認ができます。メモリマップデザイナが扱う専用ファイルから、設定プログラムがビルド時に自動生成され組込まれるので、ユーザはプログラムを記述する必要はありません。

また、物理空間のメモリ配置をIDE上で表示することで、何か問題が起きた時でもプログラムがどうなっているかをユーザーに分かりやすく伝える工夫もしています。


メモリ領域の属性は自動設定&APIで設定

メモリマップデザイナでメモリ空間のレイアウトを設定した後は、それぞれのメモリ空間内でのメモリ領域属性を設定します。ここでもSOLIDは簡単な設定だけで属性の指定が出来ます。まず、生成されたプログラムについては、自動的にセクションに応じたプロテクションを設定します。

 

  • . text=実行可/読可
  • .rodata=読可
  • .data&.bss=読書可

 

さらにSOLID では、よりわかりやすく整理された 関数(API) を使用することで、書き込み不可属性や実行可能属性など、メモリ領域の属性の詳細設定が可能です。メモリ属性の設定の他にも、仮想アドレス空間内にメモリ領域を割り当てる関数や、メモリ領域を解放する関数、メモリマップデザイナで設定したメモリ空間の名前を用いて仮想アドレスとサイズを取得する関数など、メモリ管理用の関数も用意しています。


高機能を簡単に使えるコアサービス

SOLIDでは「コアサービス」と名付けた一連のランタイムがターゲットシステムの一部に常駐し、主としてターゲットのリソースメモリ/MMU、割り込み、タイマ等)の管理と、ユーザーへの補助(ローダー、デバッグ)機能をつかさどっています。
コアサービスは言わば「BIOSのようなもの」であり、シンプルなAPI群を使ってリソースを操作することでユーザーにとって面倒な処理を一手に引き受けています。コアサービスでは、上位レイヤのAPIを規定しており、様々な機能が提供されます(例:MMU対応のメモリ管理系API)。また、実装するための下位レイヤの要求仕様も明確になっているので、新しいH/W環境においてRTOSプラットフォームを短時間に立ち上げる事が可能です。

※ コアサービスは京都マイクロコンピュータの造語です。