SOLID未分類 SOLID 便利機能連載の振り返り(連載23)

SOLID 便利機能連載の振り返り(連載23)

(2023/11/27)

[連載23] SOLID 便利機能連載の振り返り

OS&統合開発環境SOLIDの便利機能をご紹介するこの連載も、23回目となりました。

SOLIDのブレない特徴は、「OS、コンパイラ、デバッガ三位一体の開発環境」です。
だからというワケでもないのですが、この連載では、3つの特徴をごちゃまぜにご紹介してきました。

ちょっとここで整理します。
大きく分けて、
・OSとしての特徴
・開発環境としての特徴
・コンパイラと連携しての特徴
があります。

では、振り返っていきます。

 

 

1.OSとしての特徴

SOLIDのRTOSカーネルは、TOPPERSカーネルを採用しています。

そしてTOPPERSの持つ機能に加え、独自の機能やAPIが追加されています。

ここではその、SOLIDの特徴と言えるその追加機能についてのご紹介記事を振り返ります。

 

1.1 SOLID-OS独自API関連

・MMU設定変更用API

仮想/物理アドレスをマップしたり、属性を変更したり、コードキャッシュを破棄したりするAPIです。SOLID OSのAPIなので、プログラムから操作するための機能です。

連載6:SOLIDのMMU使いこなしー3

連載9:2.4 割り込みを使えるようにする

 

1.2 SOLID-OSでタスクや割り込みを使用(IDE機能併記)

OS標準機能であるタスクや、必須機能である割り込みについてです。
デバッグ時の各IDEウインドウ表示内容についても記載しています。

連載7:SOLIDで使えるリアルタイムOS

連載8:SOLIDでタスクと割り込み

連載9:SOLIDでタスクと割り込みー2

 

1.3 マルチコア対応

マルチコア動作についてです。

連載10:連載10-マルチコアCPUでのリアルタイムOS

 

1.4 例外発生時の対処

例外発生時に自作例外ハンドラを登録する方法等ご紹介しています。

連載12:例外が発生した場合

 

1.5 その他SOLID-OS独自機能

その他、TOPPERSを元にSOLID-OSとして追加している独自機能において、主要思われる機能についてご紹介しています。

連載7:2. SOLIDのCPU抽象化レイヤ「SOLID Core Service」

連載8:3.割り込み

連載9:2.割り込み制御の実装

連載10:7.2 割り込みハンドラ

連載13:3.3 スナップショットの作成

連載17:ローダー機能―1(ご紹介)

連載18:ローダー機能―2(DLL形式)

連載19:ローダー機能―3(SOLID独自形式)

連載20:ローダー機能―4(開発スタイル)

※ロード機能のイメージ図です。

 

2.開発環境(IDE)としての特徴

SOLIDのIDEには、デバッグに便利な機能がいろいろ搭載されています。

ここではIDEの便利機能についてのご紹介記事を振り返ります。

 

2.1 MMU関連機能

・MMUの保護違反例外を使った機能

NULLポインタ検出、スタックオーバーフロー検出ができます。

連載1途中:MMUの保護違反例外を使ったNULLポインタ検出

連載1途中:MMUの保護違反例外を使ったスタックオーバーフロー検出

実現方法等の詳細について連載3でご紹介しました。

 

・MMUアドレス変換テーブル設定機能

IDEの機能として提供されています。

連載2:SOLIDのMMU使いこなしー1

[メモリマップデザイナウインドウ]

 

 

2.2 マルチコア動作のデバッグ

全体はこちら。

連載11:マルチコア動作でのデバッグ

以下2機能をご紹介

イベントトラッカー

コアウインドウ

[イベントトラッカー]

 

2.3 タスクデバッグ機能

連載7はRTOSとしてのタスク機能のご紹介ですが、タスク使用時のデバッグ機能についても一部ご紹介しています。

連載7:1.2 マルチタスクを実行

 

2.4 例外発生時

・例外要因&コード表示

連載12:2 SOLID-IDEにおける例外発生時の動作

・クラッシュダンプ、スナップショット機能

連載13:例外が発生した場合―2

 

2.5 その他便利機能

連載14:コードカバレッジ機能

連載15:静的解析

連載16:関数トレース

連載21:QEMUでハードウェアなし開発

連載22:QEMUでハードウェアなし開発―2

[コードカバレジ機能]

[関数トレース機能]

 

 

3.コンパイラと連携した特徴

SOLIDではClangとGCCコンパイラをサポートしています。そういったコンパイラが用意している機能をSOLID側で生かしているという特徴を持つ機能について振り返ります。

・アドレスサニタイザ機能

本来アクセスすべきでないアドレスへのメモリアクセスを、アクセス直前に検出する機能です。

コンパイラフロントエンドであるClangはアドレスサニタイザ機能を持っています。
それらと連携するルーチンをSOLID-OSのランタイムに組み込むことによって、不正アドレス検出機能を実現しています。

連載4:SOLIDのアドレスサニタイザ機能

連載5:連載4をより詳細にご紹介

 

・静的解析

Clangコンパイラの機能を使っています。

連載15:静的解析

[静的解析]

 

・関数トレース

こちらもClangコンパイラの機能を使っています。

連載16:5.実現方法

 

 

4.まとめ

今回の連載の中で何度も書いているのですが、OS、デバッガ、コンパイラの三位一体でないとできない機能って沢山あるんだな、というのが正直な感想です。

例えば、コンパイラフロントエンドであるClangは、アドレスサニタイザ機能を持っている、と言っても、OSが連携ルーチンを準備する必要がある。
そしてIDEは、そのOSルーチンが発生するブレークを受け止め、要因表示等を行う。

すべてを連携させ、そしてそれをユーザに対し深く考える必要なく当たり前のように使える機能として提供する。これらの機能実現のために多大な努力が隠されていることと推察します。

 

ところで、ここで振り返りをしたので本連載終わるのかと思いきや、もう少し続きます。
まだまだご紹介したい機能がありますので、もう少しお付き合いください。。。