コーディングからシステム評価まで便利に使えるSOLID

ここでは、組み込みソフトウェアの各開発フェーズに沿って、SOLID の特徴的な機能を紹介します。

コーディング

候補を表示して入力補完 (入力補完機能)

  • 入力候補をリスト表示するコード補完型のエディタで、快適なタイピング環境を提供します。

入力と並行してコンパイルエラー/警告表示 (バックグラウンドコンパイル)

  • ソースコード入力時に自動的にコンパイラエンジンが動作し、文法エラーを警告します。

  • コンパイル時の文法エラー対応から解放されます。

難解なMMUの設定をGUIで簡単かつ安全に (メモリマップデザイナ)

  • 設定が複雑なARM Cortex-AのMMUを、グラフィカルインタフェースで簡単に設定し、メモリを安全に使えます。

  • ビルド機能と連携し、自動的にセクションに応じたプロテクションを設定します。

  • リンカスクリプトとも連携しメモリを設定します。


机上デバッグ

コードの潜在バグを指摘 (静的解析)

  • 実行前にソースコードの分析を行い、論理的な問題を検出する静的解析機能を標準搭載しています。

  • 関数呼び出しや分岐条件を加味し、未初期化ポインタアクセスやゼロ除算など、様々な問題を指摘します。

読みづらいMAPファイルをGUIで検索 (メモリマップ表示)

  • ELFファイル内にあるシンボル情報をもとに、変数や関数のアドレスを分かりやすく表示する機能です。

  • 簡単な操作でシンボル名でのソートや検索ができます。

オブジェクトサイズを一覧表示し比較 (サイズプロファイラ)

  • コードサイズやワークメモリサイズを、コンパイル単位やセクション単位でGUI表示・確認できます。

  • ファイル比較機能を使って、バージョンアップ前後のサイズ変更の確認ができます。

関数の呼び出し関係図の表示 (関数情報の表示)

  • 関数単位で、呼び出し元・呼び出し先の数を解析しリスト表示します。

  • 指定した関数に対して、呼び出し関係をグラフィカルに分かりやすく表示します。

スタックの最大使用量を予測 (関数方法の表示)

  • プログラムの静的解析機能により、スタックメモリの最大使用量を予測します。

  • 呼び出し先の関数単位でスタック予測表示するため、スタックサイズ分析に便利です。

ターゲットレスデバッグ (エミュレータ)

  • QEMU (Cortex-A AArch64/AArch32) をターゲットに設定して、ターゲットハードウェアレスでも開発が始められます。

  • 周辺ハードウェアのエミュレーションドライバを作成すれば、より実機に近い環境での開発も可能です。


実機デバッグ

JTAG デバッガをIDEから利用 (PARTNER Jet2)

  • 実機デバッグでは、SOLID IDEからKMCのJTAGデバッガで実績のあるPARTNER-Jet2を使ってのデバッグが可能。

スタックオーバーフローを瞬時に捕捉 (スタックフェンス)

  • スタックオーバーフローが起きた瞬間に、デバッガが実行停止(ブレーク)しアラーム表示により警告します。

  • スタックオーバーフローによるメモリ破壊を未然に検出し、デバッグ効率を大幅に向上します。

リンカスクリプトと連携したメモリアクセス例外の捕捉 (リンカスクリプト連携)

  • コンパイラが出力するメモリ属性情報に加えて、ユーザが指定したメモリ属性情報もSOLIDが自動的にMMUに設定します。

  • モリアクセス例外が発生した瞬間にデバッガが実行停止(ブレーク)しアラーム表示により警告します

バッファオーバランを瞬時に捕捉 (アドレスサニタイザ)

  • 実行時のローカル変数、グローバル変数の、オーバーランや未定義領域アクセスを実行時に自動検出すると実行停止してソース上の発生個所と内容を表示します。

  • ソースを変更することなく、アドレスサニタイザモードでビルドするだけで、簡単にアドレスサニタイザ機能が使用できます。

メモリアクセス競合を瞬時に捕捉 (スレッド競合検出/スレッドサニタイザ)

  • RTOSのタスク間で、排他制御されていないメモリアクセスの競合を実行時に検出すると実行停止し、競合発生個所(2か所とも)をソース上に表示します。

  • ソースを変更することなく、スレッドサニタイザ有効設定でビルドし実行するだけです。

  • 検出精度とパフォーマンスへの影響のトレードオフがある為、検出精度の調節が可能です。

HWトレース (ハードウェアトレース)

  • ARMプロセッサの ETB または ETR の機能を使用し、命令トレースを取得し、IDE上に表示します。

  • 命令トレースの表示形式は複数の形式から選択可能です

メモリダンプによるオフターゲットデバッグ (クラッシュダンプデバッグ)

  • SOLIDのスナップショットファイルをロードして、デバッガ上にコンテキスト (レジスタ、メモリ、タスクなど)情報を展開、復元し、問題発生時の状態を解析できます。

  • ターゲットが接続されていない状態でも、スナップショットファイルがあれば動作するため、 複数人での解析が可能です。

  • スナップショットの保存部分をユーザーがコールバック関数として実装できるようになっています。

コードの実行回数統計 (コードカバレッジ)

  • ソースコード中のベーシックブロック単位ごとに、実行された回数を記録し、ブレーク時に表示します。

  • カバレッジ結果はllvm-profdataなどの汎用解析ツールに取り込めるので、レポート作成にも活用できます。

RTOSの資源状況を一覧表示 (RTOSビューアー)

  • ブレーク時にRTOSのタスク単位で、タスクの待ち状態や優先度の状態を表示します。

  • タスク単位で、ブレーク時のスタック使用量と使用割合を表示します。

タスクと非タスクコンテキストの方法を一覧表示 (実行コンテキスト情報の表示)

  • タスクコンテキストと非タスクコンテキストの情報を一覧表形式で表示します。

  • PCの現在位置のある関数名を表するとともに、スタックをバックトレースして呼び出し履歴を表示します。

全タスクと非タスクコンテキストのスタックバックトレースをGUIで表示 (並列スタック)

  • システム中の全タスクと非タスクコンテキストのスタックバックトレースを、 バックトレースが類似であるものをグルーピングして、グラフにして表示します。


システム評価

関数の入出や引数を時刻とともに統計 (関数トレース)

  • 指定した関数の実行履歴をタイムスタンプや引数情報とともに確認できる機能です。

  • ターゲットメモリにトレース情報を格納する方式なので、トレース端子のないSoCでも利用できます。

タスクや割り込みの実行状況をGUI表示 (イベントトラッカー)

  • タスク、割込み、周期ハンドラなどのモジュール名単位で実行遷移を時間軸表示します。

  • タスクやOSの待ち状態、プロセッサ単位での実行状況などが 確認できるので、システム全体の効率解析に有効です。

ユーザカスタマイズによるデバッグ情報の取得 (カーネルイベントコールバック)

  • タスク切り替えや割り込みハンドラの実行開始終了等のカーネルのイベント発生時に呼び出されるコールバック関数を登録できる機能です。

  • ユーザー独自のデバッグ機能の実装に使用可能です。

  • コールバック関数は、非タスクコンテキストで実行されるため注意が必要(使用されたい場合はKMCにご相談下さい)。