SOLID の機能

Visual Studio Shell ベースの IDE

実績豊富なVisual Studioを採用

  • SOLID用に専用実装をしているので、Visual Studioの別途導入や購入は必要なし

Visual Studioの高度な機能との連携

  • Visual StudioがClangコンパイラと連携して高度な機能を実現
  • 入力リストを候補表示するインテリセンス
../_images/show-candidate.png
  • ソース編集時に、コンパイル時の問題を警告(入力時に自動的にバックグラウンドでコンパイラエンジンが動作)
../_images/rt-warning.png

Visual Studioによる快適なデバッグ

  • ブレーク箇所周辺で参照している変数を、ローカル・グローバル問わずに集めて表示する自動変数表示
  • SOLID-OSと連携し、タスク別の呼び出し参照表示
  • ARM CPU例外発生時に、例外発生箇所をポイント
  • タスクを認識したブレーク機能

RTOS TOPPERS

TOPPERS/ASP3を採用

  • 軽量コンパクトな最新のオープンソースITRON
  • ティックレスカーネル
    • 省電力性にすぐれる
    • usecオーダーの時間管理を効率的に実現
  • 資源動的生成版カーネルと、よりコンパクトな静的生成版カーネルを用意
  • ランタイムロイヤリティフリー

SOLID-IDEと密接に連携

  • スタックフェンス、スタック解析機能
  • システムコールトレーサ
  • タスク状況をIDEに表示
  • RTOSの資源表示
../_images/task-context.png

SOLID-IDEのデバッガに、タスクリストや状態を表示。各タスクの状態だけでなく、関数呼び出しや ローカル変数もタスクを切り替えて表示可能。

GCC/Clang コンパイラ

  • 選べる二種類のコンパイラを同梱
  • 実績豊富なGCCコンパイラ
  • 先進的機能のClangコンパイラ
  • リンカは実績あるGNU binutilsを同梱
  • 生成されるソフトウェアはGPLフリー
  • 標準ライブラリは、ソースコードが付属
  • コンパイラの持つ豊富な機能も、SOLID-IDEと連携してかんたんに利用可能

メモリ管理機能

ARM Cortex-AシリーズのMMUを活用

  • 仮想アドレスは使用するが、単一空間なので常に全てのメモリ空間が見えていてわかりやすい
  • 生成されたプログラムについては、自動的にセクションに応じたプロテクションを設定

IDEメモリマップデザイナ

  • 利用する仮想アドレスを設定しやすくするためのIDEメモリマップレイアウト機能
  • リンカスクリプトと連携
  • MMU初期化コードと連携
../_images/mmap-designer.png

IDEに搭載されるメモリマップレイアウト機能

ELF ローダー

ELFローダーを標準提供

  • 分割開発を可能にする本格的なELFローダを標準提供
  • 双方向アドレス解決
  • 組込向けに特化した軽量動作
    • 固定アドレスで実行
    • アンロード機能無し
  • MMUを使って効率的にメモリ使用
  • ローディングにMMUを使ったプロテクション設定
  • 自動デバッグ開始起動
  • SOLID-IDEと連携することで、ローディング時に自動的にデバッグ開始
../_images/loader-image.png

ローダーの実行イメージ

軽量動作の実現

  • SOLIDツールチェインに、ターゲットシステム上の専用ローダーと連携した専用機能を追加
  • 開発環境と実行環境の一体化で、実行時の負荷を削減
  • ROM上のプログラムを効率的にロードする専用ファイルシステム

ソースコード静的解析

静的解析機能を標準搭載

  • 実行前にソースコードの分析を行い、論理的な問題を検出する静的解析機能
  • 関数呼び出しや分岐条件を加味し、未初期化ポインタアクセスやゼロ除算など、様々な問題を指摘
  • IDEのビルド環境と連携しているので、#ifdefなどの条件もビルド設定がそのまま反映
../_images/static-analysis.png

問題箇所と、問題に繋がる箇所をソース上でハイライト表示

簡単に使用可能

  • IDEのプロジェクトメニューを選択して実行するだけ
  • 問題箇所と、問題に繋がる箇所をソース上でハイライト表示

アドレスサニタイザ

実行時の不正メモリアクセスを監視

  • Clangコンパイラの持つ機能と、ターゲットシステム上の検出ランタイム(KMC製)を組み合わせて実現
  • ローカル変数、グローバル変数について、オーバーランや未定義領域アクセスの問題検出が可能
  • memcpy()など連続するメモリアクセスであっても、専用ライブラリ(KMC製)の利用で、効率良く問題検出が可能
../_images/sanitizer.png

アドレスサニタイザで問題を検出