SOLID と Raspberry Pi でリアルタイムアプリケーションを動かそう！

2024.4

Linux/RTOSが同時に動作するラズパイ４用デュアルOS
イメージと、Rust言語も使えるRTOS開発環境を無料でhttps://solid.kmckk.com/SOLID/solid4rpi4
提供中!

ラズパイ4とWindowsPCがあれば、すぐに使い始められます 。
SOLID-IDE で Rust/C/C++ 言語をデバッグ

WindowsのIDEで、リアルタイムアプリを開発・デバッグ
Linuxアプリとリアルタイムアプリが同時に動作します!!

Raspberry Pi 4 を使って Linux とリアルタイムOS 共存を体験

技術解説４

組 込み 機 器にUSBやネットワークなど が搭 載されるようになり、OSにLinuxを採用

OS間通信機能する場合であっても 1msec 以下の正確な時 間での処理が求められる事があります。
ハイパーバイザーを使うことなく、LinuxとSOLID-OS

R T OS を共 存する方 法 を、（Real Time OS）

Raspberry Pi 4を使ってCortex-A72
CPU0の連載記事で詳し

Cortex-A72
CPU1

Raspberry Pi OS

インターネット（TCP/IP）（Linux）

Cortex-A72
CPU2

Cortex-A72
CPU3

ファイルシステム

Raspberry Pi 4 CPU（BCM2711）

く説明しています。

※記載の社名・製品名は各社の登録商標または商標です。
記載内容は予告なしに変更する場合があります。

京都マイクロコンピュータ株式会社
本社：〒610-1104 京都市西京区大枝中山町2-44

東京オフィス：〒170-0013 東京都豊島区東池袋 2-5-9 加瀬ビル 122 4F

Tel.075-335-1050
Tel.03-5957-1001

https://www.kmckk.co.jp/＜お問い合わせメールアドレス＞

jp-info@kmckk.co.jp

2024.4

■ SOLIDひとつで、全てのツールがそろう● コーディングから実機デバッグまで、全てのツールをVisual Studio ベースの統合開発環境（SOLID-IDE）
で操作●「IDE」「コンパイラ」「リアルタイムOS」「デバッガ」を1ライセンスで提供● コンパイラは先進のLLVM/ClangとGCCの2種類が利用可能● C/C++ に加え Rust 言語にも対応■ ツール間の連携による、SOLID独自の便利な機能
Arm Cortex プロセッサ● メモリ消費量情報表示、メモリマップエディタ● 自動バグ検出機能、タスク遷移表示機能

1ユーザ、1年間の利用料250,000円と導入しやすい価格で提供します■ シングルコア/マルチコアのいずれのリアルタイムOSも利用可■ 利用者数に応じたボリュームディスカウント契約を用意

Rust 言語の安全性やデバッグのしやすさを実感しています
C++ 言語のプログラム歴 XX 年の私プロセッサの複雑なメモリ管理（MMU）はSOLIDが自動設定

実行時メモリアクセスバグを自動検出

メモリ安全性にかかわるバグをつくらせない
Rust 言語にも対応

1ユーザ・1年間利用で250,000円

が、「 Rust は C/C++ の反省の結果、作られている」という言葉に触発され Rust を使ってみました。Rust はメモリの利用に対して空間的・時間的安全性に厳密な言語です。例えば、範囲外メモリアクセスのような危険なコードは、C/C++ で書けたとしても、Rust ではコンパイラがエラーと判定します。またメモリ範囲を超えるアクセス時には、そこで処理が中断するコードを Rust コンパイラが生成するため、メモリ破壊が原因で動作不安定になることを避けられ、デバッグもしやすくなります。SOLID
では C/C++ と Rust で各々作成されたソースコードを、混在して使用することができるため、プログラムの中で特に安全性を求められる部分（コンポーネント）だけでも Rust で作成することが可能です。このように、プログラムの安全性やデバッグ● μITRON4.0仕様のAPIについて、TOPPERSで削除された一部のAPIを追加● 独自開発のDLL機能を追加。
DLL単位で単体ビルドやデバッグが可能

