Everything
19.20 RAM使用量の算出
RI600V4が使用/管理するRAM領域は,その用途により,以下の6種類のセクションに大別されます。以降で,BRI_RAM,BRI_HEAP,SURI_STACK,およびSIセクションについて説明します。
- BRI_RAMセクション:RI600V4の管理データ,データ・キュー領域
- BRI_HEAPセクション:デフォルトのメッセージ・バッファ領域,固定長メモリ・プール領域,および可変長メモリ・プール領域
- SURI_STACKセクション:デフォルトのユーザ・スタック領域
- SIセクション:システム・スタック領域
- RRI_RAMセクション:RI600V4の管理データです,サイズは常に4バイトです。
- BRI_TRCBUFセクション:本セクションは,[タスク・アナライザ]タブで[ソフトウェア・トレース・モードでトレース・チャートを取得]および[カーネルのバッファ]を選択した場合にのみ生成されます。サイズは,[タスク・アナライザ]タブで指定します。
19.20.1 BRI_RAMセクション
BRI_RAMセクションは,RI600V4の管理データが割り付けられるセクションです。
表19-11に,BRI_RAMセクションのメモリ容量計算式(単位:バイト)を示します。なお,実際のサイズは,境界調整のために表19-11で算出される値よりも大きくなります。
表19-11  BRI_RAMセクションのメモリ容量計算式
種別
メモリ容量計算式(単位:バイト)
システム管理ブロック
36 + 4×down( ( TMAX_TPRI - 1) / 32 + 1) + TMAX_TPRI + VTMAX_SEM + 2×VTMAX_DTQ + VTMAX_FLG + VTMAX_MBX + VTMAX_MTX + 2×VTMAX_MBF + VTMAX_MPF + VTMAX_MPL
タスク管理ブロック
24×VTMAX_TSK
セマフォ管理ブロック
VTMAX_SEM + down ( VTMAX_SEM / 8 + 1)
ただし,VTMAX_SEMが0の場合は,セマフォ管理ブロックのサイズは0です。
イベントフラグ管理ブロック
VTMAX_FLG + 2×down ( VTMAX_FLG / 8 + 1)
ただし,VTMAX_FLGが0の場合は,イベントフラグ管理ブロックのサイズは0です。
データ・キュー管理ブロック
VTMAX_DTQ+ down ( VTMAX_DTQ / 8 + 1) + DTQ_ALLSIZE
ただし,VTMAX_DTQが0の場合は,データ・キュー管理ブロックのサイズは0です。
メールボックス管理ブロック
VTMAX_MBX + 2×down ( VTMAX_MBX / 8 + 1)
ただし,VTMAX_MBXが0の場合は,メールボックス管理ブロックのサイズは0です。
ミューテックス管理ブロック
VTMAX_MTX + down ( VTMAX_MTX / 8 + 1)
ただし,VTMAX_MTXが0の場合は,ミューテックス管理ブロックのサイズは0です。
メッセージ・バッファ管理ブロック
16×VTMAX_MBF
固定長メモリ・プール管理ブロック
VTMAX_MPF + down ( VTMAX_MPF / 8 + 1)
+ Σ(down( memorypool[].num_block / 8 + 1) )
ただし,VTMAX_MPFが0の場合は,固定長メモリ・プール管理ブロックのサイズは0です。
可変長メモリ・プール管理ブロック
208×VTMAX_MPL
周期ハンドラ管理ブロック
VTMAX_CYH
アラーム・ハンドラ管理ブロック
VTMAX_ALH
[タスク・アナライザ]タブで「ハードウェア・トレース・モードでトレース・チャートを取得」を選択
4
[タスク・アナライザ]タブで「ソフトウェア・トレース・モードでトレース・チャートを取得」を選択
28
[タスク・アナライザ]タブで「ソフトウェア・トレース・モードで長時間統計を取得」を選択
1592 + 8× ( VTMAX_TSK + 1 )

備考 メモリ容量計算式のキーワードは,以下に示した意味を持ちます。
TMAX_TPRIシステム情報(system)タスク優先度の最大値(priority)設定値です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_TSKタスク情報(task[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_SEMセマフォ情報(semaphore[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_FLGイベントフラグ情報(flag[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_DTQデータ・キュー情報(dataqueue[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
DTQ_ALLSIZE: データ・キュー領域のサイズの合計です。具体的には,以下によって算出されます。
Σdataqueue[].buffer_size×4
ただし,この計算結果が0になる場合は,DTQ_ALLSIZEは4です。
VTMAX_MBXメールボックス情報(mailbox[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_MTXミューテックス情報(mutex[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_MBFメッセージ・バッファ情報(message_buffer[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_MPF固定長メモリ・プール情報(memorypool[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_MPL可変長メモリ・プール情報(variable_memorypool[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_CYH周期ハンドラ情報(cyclic_hand[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
VTMAX_ALHアラーム・ハンドラ情報(alarm_hand[])の定義総数です。
cfg600は,システム情報ヘッダ・ファイルkernel_id.hにこの名称のマクロを出力します。
19.20.2 BRI_HEAPセクション
BRI_HEAPセクションは,メッセージ・バッファ領域,固定長メモリ・プール領域,および可変長メモリ・プール領域が割り付けられるセクションです。なお,メッセージ・バッファ,固定長メモリ・プール,および可変長メモリ・プールの定義時に,ぞれぞれの領域をユーザ指定のセクションに割り当てることもできます。
BRI_HEAPセクションのサイズは,以下の合計です。
- メッセージ・バッファ領域の合計サイズ
メッセージ・バッファ情報(message_buffer[])で“mbf_section”を省略したメッセージ・バッファ定義について,以下の式で算出されます。
Σmessage_buffer[].mbf_size
- 固定長メモリ・プール領域の合計サイズ
固定長メモリ・プール情報(memorypool[])で“section”を省略した固定長メモリ・プール定義について,以下の式で算出されます。
Σ(memorypool[].siz_block×memorypool[].num_block)
- 可変長メモリ・プール領域の合計サイズ
可変長メモリ・プール情報(variable_memorypool[])で“mpl_section”を省略した可変長メモリ・プール定義について,以下の式で算出されます。
Σvariable_memorypool[].heap_size
19.20.3 SURI_STACKセクション
SURI_STACKセクションは,各タスクのユーザ・スタック領域が割り付けられるセクションです。なお,ユーザ・スタック領域は,システム・コンフィギュレーション・ファイルでの定義時にユーザ定義のセクションに割り当てることもできます。
SURI_STACKセクションのサイズは,タスク情報(task[])で“stack_section”を省略したタスク定義について,以下の式で算出されます。
Σtask[].stack_size
備考 スタック使用量の見積りについては,「付録D スタック使用量の算出」を参照してください。
19.20.4 SIセクション
SIセクションは,システム・スタック領域が割り付けられるセクションです。
備考 スタック使用量の見積りについては,「付録D スタック使用量の算出」を参照してください。