開発準備から性能解析までをシンプルに変える
SOLIDの機能を紹介したカタログです。
概要編と併せてご覧ください。
このカタログについて
ドキュメント名 | ソフトウエア開発プラットフォーム SOLID機能紹介 |
---|---|
ドキュメント種別 | 製品カタログ |
ファイルサイズ | 8.1Mb |
登録カテゴリ | |
取り扱い企業 | 京都マイクロコンピュータ株式会社 (この企業の取り扱いカタログ一覧) |
この企業の関連カタログ
このカタログ(ソフトウエア開発プラットフォーム SOLID機能紹介)の内容
Page 1:開発準備から性能解析までをシンプルに変えるSOLIDでは「コアサービス」と名付けた一連のランタイムがIDEと密接に連携することで、見開き面の多くの機能を実現しています。RTOSでMMUを活用するための機能もコアサービスに実装されています。MMU活用などについて、コアサービスの仕様検討から実装までの開発を一貫して担当した小林章が、その役割や特徴的な機能を解説します。Q コアサービスには、そもそもどのような機能があるのですか?主にターゲットのリソース(メモリ/MMU, 割り込み, タイマ等)の管理と、ユーザーへの補助(ローダー,デバッグ)機能があります。ターゲットシステムの一部に常駐していますが、システムセットアップや動的解析機能を使ったデバッグ時など、必要に応じてIDEとも連携して動作するソフトウエアです。Q ターゲットのリソース管理とはどのようなものでしょうか?はい、少し古いですが「BIOSのようなもの」と言えばイメージがわきやすいでしょうか。シンプルなAPI群を使ってリソースを操作するものです(左図)。また、ブート時のMMUの仮想アドレスへの移行といった、ユーザーが操作するのが面倒な処理も受け持っています。Q SOLIDを開発するときに最も留意した点は何ですか?「リアルタイム」を追求した「コンパクト」な構成であることはもちろん、ユーザーが「スマート」に開発できるよう「シンプル」な仕様を心掛けています。その上でPCとターゲットのどちらでどのように処理を行うかも重要です。ちなみに、コアサービスは、KMCの造語です。縁の下の力持ちという役割からして、結構しっくりくる名称ではないかと思っています。Q SOLIDではMMUのどのようなメリットに着目したのでしょうか?まず各機能(モジュール)を仮想アドレス上に分散して配置できる点です。これにより、領域外アクセスであるバッファオーバーランの検出や(右図①)、特定のメモリ領域に対してアクセス制限をするセキュリティ管理にも有効です。また複数拠点で開発する場合に、モジュールを各開発拠点単位に分割・分散配置して、開発対象モジュールだけに限定してデバッグ操作を行うといった管理が簡単に実施できるようになります(右図②)。Q 従来のMMUの利用方法と異なる点は何ですか?Linuxであれば、仮想アドレスで空間を多重化し、なおかつデマンドページングによって動的にメモリ割り当てを行うといった機能がありますが、RTOSの場合はリアルタイム性(再現性)を重視するので、空間の多重化は使用しません。SOLIDのアプローチとしては、単一の大きな仮想アドレス空間にプログラムを配置するのにMMUを利用しています。SoCの構成に合わせた仮想アドレスの設定は全てIDE側の簡単な操作で利用できるようにしましたので、ユーザーはメモリの設定プログラムを自分で作成する必要はありません。また、物理空間のメモリ配置をIDE上で表示することで、何か問題が起きた時でもプログラムがどうなっているかをユーザーに分かりやすく伝える工夫もしています。Q ユーザーにとっては嬉しい機能ですねはい。MMUの設定は複雑ですし、それを間違えてしまうとデバッグが出来ない状態に陥ってしまうこともあるので、従来のユーザーは割と避けていた部分です。そこをツールベンダーが専門家として取り組んだ事は、ユーザーにも多いに喜んでいただける点だと思います。Q SOLIDのローダーの特徴は何ですか?プログラムの規模が大きくなってくると、修正の度にプログラム全体をロードする時間が開発者の負担になってきます。それなら新たに開発対象モジュール単体だけをロードする仕組みを作ろう、という事で出来上がったのがSOLIDのローダーであり、SOLIDの最も大きな特徴のひとつです。Q モジュール単体でビルド(リンク)すると、モジュール間参照などの問題は生じませんか?いいえ、ローダーにリンク機能を持たせていますので、モジュール間に参照が残っていても問題ありません。かつSOLIDではモジュールのビルドでリンクの問題が生じないように、かつ「コンパクト」にロードできるような工夫をしています。リンクもDLLのような形式ではないので、モジュール間の双方でシンボル参照をしていても問題ありません。またモジュールが追加されたことを、ローダーがIDEに通知するので、IDE側でシンボルを自動的にロードしたり、逆にロードするモジュールをIDE側で差し替えたりすることも可能です。Q ローダーとIDEは深く連携しているのですねはい、それがSOLIDの一番の特徴といえます。ローダーはRTOSカーネル情報、MMUによるマッピング情報、IDEのビルダが持っているシンボル情報やデバッグ情報の全てと連携して動作しています(左図)。SOLIDが開発環境の一体化を実現したことで、ローダーをはじめとするスマートな開発スタイルが実現できたのは間違いありません。京都マイクロコンピュータ株式会社SOLID コアサービス開発エンジニア 小林 章MMUをRTΟSで使い倒す!リアルタイムコンパクトスマートシンプル高機能を簡単に使えるコアサービスMMUの有効活用ならSOLIDにお任せくださいインテリジェントローダーがスマートなデバッグ環境を生み出すモジュール1オーバーラン検出領域オーバーラン検出領域①領域外アクセス検出などのデバッグ機能強化に活用GUIツールでメモリマップ設定GUIで設定しビルドするのみ!!コアサービスMMU処理SOLID_MEM_* API群実装済みSOLID MMUライブラリ②複数拠点での分散開発に活用モジュール2オーバーラン検出領域拠点1 拠点2 拠点3開発対象ではないモジュール、アドレスを固定してフラッシュに書き込んでおくことも可能● SOLIDコアサービスで、複雑なARM MMU処理も、プログラムを書くことなく簡単に利用可能!!●コアサービスには、他にELFローダーなど基本機能を実装済みELFロード時にSOLID-IDEとARMターゲットシステム上のSOLIDコアサービスが連携。自動的にIDEデバッグを開始開 発 対 象モジュールロードイベント通知追加デバッグ開始SOLID-OS2017.5http://www.kmckk.co.jp/お問い合わせメールアドレス:jp-info@kmckk.co.jp京都マイクロコンピュータ株式会社東京オフィス:〒105-0004 東京都港区新橋2-14-4 Rビル5F本 社:〒610-1104 京都市西京区大枝中山町2-44Tel.03-5157-4530Tel.075-335-1050http://www.kmckk.co.jp/SOLID/for (blks=ptbl->blks; blks && blks->num_regions; blks ) {unsigned long desc_type, va_idx, region;unsigned long sd = blks->sd;unsigned long pa = 0;va_idx = _REG_POPBIT(VMSAv7_SDTTL2, VA, blks->va);if ((va_idx blks->num_regions) > (VMSAv7_SDTTL2_VA_MASK 1)) {ret = -3; /* TOO MANY REGIONS */goto L_ERROR;}desc_type = VMSAv7_SDTTL2_CHK_DESCTYPE(sd);/* Pick up starting PA */switch (desc_type) {case VMSAv7_SDTTL2_DESCTYPE_LargePage:pa = _REG_POPBIT(VMSAv7_SDTTL2_LARGEPAGE, PA, sd)<< VMSAv7_SDTTL2_LARGEPAGE_PA_SHIFT;sd &= ~_REG_PUSHBIT(VMSAv7_SDTTL2_LARGEPAGE, PA, ~0);break;case VMSAv7_SDTTL2_DESCTYPE_SmallPage:pa = _REG_POPBIT(VMSAv7_SDTTL2_SMALLPAGE, PA, sd)<< VMSAv7_SDTTL2_SMALLPAGE_PA_SHIFT;sd &= ~_REG_PUSHBIT(VMSAv7_SDTTL2_SMALLPAGE, PA, ~0);break;case VMSAv7_SDTTL2_DESCTYPE_Invalid:default:break;}for (region=0; region < blks->num_regions; region ) {
Page 2:アドレスサニタイザC/C 言語プログラム実行時のメモリアクセスの不正実行を自動検出● Clangコンパイラの持つ機能と、SOLID-OS上の検出ランタイム(KMC製)を組み合わせて実現ローカル変数、グローバル変数について、オーバーランや未定義領域アクセスの問題検出が可能memcpy()など連続するメモリアクセスであっても、専用ライブラリ(KMC製)の利用で、効率良く問題検出が可能使い方は簡単。アドレスサニタイザモードでビルドして実行するだけです。自分で考えてブレークポイントを設定するなど必要ありません。SOLID-IDEとSOLID-OSが連携して、間違ったメモリアクセスを自動的にあぶり出してくれます。バグ付きのソースコードstatic unsigned short bugarray[10];void root_task(intptr_t exinf){int i, x = 0;ER ercd;char buf[10];// スタック範囲外アクセスコードfor (i = 0; i <= 10; i ) {buf[i] = i;}// .bss 範囲外アクセスコードfor (i = 0; i < 11; i ) {bugarray[i] = 0x1111*i;}/** タスクの起動*/ercd = act_tsk(TASK1);10個の配列サイズを越えた書き込みが、i=10の時に発生する不正アクセスをしたプログラム行を強調表示(黄色反転部分)効率的なメモリ利用ELFローダー分割開発を可能にする本格的なELFローダーを標準提供●双方向アドレス解決●組込向けに特化した軽量動作・固定アドレスで実行 ・アンロード機能無し●MMUを使って効率的にメモリ使用●ローディングにMMUを使ったプロテクション設定●自動デバッグ開始起動・SOLID-IDEと連携することで、ローディング時に自動的にデバッグ開始軽量動作の実現● SOLIDツールチェインに、ARM側ローダーと連携した専用機能を追加・開発環境と実行環境の一体化で、実行時の負荷を削減● ROM上のプログラムを効率的にロードする専用ファイルシステムローディング時に、アプリ間のアドレス解決RTOS TOPPERS/ASP3TOPPERS/ASP3を採用●軽量コンパクトな最新のオープンソースITRON●ティックレスカーネル・省電力性にすぐれる・μsecオーダーの時間管理を効率的に実現● 資源動的生成版カーネルと、よりコンパクトな静的生成版カーネルを用意●ランタイムロイヤリティフリーSOLID-IDEと密接に連携●スタックフェンス、スタック解析機能●システムコールトレーサ●タスク状況をIDEに表示●RTOSの資源表示●実行コンテキスト(タスク、割り込み)遷移表示Visual Studio® IDE エディタ, デバッガ実績豊富なVisual Studioを採用● SOLID用に専用実装をしているので、VisualStudioの別途導入や購入は必要なしVisual Studioエディタが持つ高度な機能を、Clangコンパイラと連携して実現●入力リストを候補表示するインテリセンス● ソース編集時にコンパイル時の問題を警告(入力時に自動的にバックグラウンドでコンパイラエンジンが動作)Visual Studioデバッガによる快適なデバッグ● ブレーク箇所周辺で参照している変数を、ローカル・グローバル問わずに集めて表示する自動変数表示●SOLID-OSと連携し、タスク別の呼び出し参照表示●ARM CPU例外発生時に、例外発生箇所をポイント●タスクを認識したブレーク機能ツールチェイン GCCコンパイラ, Clangコンパイラ選べる二種類のコンパイラを同梱●実績豊富なGCCコンパイラ●先進的機能のLLVM/Clangコンパイラリンカは実績あるGNU binutilsを同梱C99,C 11仕様をサポート生成されるソフトウェアはGPLフリー標準ライブラリについては、ソースコードが付属KMCデバッガと連携できる、開発時に便利なVLINKライブラリも同梱。VLINK利用もSOLID-IDEから簡単設定コンパイラの持つ豊富な機能(プロファイルや関数フックなど)も、SOLID-IDEと連携して簡単に利用可能リンカスクリプト設定もIDEのGUIで設定(メモリマップデザイナ画面)可能ソースコード静的解析実行前にソースコードの分析を行い、論理的な問題を検出する静的解析機能を標準搭載● 関数呼び出しや分岐条件を加味し、未初期化ポインタアクセスやゼロ除算など、様々な問題を指摘● IDEのビルド環境と連携しているので、#ifdefなどの条件もビルド設定をそのまま反映IDEのプロジェクトメニューを選択するだけで、簡単に実施可能問題箇所と、問題に繋がる箇所をソース上でハイライト表示IDEでのソース編集時に入力リストを候補表示。メンバの型も表示IDEでのソース編集時に入力と同時にコンパイル時の問題を警告IDEでメニュー選択するだけで静的解析が実行可能解析結果もIDE上のソースにハイライト表示SOLID-IDEのデバッガに、タスクリストや状態を表示。各タスクの状態だけでなく、関数呼び出し状況やローカル変数もタスクを切り替えて表示可能QProbeによるタスク実行時間分散画面性能解析プロファイラARM Cortex CPUに搭載されるPMU(Performance MonitoringUnit)を利用した計測●CPU負荷状況 ● キャッシュミス率●メモリアクセス回数などRTOSと連携した性能解析●タスク別の計測や集計プロファイルツールQPobeとの連携● QProbeでタスク解析するための設定を導入済み・関数単位やタスク単位で、実行履歴・比率・分散状況などが把握可能ARM Cortex-A メモリ管理機能IDEに搭載されるメモリマップレイアウト機能ARM® Cortex®-AシリーズのMMUを“シンプルに”積極的に活用● 仮想アドレスは使うが、単一空間なので常に全てのメモリ空間が見えている(わかりやすい)● 生成されたプログラムについては、自動的にセクションに応じたプロテクションを設定・.text=実行可/読可, .rodata=読可, .data&.bss=読書可のような設定です利用する仮想アドレスを設定しやすくするためのIDEメモリマップレイアウト機能●リンカスクリプトと連携 ●MMU初期化コードと連携機 能 豊 富 だ け ど 、設 定 が 複 雑 な A R MCortex-AのMMUを、簡単に安全に使えますこの隙間には、実際にはメモリが存在しない。アクセスすると例外発生アプリ1 メモリ空間物理メモリ空間アプリ2SOLID-OSコアサービスアプリ1 アプリ2SOLID-OSコアサービス実行する時のメモリ空間は、MMUを設定して仮想アドレス空間を利用起動直後アプリ1ロードアプリ2ロードSOLID-OSコアサービスメモリ空間アドレス解決相互呼び出し可能SOLID-OSコアサービスメモリ空間アプリ1アドレス解決相互呼び出し可能アドレス解決相互呼び出し可能SOLID-OSコアサービスメモリ空間アプリ1 アプリ2不正アクセスがあったメモリ領域を表示(ピンク網掛け部分)動画で詳しく見る動画で詳しく見る裏面も読んでね裏面も読んでね最新強力なOSS コンパイラを自在に!スッキリソースコード解析メモリバグ自動検出!!簡単性能解析!!プログラム更新・デバッグをスマートに!!ラクラクΜΜU活用統合環境で、リッチにRTOS分析サクサクコーディング