DLL単位で管理できるので、開発時のソースコードアイソレーションが容易のしやすさという点で、Rust の良さを実感しています。

SOLID-OS を支える、SOLID-IDE の様々な開発・デバッ グ支援機能アドレスサニタイザ機能● 実行時のローカル変数、グローバル変数の、オーIDE と OS が 連 携することで、開発・設計から実行時検証までをスムーズにバーランや未定義領域アクセスを自動検出します。
● ソースを変更することなく、アドレスサニタイザモードでビルドするだけで、簡単にアドレスサニタイザ機能が使用できます。

1クリックで静的解析・構文解析機能

実行時カバレッジ表示機能● 実行前にソースコードの分析を行い、論理的● ソースコード中のベーシックブロック単● カバレッジ結果はllvm-profdata

メモリアクセス例外・リンカスクリプト連携● コンパイラが出力するメモリ属性情報に加えて、ユーな問題を検出する静的解析機能を標準搭載しています。

位ごとに、実行された回数を記録し、ブレーク時に表示します。などの汎用解析ツールに取り込めるので、レポート作成にも活用できます。

ザが指定したメモリ属性情報もSOLIDが自動的にMMUに設定します。

● 関数呼び出しや分岐条件を加味し、未初期化● メモリアクセス例外が発生した瞬間にデバッガが実行

ポインタアクセスやゼロ除算など、様々な問題を指摘します。

停止（ブレーク）
しアラーム表示により警告します。

▲

詳しくはこちらをご覧ください

PARTNER-Jet2で実機デバッグ● SOLID-IDEからKMCのJTAGデバッガであるPARTNER-Jet2を使って、実機デバッグをします。

スタックフェンス機能
リアルタイムカーネル（標準カーネル： TOPPERS、オプションでFreeRTOS 選択可能）
タスク

セマフォ

ミュー
テックス

メール
ボックス

周期
ハンドラ

TCP/IP（オプション）

ファイルシステム（オプション）

ネットワーク
ドライバ

ストレージ
ドライバ

その他
・・・・・

● スタックオーバーフローが起きた瞬間に、デバッガが実行停止（ブレーク）しアラート表示により警告します。
● スタックオーバーフローによるメ

SOLID Core Service

メモリマップ表示

MMU/MPU
ドライバ

割り込み
ドライバ

タイマ
ドライバ

マルチコア
ドライバ

メモリ管理

ELFローダーCPU
コンテキストデバッグ
ランタイム

Armv7R CPU

Armv8R CPU

Armv7A CPU

Armv8A CPU
32bit mode

Armv8A CPU64bit mode

Interrupt Controller（GICなど）Timer（Generic Timer など）

I/O peripherals

モリ破壊を未然に防ぎ、デバッグ効率を大幅に向上します。

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

● 指定した関数の実行履歴をタイムスタンプや引数情報とともに確● 簡単な操作でシンボル名での認できる機能です。

ソートや検索ができます。

● ターゲットメモリにトレース情報を格納する方式なので、トレース

スタックサイズ予測
メモリマップデザイナー

サイズプロファイラー● 設 定が複雑なARM Cortex-AのMMUを、グラ● コードサイズやワークメモリサイズを、コンフィカルインタフェースで簡単に設定し、メモリを安全に使えます。

パイル単位やセクション単位でGUI表示・確認できます。

● ビルド機能と連携し、自動的にセクションに応じ● ファイル比較機能を使って、バージョンアップたプロテクションを設定します。

関数トレース機能

端子のないSoCでも利用できます。

● プログラムの静的解析機能により、スタックメモリの最大使用量を予測します。
● 呼び出し先の関数単位でスタック予測表示するため、スタックサイズ分析に便利です。

前後のサイズ変更の確認ができます。

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

RTOSビューアー・タスクコールスタック表示● ブレーク時にRTOSのタスク単位で、タスクの待ち状態や優先度の状態を表示します。

