Everything

付録B  メモリ容量


本付録では,メモリ容量について解説しています。
B.1 概  要
RI850V4が使用/管理するメモリ領域は,その用途により,8種類のセクションに大別されます。
表B-1  メモリ領域
セクション名
概要
RI850V4の実行コードが割り付けられる領域
RI850V4の静的データが割り付けられる領域
RI850V4の動的データが割り付けられる領域
RI850V4のカーネル初期化フラグが割り付けられる領域
トレース機能の静的データが割り付けられる領域
トレース機能の動的データが割り付けられる領域
システム・スタック,タスク・スタック,データ・キュー領域,固定長メモリ・プール,可変長メモリ・プールが割り付けられる領域
タスク・スタック,データ・キュー領域,固定長メモリ・プール,可変長メモリ
プールが割り付けられる領域

B.1.1 .kernel_system
.kernel_systemのメモリ容量は,トレース・モードの種類と使用するカーネル・ライブラリの種類に依存しています。
使用するカーネル・ライブラリは,下記の4種類が存在します。
‐ CC-RH版, FPU非対応版
‐ CC-RH版,FPU対応版
‐ CCV850版,FPU非対応版
‐ CCV850版, FPU対応版
なお,トレース・モードの種類は,プロパティ パネル→[タスク・アナライザ]タブ→[トレース]カテゴリ→[トレース・モードの選択]で選択したものとなります。
1 ) CC-RH版,FPU非対応版の場合
トレース・モードの種類
メモリ容量
トレースしない
20.1Kバイト
ハードウエア・トレース・モードで,トレース・チャートを取得
20.4Kバイト
ソフトウエア・トレース・モードで,トレース・チャートを取得
20.9Kバイト
ソフトウエア・トレース・モードで,長時間統計を取得
20.8Kバイト

2 ) CC-RH版,FPU対応版の場合
トレース・モードの種類
メモリ容量
トレースしない
20.3Kバイト
ハードウエア・トレース・モードで,トレース・チャートを取得
20.6Kバイト
ソフトウエア・トレース・モードで,トレース・チャートを取得
21.1Kバイト
ソフトウエア・トレース・モードで,長時間統計を取得
21.0Kバイト

3 ) CCV850版,FPU非対応版の場合
トレース・モードの種類
メモリ容量
トレースしない
19.9Kバイト
ハードウエア・トレース・モードで,トレース・チャートを取得
20.2Kバイト
ソフトウエア・トレース・モードで,トレース・チャートを取得
20.8Kバイト
ソフトウエア・トレース・モードで,長時間統計を取得
20.6Kバイト

4 ) CCV850版,FPU対応版の場合
トレース・モードの種類
メモリ容量
トレースしない
20.2Kバイト
ハードウエア・トレース・モードで,トレース・チャートを取得
20.5Kバイト
ソフトウエア・トレース・モードで,トレース・チャートを取得
21.0Kバイト
ソフトウエア・トレース・モードで,長時間統計を取得
20.8Kバイト

