はじめに
SOLID の紹介
SOLID の機能
Visual Studio Shell ベースの IDE
実績豊富なVisual Studioを採用
Visual Studioの高度な機能との連携
Visual Studioによる快適なデバッグ
RTOS TOPPERS
TOPPERS/ASP3,TOPPERS/FMPおよびTOPPERS/FMP3を採用
SOLID-IDEと密接に連携
GCC/Clang コンパイラ
メモリ管理機能
ARM Cortex-AシリーズのMMUを活用
IDEメモリマップデザイナ
ELF ローダー
ELFローダーを標準提供
軽量動作の実現
ソースコード静的解析
静的解析機能を標準搭載
簡単に使用可能
アドレスサニタイザ
実行時の不正メモリアクセスを監視
セットアップ
インストール
SOLID インストーラの入手
SOLID インストーラの起動
Visual Studio 2013 Shell (Isolated) のインストール
SOLID本体のインストール
SOLID-IDE のインストール
PARTNER Debugger のインストール
exeGCC のインストール
Visual Studio 2013 のアップデート
ツールチェーンのアップデートについて
SOLID for AArch64 について
入手方法
インストール
ライセンスの登録
SOLID-IDE の起動
接続するPARTNER-Jet2の選択
ライセンスキーの登録
ライセンスの確認
ユーザーガイド
ツールチェーンの指定
プロジェクト単位の指定
IDE起動時などに指定
ソリューション単位の指定
全ての環境でs002を指定する場合
プラットフォームごとに別のツールチェーンを指定する場合
デフォルトツールチェーンの変更
コマンドラインでのビルド
MSBuildによるコマンドラインビルド
実行前の設定
環境変数の設定
ソリューションファイルの拡張子変更
ビルドの実行
ビルド実行バッチのサンプル
Parterコマンドウインドウ
現在 Parterコマンドウインドウでサポートされているコマンド
デバッグ中のI/Oアクセス (PI/POコマンド)
概要
使い方
使用可能なコマンド
指定可能なオプションについて
静的解析
概要
使い方
実行例
1. Null pointer argument in call to string length function
2. Undefined or garbage value returned to caller
3. Division By Zero
アドレスサニタイザ
概要
使い方
アドレスサニタイザデモについて
構成の変更と実行
ビルドと実行
バグの検出
アドレス設定と注意点
監視領域について
アドレス設定について
コードカバレッジ
概要
使い方
ソリューション構成
コードカバレッジの有効化
実行
オーバーヘッドについて
例外処理
例外発生時の動作
例外発生時のレポート
データアボート
未定義命令例外
プリフェッチアボート
例外処理の変更
スタックフェンス
概要
使い方
関数情報の表示
概要
使い方
ソリューション構成
関数情報の表示の実行
最大スタックサイズの予測
関数情報についての注意点
関数トレース
概要
準備
プロパティシート変更
メモリ領域の割り当て
インストルメンテーションの有効化
関数へのパッチ適用
実行と結果表示
その他の使い方
特定の関数にパッチを当てる
パッチの無効化
制限事項
イベントトラッカー
概要
使い方
イベントトラッカー を使用するための準備
イベントトラッカー の有効化
イベントトラッカー の API
指定できる操作
SOLID_EVTTRK_Ctrl
実行
表示の線・マークの見方
主な操作
要実装関数
IMPL_EVTTRK_Init()
ハードウェアブレーク
概要
使用方法
設定の変更
設定項目
アドレス
CPUステータス
バイトカウント
マスク指定
タスクID
ハードウェアトレース
概要
利用可能なターゲット
準備
ETBの設定
ETRの設定
トレースデータの参照
逆アセンブル表示
関数表示
表示コアの切り替え
トレース設定
サイクルカウンタ
ストールモード(オーバーフロー抑制)
アドレス範囲
参考
ETBとETRの比較
メモリマップの設定 (MMUの設定)
概要
メモリマップデザイナ
SOLIDで予約されているメモリ空間名
SOLID MEM API
用語
OS内部資源情報の表示
概要
使い方
表示項目について
タスク
イベントフラグ/セマフォ/ミューテックス
データキュー
タイムイベント ハンドラ
メモリプール
タスク状態の一覧
タスク待ち状態の要因一覧
クラッシュダンプデバッグ
概要
使い方
スナップショットファイルの作成
スナップショット生成するサンプルコード(1)
スナップショット生成するサンプルコード(2)
スナップショットファイルの再生
制限事項
ソリューションプロパティの変更
概要
使い方
プロパティシートを開く
プロパティの編集
プロパティの再読み込み
インクルードディレクトリの追加
概要
設定方法
プリプロセッサの定義を追加
概要
設定方法
ターミナル
概要
使い方
実行コンテキスト情報の表示
概要
使い方
実行例
並列スタック
概要
使い方
実行例
マクロ展開エクスプローラ
概要
使い方
実行例
ライセンスの登録と確認
ライセンスダイアログの起動
ライセンスの登録
FreeRTOS対応
概要
制限事項
ベアメタル
チュートリアル
ベアメタル向けのアプリケーションプロジェクトを作成する
プロジェクトの作成
ベアメタルテンプレート独自の動作
ベアメタル向けのライブラリプロジェクトを追加する
プロジェクトの作成
ビルド順序の設定する
ベアメタルテンプレート独自の動作
シミュレータ
チュートリアル
シミュレータ環境のインストール
インストーラの入手
インストーラの起動とインストール実行
サンプルプロジェクトの実行
ファイルの取得
ソリューションのビルド
デバッグの開始
サンプルの動作について
デバッグ実行の様子
ハードウェア構成
シミュレータ付属仮想ボードについて
搭載されている部品
仮想ボードの種類について
メモリマップ
ハードウェア構成の変更について
UARTチャネル数の変更
標準添付の仮想ボード(仮想ハードウェア)以外について
SOLID-IDE
はじめに
SOLID-IDEの起動
プロジェクトの新規作成
デバッグ
デバッグの設定
起動する PARTNER-Jet2 の選択
デバッガー内の式
メモリマップデザイナ
概要
表示方法
特定の領域だけ設定を無効にする
物理アドレス制限の設定
アドレスサニタイザの設定
サイズ プロファイラー
サポートされているフォーマット
使用方法
サイズプロファイルを表示するには
サイズの比較を行うには
表示方法を変更するには
CSVファイルを出力するには
ビルド
ビルド構成
プロジェクト管理
C/C++ プロジェクト
プロパティ ページ
よく使われる キーボードショートカット
コマンドラインスイッチ
スイッチの構文
コマンドラインスイッチ
SOLID-IDE メニュー構成
ファイルメニュー
編集メニュー
表示メニュー
プロジェクトメニュー
ビルドメニュー
デバッグメニュー
ツールメニュー
KMC(SOLID_V7A_ARM)
KMC(SOLID_V8A_AARCH64)
ウインドウメニュー
ヘルプメニュー
SOLID-OS
概要
要実装関数
ブート
本項
ブートローダーが存在する場合
ブートローダーが存在しない場合
要実装関数
IMPL_BOOT_Init
IMPL_BOOT_GetArgument
IMPL_BOOT_GetCsInfo
IMPL_BOOT_LoadCs
SMP時の要実装関数
SOLID_BOOT_SMP_INFO
IMPL_BOOT_SMP_Init
Core Service
メモリ
API
SMP用API
要実装関数
ベクタ
API
割り込みコントローラ
API
SMP用API
I/Oリソースマネージャ
API
要実装関数
タイマ
API
タイマの要実装関数
フリーランカウンタの要実装関数
ログ出力
API
要実装関数
ローダー
API
アドレスサニタイザ
ASAN_ERROR_TYPE
ASAN_ERROR_INFO
ASAN_REPORT_FUNC
SOLID_ASAN_Enabled
SOLID_ASAN_RegisterReporter
ネットワーク
概要
ネットワーク機能を利用するための設定
APIリファレンス
SOLID独自の型
エラーコード
SOLID_ADDRESS
SOLID_PHYADDRESS
SOLID_REGISTER
SOLID_CPU_CONTEXT
イベント通知
要実装関数
ミューテックス
API
Real Time Clock
API
要実装関数
DMAコントローラ
データタイプ
API
要実装関数
ヒープ
API
デバッグ
VLINK関連API
デバッガ関連API
スナップショット
API
要実装関数
SMP
API
定義済みのメモリマップ名
予約されている割込み
RZ/A1H Starter Kit
AG903 Starter Kit
ファイルシステム
本項
ドライバの登録
Fat FileSystem用ドライバの登録
API
SOLID_FS_Open
SOLID_FS_Close
SOLID_FS_Read
SOLID_FS_Write
SOLID_FS_Lseek
SOLID_FS_Sync
SOLID_FS_Ftell
SOLID_FS_Feof
SOLID_FS_Fsize
SOLID_FS_Truncate
SOLID_FS_OpenDir
SOLID_FS_CloseDir
SOLID_FS_ReadDir
SOLID_FS_Stat
SOLID_FS_Unlink
SOLID_FS_Rename
SOLID_FS_Chmod
SOLID_FS_Utime
SOLID_FS_Mkdir
メモリファイルシステム
VLINKファイルシステム
Kernel
SOLID-OSがサポートするCPU
サービスコール(API)仕様
TOPPERS/ASP3 リリースとの相違点
TOPPERS/FMP リリースとの相違点
TOPPERS/FMP3 リリースとの相違点
オリジナルTOPPERS仕様からの機能拡張一覧
SOLID-OS実装での制限事項(解消予定を含む)
カーネル起動パラメータの設定
設定ファイルの編集 (ASP3)
設定ファイルの編集 (FMP)
設定ファイルの編集 (FMP3)
カーネルのメモリ管理について
カーネルのメモリ管理の概要
外部リンク
ソリューションのプロパティ (カーネルコンフィグレーション等)
ソリューションのプロパティファイル
ソリューションのプロパティファイルの形式
ソリューションのプロパティ一覧
ソリューション全体に関するプロパティ
基本動作に関するプロパティ
SOLIDの振る舞いに関するプロパティ
SOLID-OSの追加機能に関するプロパティ
カーネル選択のプロパティ
カーネルの振る舞いに関するプロパティ
カーネルの追加機能に関するプロパティ
ソリューション全体にかかるコンパイルオプション
BSPのプロパティファイル
BSPのプロパティファイルの形式
BSPで指定するプロパティ一覧
CPU種別
BSP ボード依存部の設定
BSP SOC依存部の設定
その他のコンパイルオプション
BOOT と COREサービス の両方に関するコンパイルオプション
BOOT に関するコンパイルオプション
COREサービス に関するコンパイルオプション
TOPPERSカーネル に関するコンパイルオプション
SOLIDインテリジェント ローダー
SOLIDインテリジェント ローダー 概要
ローダー の機能
ローダー を使うメリット
2種類のローダブルアプリケーション
ローダー を使った開発の流れ
ローダー を使った分散開発
各分散拠点の担当作業
ローダブルアプリケーション開発環境の準備
開発会社が準備すること(1)「最初にすること」
開発会社が準備すること(2) 「コーディング&ビルドのための準備」
開発会社が準備すること(3) 「デバッグするための準備」
開発会社が準備すること(4) 「協力会社に提供する前の動作確認」
開発会社が準備すること(5) 「シンボルのEXPORT/IMPORT」
SOLID独自形式 / DLL形式 のソリューションひな形作成
ローダブルアプリケーションのソリューション生成前に知っておくこと
SOLID独自形式、DLL形式 ローダブルアプリケーションプロジェクトの作成
スタティックライブラリ の作成
ウィザードの開始
ウィザードの設定
SOLID ツールチェーン
C/C++ の言語規格について
デフォルトの言語規格
ライブラリの仕様(ARM)
exeGCC for SOLID s005 ライブラリ仕様
ライブラリの共通設定
C11/C++14 標準関数サポート
未サポートの機能
省メモリ環境向けのコンパクトな libc_tiny
ワイド文字(列)の扱いについて
exeGCC for SOLID s002 ライブラリ仕様
ライブラリの共通設定
C11/C++14 標準関数サポート
未サポートの機能
ワイド文字(列)の扱いについて
ライブラリの仕様(AArch64)
exeGCC for SOLID s005 (AArch64)ライブラリ仕様
ライブラリの共通設定
C11/C++14 標準関数サポート
未サポートの機能
SOLID が使用しているオプション
プリプロセッサオプション
ディレクトリオプション
コンパイラオプション
共通オプション
ARM 専用オプション
アセンブラオプション
リンカオプション
Clang と GCC の主な相違点
コンパイラドライバ
文字コード
pragma, attribute 拡張機能
mthumb-interwork オプション
marm オプション
specs ファイル
arm-*-eabi ターゲット時の enum サイズの仕様
GCC と Clang のオプション概要
GCC と Clang の共通オプション
GCC のみ指定可能なオプション
Clang のみ指定可能なオプション
ARM Compiler ツールチェーンとの相違点
ワイド文字のサイズ
armcc リンカの
$$Sub$$
や
$$Super$$
による既存関数のオーバーライド
__attribute__((at(
ADDRESS
)))
で変数を絶対アドレス
ADDRESS
に配置
armcc fromelf イメージ変換ツールの scatter-loading 機能の様な複数バイナリの生成
armcc の _mutex_XXX のようなマルチスレッドアプリケーションにおけるロックの管理機能
KMC 独自の修正について
GCC/Clang 共通の修正
GCC のみの修正
Clang のみの修正
マルチコンテキスト対応
errno のマルチコンテキスト対応
malloc 系関数のマルチコンテキスト対応
VLINK のマルチコンテキスト対応
ツールチェーン更新履歴
s005 (ARM)
s002 (ARM)
s001 (ARM)
ツールチェーンのライセンスについて
The copyright of exeGCC libraries
The copyright of exeGCC libraries (detail)
The NetBSD Project
LLVM/Clang Project
GNU Project
NetBSD libc を選択した理由
libc を自社開発からオープンソースに移行した理由
歴史的な理由
NetBSD libc はこれらの要件全てを満たしていました
他の候補との比較
newlib
FreeBSD/OpenBSD
MUSL
exeGCC について
exeGCC という名前について
8086 のデバッガ製品の開発
FM TOWNS GCC 環境
COFF ファイルを DOS 上で実行する exeGCC
現在の MinGW exeGCC
exeGCC4 というバージョンについて
exeGCC の各製品バージョンの概要
exeGCC(1995): 主に MS-DOS 用
exeGCC2(1999): Windows サポート開始
exeGCC3(2003): GCC 3 対応
exeGCC4(2009): MinGW ビルド版
参考サイト
wikipedia「DOSエクステンダ」2019/8/30 版
スターターキット
スターターキットについて
RZA1H スターターキットの内容物
同梱物全体
名称と数量
AG903 スターターキットの内容物
同梱物全体
名称と数量
チュートリアル
SOLID-SDK/BSP のインストール
インストーラの入手
インストーラの起動
SOLID-SDKのインストール
BSPのインストール
インストールの完了
ハードウェアのセットアップ (AG903)
Jet2本体とボードの接続
ボードへの電源の接続
ボードとPCの接続
PARTNER-Jet2本体とPC間の接続
ハードウェアのセットアップ (RZ/A1H)
Jet2本体とボードの接続
ボードとPCの接続
PARTNER-Jet2本体とPC間の接続
サンプルアプリケーションの実行
プロジェクト新規作成ウィザードの開始
プロジェクトの種類の選択
SOLIDバージョンの選択
使用するBSPとサンプルの選択
ウィザードの完了
プロジェクトのビルド
デバッグの開始
ユーザーガイド
新規プロジェクトの作成
概要
作成方法
スタティックライブラリの作成
概要
作成方法
サンプルアプリケーションについて
サンプルアプリケーションの種類
ビルド方法
トラブルシューティング
PARTNER(ARM)が起動できない
現象
原因
解決方法
ビルドが実行できない
現象
原因
解決方法
新規プロジェクトの作成ができない
現象
原因
解決方法
リンク時に警告が出るようになった
ツールチェーンをs001に戻す場合
ソリューションファイルが関連付けられない
現象
解決方法
動作が遅い
現象
原因
解決方法
Visual Studio 2013 Update 5 のインストールに失敗する
現象
原因
解決方法
FAQ
リリースノート
SOLID 2.2.0 (2021-11-08)
機能追加/変更
不具合修正
SOLID-QEMU 1.1.0 (2021-11-08)
機能追加/変更
不具合修正
SOLID 2.1.0 (2021-08-06)
機能追加/変更
SOLID-IDE
デバッガ
不具合修正
SOLID-IDE
SOLID 2.0.0 (2020-11-27)
機能追加/変更
ツールチェーン
SOLID-IDE
SOLID-OS
デバッガ
不具合修正
SOLID-IDE
デバッガ
SOLID 1.4.0 (2019-10-31)
機能追加/変更
SOLID-IDE
不具合修正
SOLID 1.3.0 (2019-4-15)
機能追加/変更
ツールチェーン
SOLID-IDE
不具合修正
SOLID-IDE
デバッガ
SOLID BSP AG903 2.0.1 (2018-9-11)
SOLID BSP RZA1H 2.0.1 (2018-9-11)
SOLID 1.2.0 (2018-9-7)
機能追加/変更
ツールチェーン
SOLID-IDE
不具合修正
デバッガ
SOLID-IDE
メモリマップデザイナ
SOLID SDK 2.0.0 (2018-9-7)
機能追加/変更
SOLID BSP AG903 2.0.0 (2018-9-7)
機能追加/変更
SOLID BSP RZA1H 2.0.0 (2018-9-7)
SOLID 1.1.3.1 (2018-4-25)
不具合修正
SOLID 1.1.3 (2018-4-16)
機能追加/変更
不具合修正
SOLID 1.1.2 (2017-12-1)
機能追加/変更
不具合修正
SOLID 1.1.1 (2017-9-11)
機能追加/変更
不具合修正
SOLID 1.1.0 (2017-7-18)
機能追加/変更
不具合修正
SOLID SDK 1.0.1 (2017-7-10)
機能追加/変更
不具合修正
SOLID BSP AG903 1.0.1 (2017-7-10)
機能追加/変更
不具合修正
SOLID BSP RZA1H 1.0.1 (2017-7-10)
SOLID 1.0.1 (2017-6-26)
バグ修正
SOLID 1.0.0 (2017-6-16)
Open Source Software used in SOLID
LLVM/Clang Project
Boost
FatFS
lwIP
FlatBuffers
LZ4
nanomsg
WhackWhackTerminal
node-pty
xterm.js
accepts
after
async-limiter
base64id
component-emitter
cookie
debug
engine.io
engine.io-parser
has-binary2
isarray
mime-db
mime-types
ms
negotiator
safe-buffer
socket.io
socket.io-adapter
socket.io-client
socket.io-parser
ultron
ws
VS-PPT
Json.NET
bloaty
walk
Live-Charts
MSAGL
squirrel
Node.js
Libelfin
JSON for Modern C++
python
asn1
node-bindings
safer-buffer
semver
Node Serialport
SSH.NET
ssh2
ssh2-streams
streamsearch
NJsonSchema
json-editor
foundation
markdeep
OxyPlot
OpenCSD
ツールチェーンのライセンスについて
The copyright of exeGCC libraries
The copyright of exeGCC libraries (detail)
The NetBSD Project
LLVM/Clang Project
GNU Project
索引
SOLID
SOLID ツールチェーン
Previous
Next
SOLID ツールチェーン
この章では SOLID が使用しているコンパイラツールチェーンについて解説します。
C/C++ の言語規格について
デフォルトの言語規格
ライブラリの仕様(ARM)
exeGCC for SOLID s005 ライブラリ仕様
exeGCC for SOLID s002 ライブラリ仕様
未サポートの機能
ワイド文字(列)の扱いについて
ライブラリの仕様(AArch64)
exeGCC for SOLID s005 (AArch64)ライブラリ仕様
SOLID が使用しているオプション
プリプロセッサオプション
ディレクトリオプション
コンパイラオプション
アセンブラオプション
リンカオプション
Clang と GCC の主な相違点
コンパイラドライバ
文字コード
pragma, attribute 拡張機能
mthumb-interwork オプション
marm オプション
specs ファイル
arm-*-eabi ターゲット時の enum サイズの仕様
GCC と Clang のオプション概要
GCC と Clang の共通オプション
GCC のみ指定可能なオプション
Clang のみ指定可能なオプション
ARM Compiler ツールチェーンとの相違点
ワイド文字のサイズ
armcc リンカの
$$Sub$$
や
$$Super$$
による既存関数のオーバーライド
__attribute__((at(
ADDRESS
)))
で変数を絶対アドレス
ADDRESS
に配置
armcc fromelf イメージ変換ツールの scatter-loading 機能の様な複数バイナリの生成
armcc の _mutex_XXX のようなマルチスレッドアプリケーションにおけるロックの管理機能
KMC 独自の修正について
GCC/Clang 共通の修正
GCC のみの修正
Clang のみの修正
マルチコンテキスト対応
errno のマルチコンテキスト対応
malloc 系関数のマルチコンテキスト対応
VLINK のマルチコンテキスト対応
ツールチェーン更新履歴
s005 (ARM)
s002 (ARM)
s001 (ARM)
ツールチェーンのライセンスについて
The copyright of exeGCC libraries
The copyright of exeGCC libraries (detail)
The NetBSD Project
LLVM/Clang Project
GNU Project
NetBSD libc を選択した理由
libc を自社開発からオープンソースに移行した理由
歴史的な理由
NetBSD libc はこれらの要件全てを満たしていました
他の候補との比較
exeGCC について
exeGCC という名前について
exeGCC4 というバージョンについて
exeGCC の各製品バージョンの概要
参考サイト
他のバージョン
v: 2.2.0
バージョン
1.2.0
1.3.0
1.4.0
2.0.0
2.1.0
2.2.0
3.0.0
3.1.0
3.2.0
3.3.0
3.5.0
最新
latest