関数呼び出し表示● 関 数単位で、呼び出し元・呼び出し先の数を解析しリスト表示します。
● 指 定した関数に対して、呼び出し関係をグラフィカルに分かりやすく表示します。

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

イベントトラッカー● タスク、割込み、周期ハンドラなどのモジュール名単位で実行遷移を時間軸表示します。
● タスクやOSの待ち状態、プロセッサ単位での実行状況などが確認できるので、システム全体の効率解析に有効です。

ITRON/T-Kernelベースのシステムからの移植コストが小さいというメリットもあります。

佐藤 大介

鈴木 洋志

若 槻 俊宏■ 最新のOSSをどのようにSOLIDに

赤川 大門河田 智明

ソフトウェアの大規模化を想定し、タスク優先度を最大256まで拡張

優先度継承ミューテックスの追加
FMP3に動的資源生成機能を追加

一部のAPIについて、実行可能なタスクなどOS資源の動的生成機能にメッセージバッファの動的資源生成対応

コンテキストを拡張

対応、プログラム実行中にタスクの生読み手書き手ロックの追加

成および解放処理が簡単に実行可能

可変長メモリの追加■ ツールの使いやすさとは何だと思いますか？

取り込んでいるのですか？

ズバリ、使いたい機能がすぐに探せて簡単に使えることです。
「ツールの僕たちの場合は GitHub Trending を毎日のように見て、新しい機能が使い方が分かりにくい」というお話を聞くことがあります。確かに今まであったらとにかく順番に使ってみます。どんどん使ってみて、「いいな」と思の組込みソフトウェア開発環境は、プロセッサベンダー独自のツールも多く、うものがあれば試作して評価してみるという作業をしています。GitHub

操作方法や機能がバラバラでした。ここ数年、Armプロセッサへの集約が上にはソースコードだけではなく、アルゴリズムや考え方も公開されてい進んできた結果、プロセッサを変えた途端にツールの操作方法も変わるるので、まさに知恵の宝庫です。例えば SOLIDのアドレスサニタイザ機能ので、それがユーザのストレスになるのは当たり前です。SOLIDでは、組込は、考え方が公開されていなければ自力で作るのは難しかったかもしれみに限らずIDEとして世界的に広く利用されているMicrosoft社のVisualません。今の時代、自力でゼロから全てのコードを書いて機能を作成する

Studioのフレームワークを利用することで、「コマンド探しで迷わない」のではなく 、「OSSを組み合わせる力 」があればできることはどんどん増えようにしました。またSOLID独自の新しいデバッグ機能を有効にするためていくと考えています。OSSの利用については 、ライセンスやセキリュの操作は、1クリックもしくは1つのダイアログボックスで全ての設定ができティの要件をしっかりと確認し、それを積極的にソフトウェア開発ツールるようにしました。いくら便利なデバッグ機能であっても、簡単に使えなけに取り込んでいます。そのようにして、開発者により新しいツール機能をれば使っていただけないので、操作しやすさは徹底的に作り込んでいます。

体験していただけるようにしています。

■ これから組込みツールはどのように■ コンパイラやツールチェーンで変化していくと思いますか？

考慮した点は何ですか？

開発ツールそのものを作る言語に関しては、既にC#, Java, Goなど多様

ひとつはGCCとClangの2種類のコンパイラで同じソースをコンパイルでき化しているので、僕たちも用途に最適な（得意な）言語を使って効率よくることです。新しいデバッグ機能の多くはClangコンパイラと連携して動作開発しています。現在、C/C++が組込みソフトウェア開発の主流ですが、するため、デバッグ時はClangコンパイラを使っていただくのですが、リリーAIの分野ではアプリ側をPythonで作成する事も増えてきました。コンパス時はGCCでコンパイルしても問題ありません。GCCで作った既存のコードイル言語とインタプリタ言語が各々使いやすいように進化していくにつも利用できるので、便利だと思っています。また全てのビルド条件をれ、今後は組込みでもOSのような基盤部分とアプリ側を開発する言語がSOLID-IDE上で設定できるようにし、リンカスクリプトを書かなくて済むよう分かれてくることが考えられます。さらに、C言語と同様にシステム開発にしたのも、SOLID/SOLID-OSの使いやすさの特長です。これはLinuxのに使えるRustという新しいプログラミング言語の活用も増えてきており、アプリケーションを作成するときにリンカスクリプト無しで開発ができるのとSOLIDでも2021年のリリースから対応しました。すでに一部のお客さま同様の感覚でSOLID-OSの開発ができるということを意味しています。といでも、既存のソフトウェアにセキリュティを堅固にしなければならない部