備考 上記の値は,RI850V4が提供している全サービス・コールを利用した場合の最大値であり,処理プログラムの利用するサービス・コールの種類により,該当値は変動します。
B.1.2 .kernel_const
.kernel_constのメモリ容量は,情報(メモリ領域情報タスク情報など)の定義数,および定義内容に依存しています。
以下に,.kernel_constのメモリ容量を見積もる際の計算式(単位:バイト)を示します。
なお,下記計算式における“align4(x)”は,数値“x”を4バイト・アラインした結果を意味しています。
 KERNEL_CONST =
     224
     + 8 * MEM_AREA_num
     + 24 * CRE_TSK_num
     + 8 * CRE_SEM_num
     + 8 * CRE_FLG_num
     + 8 * CRE_DTQ_num
     + 4 * CRE_MBX_num
     + align4(2 * CRE_MTX_num
     + 12 * CRE_MPF_num
     + 12 * CRE_MPL_num
     + 20 * CRE_CYC_num
     + 8 * DEF_INH_num
     + 8 * DEF_SVC_num
     + 12 * ATT_INI_num
     + 8 * VATT_IDL_num
     + align4(maxint
     + align4(TA_ACT_num
     + align4(TA_STA_num

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
キーワード
意味
 MEM_AREA_num
 CRE_TSK_num
タスク情報の定義数
 CRE_SEM_num
セマフォ情報の定義数
 CRE_FLG_num
 CRE_DTQ_num
 CRE_MBX_num
 CRE_MTX_num
 CRE_MPF_num
 CRE_MPL_num
 CRE_CYC_num
 DEF_INH_num
 DEF_SVC_num
 ATT_INI_num
 VATT_IDL_num
 maxint
 TA_ACT_num
属性(記述言語,初期起動状態など)tskatrで“タスクの初期起動状態”に“TA_ACT”を定義した数
 TA_STA_num
属性(記述言語,初期起動状態など)cycatrで“周期ハンドラの初期起動状態”に“TA_STA”を定義した数

B.1.3 .kernel_data
.kernel_dataのメモリ容量は,情報(タスク情報セマフォ情報など)の定義数,および定義内容に依存しています。
以下に,.kernel_dataのメモリ容量を見積もる際の計算式(単位:バイト)を示します。
なお,下記計算式における“align4(x)”は,数値“x”を4バイト・アラインした結果を意味しています。
 KERNEL_DATA =
     68
     + 32 * CRE_TSK_num
     + 8 * CRE_SEM_num
     + 8 * CRE_FLG_num
     + 8 * CRE_DTQ_num
     + 12 * CRE_MBX_num
     + 8 * CRE_MTX_num
     + 8 * CRE_MPF_num
     + 8 * CRE_MPL_num
     + 8 * CRE_CYC_num
     + align4(maxtpri

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
キーワード
意味
 CRE_TSK_num
タスク情報の定義数
 CRE_SEM_num
セマフォ情報の定義数
 CRE_FLG_num
 CRE_DTQ_num
 CRE_MBX_num
 CRE_MTX_num
 CRE_MPF_num
 CRE_MPL_num
 CRE_CYC_num
 maxtpri

B.1.4 .kernel_data_init
.kernel_data_initのメモリ容量は,4バイトとなります。
B.1.5 .kernel_const_trace.const
.kernel_const_trace.constのメモリ容量は,トレース・モードの種類に依存しています。
なお,トレース・モードの種類は,プロパティ パネル→[タスク・アナライザ]タブ→[トレース]カテゴリ→[トレース・モードの選択]で選択したものとなります。
また,下表における“align4(x)”は,数値“x”を4バイト・アラインした結果を意味しています。
トレース・モードの種類
メモリ容量
トレースしない
align4(5)バイト
ハードウエア・トレース・モードで,トレース・チャートを取得
align4(61)バイト
ソフトウエア・トレース・モードで,トレース・チャートを取得
align4(74)バイト
ソフトウエア・トレース・モードで,長時間統計を取得
align4(70)バイト

B.1.6 .kernel_data_trace.bss
.kernel_data_trace.bssのメモリ容量は,トレース・モードの種類に依存しています。
なお,トレース・モードの種類は,プロパティ パネル→[タスク・アナライザ]タブ→[トレース]カテゴリ→[トレース・モードの選択]で選択したものとなります。
1 ) トレースしない
.kernel_data_trace.bssのメモリ容量は,0バイトとなります。
2 ) ハードウエア・トレース・モードで,トレース・チャートを取得
.kernel_data_trace.bssのメモリ容量は,4バイトとなります。
3 ) ソフトウエア・トレース・モードで,トレース・チャートを取得
.kernel_data_trace.bssのメモリ容量は,プロパティ パネル→[タスク・アナライザ]タブ→[トレース]カテゴリ→[バッファ・サイズ]の定義内容に依存しています。
以下に,.kernel_data_Trace.bssのメモリ容量を見積もる際の計算式(単位:バイト)を示します。
なお,下記計算式における“align4(x)”は,数値“x”を4バイト・アラインした結果を意味しています。
 KERNEL_DATA_TRACE.BSS =
     24
     + align4(TRC_BUF_size

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
キーワード
意味
 TRC_BUF_size
プロパティ パネル→[タスク・アナライザ]タブ→[トレース]カテゴリ→[バッファ・サイズ]で定義した値

4 ) ソフトウエア・トレース・モードで,長時間統計を取得
.kernel_data_trace.bssのメモリ容量は,タスク情報の定義数,および基本情報の定義内容に依存しています。
以下に,.kernel_data_Trace.bssのメモリ容量を見積もる際の計算式(単位:バイト)を示します。
なお,下記計算式における“align4(x)”は,数値“x”を4バイト・アラインした結果を意味しています。
 KERNEL_DATA_TRACE.BSS =
     24
     + 8 * CRE_TSK_num
     + align4(10 * (intlvl - maxintpri))
     + 8 * maxint

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
キーワード
意味
 CRE_TSK_num
タスク情報の定義数
 intlvl
CPUが提供している割り込みレベルの数
 maxintpri
 maxint

B.1.7 .kernel_work
.kernel_workのメモリ容量は,情報(基本情報タスク情報など)の定義内容に依存しています。
以下に,.kernel_workのメモリ容量を見積もる際の計算式(単位:バイト)を示します。
なお,下記計算式における“align4(x)”は,数値“x”を4バイト・アラインした結果を意味しています。
 KERNEL_WORK =
     116
     + SYSSTK
     + TSKSTK_total
     + DTQ_total
     + MPF_total
     + MPL_total

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
キーワード
意味
 SYSSTK
システム・スタック”で算出された値
 TSKSTK_total
タスク・スタック”で算出した個々のタスクが必要とするメモリ容量の総和
 DTQ_total
データ・キュー領域”で算出した個々のデータ・キューが必要とするメモリ容量の総和
 MPF_total
固定長メモリ・プール”で算出した個々の固定長メモリ・プールが必要とするメモリ容量の総和
 MPL_total
可変長メモリ・プール”で算出した個々の可変長メモリ・プールが必要とするメモリ容量の総和

1 ) システム・スタック
システム・スタックのメモリ容量は,タスク情報の定義内容,およびタスクの処理内容に依存しています。
以下に,RI850V4がシステム・スタック用に必要とするメモリ容量を見積もる際の計算式(単位:バイト)を示します。
なお,下記計算式における“max(a, b, c)”は,候補“a”,“b”,“c”の中から最大値を選び出した結果(max(1, 2, 3)の場合は,3)を意味しています
 SYSSTK =
     max(align4(INT) + align4(CYC), align4(INI), align4(IDL))

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
キーワード
意味
 INT
割り込みハンドラの処理内容に応じた値(割り込みハンドラの処理がネストする場合は,処理内容に応じた値の総和,割り込みハンドラ情報が未定義の場合は0)
 CYC
周期ハンドラの処理内容に応じた値(複数の周期ハンドラが存在する場合は,その中の最大値,周期ハンドラ情報が未定義の場合は0)
 INI
初期化ルーチンの処理内容に応じた値(複数の初期化ルーチンが存在する場合は,その中の最大値,初期化ルーチン情報が未定義の場合は0)
 IDL
アイドル・ルーチンの処理内容に応じた値(アイドル・ルーチン情報が未定義の場合は0)

2 ) タスク・スタック
タスク・スタックのメモリ容量は,タスク情報の定義内容,およびタスクの処理内容に依存しています。
以下に,タスク情報で定義された個々のタスクがタスク・スタック用に必要とするメモリ容量を見積もる際の計算式(単位:バイト)を示します。
 TSKSTK =
     ctxsz
     + stksz

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
キーワード
意味
 ctxsz
