19.20 RAM使用量の算出
RI600V4が使用/管理するRAM領域は,その用途により,以下の6種類のセクションに大別されます。以降で,BRI_RAM,BRI_HEAP,SURI_STACK,およびSIセクションについて説明します。
- BRI_RAMセクション:RI600V4の管理データ,データ・キュー領域
- BRI_HEAPセクション:デフォルトのメッセージ・バッファ領域,固定長メモリ・プール領域,および可変長メモリ・プール領域
- SURI_STACKセクション:デフォルトのユーザ・スタック領域
- RRI_RAMセクション:RI600V4の管理データです,サイズは常に4バイトです。
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
|
|
|
|
4× VTMAX_SEM + down ( VTMAX_SEM / 8 + 1)
ただし, VTMAX_SEMが0の場合は,セマフォ管理ブロックのサイズは0です。
|
|
8× VTMAX_FLG + 2×down ( VTMAX_FLG / 8 + 1)
ただし, VTMAX_FLGが0の場合は,イベントフラグ管理ブロックのサイズは0です。
|
|
6× VTMAX_DTQ+ down ( VTMAX_DTQ / 8 + 1) + DTQ_ALLSIZE
ただし, VTMAX_DTQが0の場合は,データ・キュー管理ブロックのサイズは0です。
|
|
8× VTMAX_MBX + 2×down ( VTMAX_MBX / 8 + 1)
ただし, VTMAX_MBXが0の場合は,メールボックス管理ブロックのサイズは0です。
|
|
VTMAX_MTX + down ( VTMAX_MTX / 8 + 1)
ただし, VTMAX_MTXが0の場合は,ミューテックス管理ブロックのサイズは0です。
|
|
|
|
8× VTMAX_MPF + down ( VTMAX_MPF / 8 + 1)
+ Σ(down( memorypool[].num_block / 8 + 1) )
ただし, VTMAX_MPFが0の場合は,固定長メモリ・プール管理ブロックのサイズは0です。
|
|
|
|
|
|
|
|
|
|
|
|
1592 + 8× ( VTMAX_TSK + 1 )
|
備考 メモリ容量計算式のキーワードは,以下に示した意味を持ちます。
DTQ_ALLSIZE: データ・キュー領域のサイズの合計です。具体的には,以下によって算出されます。
Σdataqueue[].buffer_size×4
ただし,この計算結果が0になる場合は,
DTQ_ALLSIZEは4です。
BRI_HEAPセクションは,メッセージ・バッファ領域,固定長メモリ・プール領域,および可変長メモリ・プール領域が割り付けられるセクションです。なお,メッセージ・バッファ,固定長メモリ・プール,および可変長メモリ・プールの定義時に,ぞれぞれの領域をユーザ指定のセクションに割り当てることもできます。
BRI_HEAPセクションのサイズは,以下の合計です。
Σmessage_buffer[].mbf_size
Σ(memorypool[].siz_block×memorypool[].num_block)
Σvariable_memorypool[].heap_size
SURI_STACKセクションは,各タスクのユーザ・スタック領域が割り付けられるセクションです。なお,ユーザ・スタック領域は,システム・コンフィギュレーション・ファイルでの定義時にユーザ定義のセクションに割り当てることもできます。
SURI_STACKセクションのサイズは,
タスク情報(task[])で“stack_section”を省略したタスク定義について,以下の式で算出されます。
SIセクションは,システム・スタック領域が割り付けられるセクションです。