うのも、リンカスクリプトは自由に書ける一方で過去の資産を使う場合に「秘分を優先してRust 言語で作成する、などの取り組みをされています。

伝のたれ」のように複雑な作りになっていて、プロジェクト移植上の悩みのGitHubTrendingではBaiduやAlibabaなど中国発のプロジェクトが次々種だと聞くことが多く、SOLIDで何とかそこを解決したいと考えたからです。とポストされて活気があり、活発なソフトウェア開発を肌で感じます。僕たちも、その活気に負けないようソフトウェア開発に取り組み、SOLIDを進化させ続けていこうと思います。

SOLIDには、MMUによるメモリ保護機能を利用したアドレスバグ自動検出があります。
これは、従来のデバッグ手法のように、バグのありそうなところに当たりをつけてブレークポイントを張りながらバグを追い込んでいくという手法ではありません。
またSOLIDがアドレスバグを検出するのは、不当アクセスが発生した瞬間です。たとえそのバグが他のプログラムに何も影響を与えていなくてもバグが検出できるため、結合テスト時のバグ発生箇所の絞り込みが効率よく行えます。

MMU を味方に！ Cortex-A を使った快適なuITRON システム開発
スタックオーバーフロー検出、NULLポインタアクセス検出などの便利なデバッグ機能や、RTOSで使えるDLL機能など、SOLIDがどのように実現しているかの連載記事で詳しく解説しています。

メモリ空 間 に 、重 複することなくアプリケーションを割 付 ける

メールボックスの追加

SOLID と Raspberry Pi でリアルタイムアプリケーションを動かそう！

2024.4

Linux/RTOSが同時に動作するラズパイ４用デュアルOS
イメージと、Rust言語も使えるRTOS開発環境を無料でhttps://solid.kmckk.com/SOLID/solid4rpi4
提供中!

ラズパイ4とWindowsPCがあれば、すぐに使い始められます 。
SOLID-IDE で Rust/C/C++ 言語をデバッグ

WindowsのIDEで、リアルタイムアプリを開発・デバッグ
Linuxアプリとリアルタイムアプリが同時に動作します!!

Raspberry Pi 4 を使って Linux とリアルタイムOS 共存を体験

技術解説４

組 込み 機 器にUSBやネットワークなど が搭 載されるようになり、OSにLinuxを採用

OS間通信機能する場合であっても 1msec 以下の正確な時 間での処理が求められる事があります。
ハイパーバイザーを使うことなく、LinuxとSOLID-OS

R T OS を共 存する方 法 を、（Real Time OS）

Raspberry Pi 4を使ってCortex-A72
CPU0の連載記事で詳し

Cortex-A72
CPU1

Raspberry Pi OS

インターネット（TCP/IP）（Linux）

Cortex-A72
CPU2

Cortex-A72
CPU3

ファイルシステム

Raspberry Pi 4 CPU（BCM2711）

く説明しています。

※記載の社名・製品名は各社の登録商標または商標です。
記載内容は予告なしに変更する場合があります。

京都マイクロコンピュータ株式会社
本社：〒610-1104 京都市西京区大枝中山町2-44

東京オフィス：〒170-0013 東京都豊島区東池袋 2-5-9 加瀬ビル 122 4F

Tel.075-335-1050
Tel.03-5957-1001

https://www.kmckk.co.jp/＜お問い合わせメールアドレス＞

jp-info@kmckk.co.jp

2024.4