コンフィギュレータCF850V4の起動オプションとして指定した使用するCコンパイラの種類とデバイス品種(起動オプションの詳細については「18.2.1 コマンド・ラインからの起動」を参照してください),および属性(記述言語,初期起動状態など)tskatrの“プリエンプトの受け付け状態”により,表B-2に示すような値になります。
 stksz
タスクの処理内容に応じた値(スタック・サイズstksz,メモリ領域名sec_namで定義した値)

表B-2  ctxszの値
Cコンパイラ
FPU
プリエンプト許可
プリエンプト禁止
CC-RH版
非搭載
132
88
搭載
136
92
CCV850版
非搭載
128
84
搭載
132
88

3 ) データ・キュー領域
データ・キュー領域のメモリ容量は,データ・キュー情報の定義内容に依存しています。
以下に,データ・キュー情報で定義された個々のデータ・キューがデータ・キュー領域用に必要とするメモリ容量を見積もる際の計算式(単位:バイト)を示します。
 DTQ =
     4 * dtqcnt

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
キーワード
意味
 dtqcnt

4 ) 固定長メモリ・プール
固定長メモリ・プールのメモリ容量は,固定長メモリ・プール情報の定義内容に依存しています。
以下に,固定長メモリ・プール情報で定義された個々の固定長メモリ・プールが必要とするメモリ容量を見積もる際の計算式(単位:バイト)を示します。
なお,下記計算式における“align4(x)”は,数値“x”を4バイト・アラインした結果を意味しています。
 MPF =
     align4(blksz) * blkcnt

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
5 ) 可変長メモリ・プール
可変長メモリ・プールのメモリ容量は,可変長メモリ・プール情報の定義内容に依存しています。
以下に,可変長メモリ・プール情報で定義された個々の可変長メモリ・プールが必要とするメモリ容量を見積もる際の計算式(単位:バイト)を示します。
なお,下記計算式における“align4(x)”は,数値“x”を4バイト・アラインした結果を意味しています。
 MPL =
     4
     + align4(mplsz

備考 上記計算式のキーワードは,以下に示した意味を持ちます。
キーワード
意味
 mplsz

B.1.8 .sec_nam(ユーザ定義領域)
.sec_nam(ユーザ定義領域)のメモリ容量は,情報(タスク情報データ・キュー情報など)の定義内容に依存しています。
備考 本セクションは,タスク情報データ・キュー情報などでタスク・スタック,データ・キュー領域などの割り付け先を.kernel_workセクション以外を定義した際に必要となるものです。
したがって,本セクションのメモリ容量については,「B.1.7 .kernel_work」を参考に見積もりを行ってください。