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,TOPPERS/FMPおよびTOPPERS/FMP3を採用

  • 軽量コンパクトな最新のオープンソースITRON

  • ティックレスカーネル (ASP3, FMP3)

    • 省電力性にすぐれる

    • usecオーダーの時間管理を効率的に実現

  • SMPカーネル (FMP, FMP3)

  • 資源動的生成版カーネルと、よりコンパクトな静的生成版カーネルを用意

  • Cortex-A 32bit (ARMv7A, ARMv8AのAArch32互換モード), 64bit (ARMv8AのAArch64モード)をサポート

  • T-kernel相当の ITRON APIを追加サポート

  • ランタイムロイヤリティフリー

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ローダを標準提供

  • 双方向アドレス解決

  • 二つのローダブルアプリ形式を提供

    • 組込向けに特化した軽量動作のSOLID形式

      • 固定アドレスで実行

    • 組込でも使いやすいDLL形式

      • PICバイナリ

  • MMUを使って効率的にメモリ使用

  • ローディングにMMUを使ったプロテクション設定

  • 自動デバッグ開始起動

  • SOLID-IDEと連携することで、ローディング時に自動的にデバッグ開始

../_images/loader-image.png

ローダーの実行イメージ

軽量動作の実現

  • SOLIDツールチェインに、ターゲットシステム上の専用ローダーと連携した専用機能を追加

  • 開発環境と実行環境の一体化で、実行時の負荷を削減

  • ROM上のプログラムを効率的にロードする専用ファイルシステム

ソースコード静的解析

静的解析機能を標準搭載

  • 実行前にソースコードの分析を行い、論理的な問題を検出する静的解析機能

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

  • IDEのビルド環境と連携しているので、#ifdefなどの条件もビルド設定がそのまま反映

../_images/static-analysis.png

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

簡単に使用可能

  • IDEのプロジェクトメニューを選択して実行するだけ

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

豊富な実行トレース機能

CPUコアの持つハードウェアトレースおよび、ランタイムソフトウェアによる関数トレースをサポート

ハードウェアトレース

  • ARM CPU のトレース機能 (ETB, ETR) の ON/OFF や、トレース情報の表示が IDE から簡単に可能

../_images/hwtrace-disas.png

ソフトウェアトレース

  • 関数単位のトレース情報を取得可能

  • トレースの対象にする関数を、実行時に ON/OFF 可能

  • トレースデータのオフライン再生も可能

../_images/ftrace-result.png

アドレスサニタイザ

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

  • Clangコンパイラの持つ機能と、ターゲットシステム上の検出ランタイム(KMC製)を組み合わせて実現

  • ローカル変数、グローバル変数について、オーバーランや未定義領域アクセスの問題検出が可能

  • memcpy()など連続するメモリアクセスであっても、専用ライブラリ(KMC製)の利用で、効率良く問題検出が可能

../_images/sanitizer.png

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

スレッドサニタイザ

複数スレッド間で発生するデータアクセス競合を検出

  • Clangコンパイラが提供するスレッドサニタイザの機能と、ターゲットシステム上の検出ランタイム(KMC製)を組み合わせて実現

  • 同期しない複数のスレッドが同じメモリをアクセスする場合に、少なくとも一つのスレッドが書込みをしている場合の競合を検出

../_images/tsan-data-race-source.png

競合の発生個所をソース上で指摘 (1クリックで競合相手のソースにジャンプ)

../_images/tsan-data-race-debug-window.png

競合の詳細情報を表示

QEMUエミュレータによるオフターゲット開発

QEMUエミュレータによる仮想 Cortex-A CPUをサポート

  • 仮想的なハードウェアで構成されたターゲットボード上での開発が可能

  • 物理的なターゲットボードが不要のため、手軽にアプリケーションの動作を確認できます

../_images/qemu-debugging.png

QEMUを使用した開発の実行イメージ

Rust言語でのアプリ開発が可能

新しいコンパイル型のプログラミング言語の Rust でのアプリケーション開発が可能

  • Rust 言語で記述されたアプリケーションを SOLID-IDE 上でビルド&デバッグ可能

  • アプリケーションは SOLID-OS上で実行され、SOLID-OS の API の呼び出しが可能

  • 他の C/C++ で記述されたモジュールともリンクして相互運用させることが可能

  • Rust の豊富なオープンソースライブラリを簡単に利用いただけます

../_images/task-output.png

Rust 言語で記述したアプリをタスクとして実行

../_images/itron-sem-debug-output.png

Rust 言語で記述したアプリから SOLID-OS の API を呼び出し利用