20.23 RAM使用量の算出
RI600PXが使用/管理するRAM領域は,その用途により,以下の4種類のセクションに大別されます。

- BRI_RAMセクション:RI600PXの管理データ,システム・コンフィギュレーション・ファイルで生成されたデータ・キュー領域,システム・コンフィギュレーション・ファイルでセクション指定を省略して生成されたメッセージ・バッファ領域

- RRI_RAMセクション:RI600PXの管理データ(動的生成使用時)

- BURI_HEAPセクション:システム・コンフィギュレーション・ファイルでセクション指定を省略して生成された固定長メモリ・プール領域および可変長メモリ・プール領域

- SURI_STACKセクション:システム・コンフィギュレーション・ファイルでセクション指定を省略して生成されたタスクのユーザ・スタック領域

- SIセクション:システム・スタック領域

20.23.1 BRI_RAM,RRI_RAMセクション

BRI_RAMおよびRRI_RAMセクションは,RI600PXの管理データが割り付けられるセクションです。

表20−11に,BRI_RAMおよびRRI_RAMセクションのメモリ容量計算式(単位:バイト)を示します。なお,実際のサイズは,境界調整のために表20−11で算出される値よりも大きくなる場合があります。

表20−11  BRI_RAMおよびRRI_RAMセクションのメモリ容量計算式

種別

セクション

メモリ容量計算式(単位:バイト)

システム管理

ブロック

BRI_RAM

28 + 4×down( ( TMAX_TPRI - 1) / 32 + 1) + TMAX_TPRI

+ VTMAX_SEM + VTMAX_FLG + 2×VTMAX_DTQ + VTMAX_MBX

+ VTMAX_MTX + 2×VTMAX_MBF + VTMAX_MPF + VTMAX_MPL

+ 57×VTMAX_DOMAIN

RRI_RAM1

4 + VTMAX_SEM + VTMAX_FLG + 2×VTMAX_DTQ + VTMAX_MBX

+ VTMAX_MTX + 2×VTMAX_MBF + VTMAX_MPF + VTMAX_MPL

タスク管理

ブロック

BRI_RAM

28×VTMAX_TSK

RRI_RAM2

24×VTMAX_TSK

セマフォ管理

ブロック3

BRI_RAM

VTMAX_SEM + down ( VTMAX_SEM / 8 + 1)

RRI_RAM4

VTMAX_SEM

イベントフラグ

管理ブロック5

BRI_RAM

VTMAX_FLG + 2×down ( VTMAX_FLG / 8 + 1)

RRI_RAM6

VTMAX_FLG

データ・キュー

管理ブロック7

BRI_RAM

VTMAX_DTQ+ down ( VTMAX_DTQ / 8 + 1) + DTQ_ALLSIZE

RRI_RAM8

VTMAX_DTQ

メールボックス

管理ブロック9

BRI_RAM

VTMAX_MBX + 2×down ( VTMAX_MBX / 8 + 1)

RRI_RAM10

VTMAX_MBX

ミューテックス

管理ブロック11

BRI_RAM

VTMAX_MTX + down ( VTMAX_MTX / 8 + 1)

RRI_RAM12

VTMAX_MTX

メッセージ・

バッファ

管理ブロック13

BRI_RAM

16×VTMAX_MBF + MBF_ALLSIZE

RRI_RAM14

VTMAX_MBF

固定長メモリ・

プール管理

ブロック15

BRI_RAM

VTMAX_MPF + down ( VTMAX_MPF / 8 + 1)

+ Σ(memorypool[].num_block / 8 + 1)

RRI_RAM16

12×VTMAX_MPF

可変長メモリ・

プール管理

ブロック17

BRI_RAM

208×VTMAX_MPL

RRI_RAM18

20×VTMAX_MPL

周期ハンドラ

管理ブロック19

BRI_RAM

VTMAX_CYH

RRI_RAM20

20×VTMAX_CYH

アラーム・ハンドラ管理ブロック21

BRI_RAM

VTMAX_ALH

RRI_RAM22

VTMAX_ALH

2
最大タスクID(max_task)の定義がある場合のみ,生成されます。



3
VTAX_SEMが0の場合,これらの領域は生成されません。



4
最大セマフォID(max_sem)の定義がある場合のみ,生成されます。



5
VTMAX_FLGが0の場合,これらの領域は生成されません。



6
最大イベントフラグID(max_flag)の定義がある場合のみ,生成されます。



7
VTMAX_DTQが0の場合,これらの領域は生成されません。



8
最大データ・キューID(max_dtq)の定義がある場合のみ,生成されます。



9
VTMAX_MBXが0の場合,これらの領域は生成されません。



10
最大メールボックスID(max_mbx)の定義がある場合のみ,生成されます。



11
VTMAX_MTXが0の場合,これらの領域は生成されません。



12
最大ミューテックスID(max_mtx)の定義がある場合のみ,生成されます。



13
VTMAX_MBFが0の場合,これらの領域は生成されません。



14
最大メッセージ・バッファID(max_mbf)の定義がある場合のみ,生成されます。



15
VTMAX_MPFが0の場合,これらの領域は生成されません。



16
最大固定長メモリ・プールID(max_mpf)の定義がある場合のみ,生成されます。



17
VTMAX_MPLが0の場合,これらの領域は生成されません。



18
最大可変長メモリ・プールID(max_mpl)の定義がある場合のみ,生成されます。



19
VTMAX_CYHが0の場合,これらの領域は生成されません。



20
最大周期ハンドラID(max_cyh)の定義がある場合のみ,生成されます。



21
VTMAX_ALHが0の場合,これらの領域は生成されません。



22
最大アラーム・ハンドラID(max_alh)の定義がある場合のみ,生成されます。





備考 メモリ容量計算式のキーワードは,以下に示した意味を持ちます。

TMAX_TPRI: 最大タスク優先度です。
cfg600pxは,システム情報(system)タスク優先度の最大値(priority)設定値を定義したマクロTMAX_TPRIを,システム情報ヘッダ・ファイルkernel_id.hに出力します。


VTMAX_TSK: 最大タスクIDです。
cfg600pxは,最大タスクIDを定義したマクロVTMAX_TSKを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


VTMAX_SEM: 最大セマフォIDです。
cfg600pxは,最大セマフォIDを定義したマクロVTMAX_SEMを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


VTMAX_FLG: 最大イベントフラグIDです。
cfg600pxは,最大値イベントフラグIDを定義したマクロVTMAX_FLGを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


VTMAX_DTQ: 最大データ・キューID数です。
cfg600pxは,最大データ・キューIDを定義したマクロVTMAX_FLGを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


DTQ_ALLSIZE: システム・コンフィギュレーション・ファイルで生成したデータ・キュー領域のサイズの合計です。具体的には,以下によって算出されます。
Σdataqueue[].buffer_size×4
ただし,この計算結果が0になる場合は,DTQ_ALLSIZEは4です。



VTMAX_MBX: 最大メールボックスIDです。
cfg600pxは,最大メールボックスIDを定義したマクロVTMAX_MBXを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


VTMAX_MTX: 最大ミューテックスIDです。
cfg600pxは,最大ミューテックスIDを定義したマクロVTMAX_MTXを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


VTMAX_MBF: 最大メッセージ・バッファIDです。
cfg600pxは,最大メッセージ・バッファIDを定義したマクロVTMAX_MBFを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


MBF_ALLSIZE: システム・コンフィギュレーション・ファイルで,“mbf_section”を省略して生成したメッセージ・バッファ領域のサイズの合計です。具体的には,以下によって算出されます。
Σmessage_buffer[].mbf_size


VTMAX_MPF: 最大固定長メモリ・プールIDです。
cfg600pxは,最大固定長メモリ・プールIDを定義したマクロVTMAX_MPFを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


VTMAX_MPL: 最大可変長メモリ・プールIDです。
cfg600pxは,最大可変長メモリ・プールIDを定義したマクロVTMAX_MPLを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


VTMAX_CYH: 最大周期ハンドラIDです。
cfg600pxは,最大周期ハンドラIDを定義したマクロVTMAX_CYHを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


VTMAX_ALH: 最大アラーム・ハンドラIDです。
cfg600pxは,最大アラーム・ハンドラIDを定義したマクロVTMAX_ALHを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


VTMAX_DOMAIN: 最大ドメインIDです。
cfg600pxは,最大ドメインIDを定義したマクロVTMAX_DOMAINを,システム情報ヘッダ・ファイルkernel_id.hに出力します。詳細は,「20.7 最大ID(maxdefine)」を参照してください。


20.23.2 BURI_HEAPセクション

BURI_HEAPセクションは,固定長メモリ・プール領域および可変長メモリ・プール領域が割り付けられるセクションです。なお,固定長メモリ・プールおよび可変長メモリ・プールの定義時に,ぞれぞれの領域をユーザ指定のセクションに割り当てることもできます。

BURI_HEAPセクションのサイズは,以下の合計です。なお,アプリケーション側でBURI_HEAPセクションにデータを生成した場合は,そのサイズも加算してください。

- 固定長メモリ・プール領域の合計サイズ
固定長メモリ・プール情報(memorypool[])で“section”を省略した固定長メモリ・プール定義について,以下の式で算出されます。


Σ(memorypool[].siz_block×memorypool[].num_block)

- 可変長メモリ・プール領域の合計サイズ
可変長メモリ・プール情報(variable_memorypool[])で“mpl_section”を省略した可変長メモリ・プール定義について,以下の式で算出されます。


Σvariable_memorypool[].heap_size

20.23.3 SURI_STACKセクション

SURI_STACKセクションは,各タスクのユーザ・スタック領域が割り付けられるセクションです。なお,ユーザ・スタック領域は,システム・コンフィギュレーション・ファイルでの定義時にユーザ定義のセクションに割り当てることもできます。

SURI_STACKセクションのサイズは,タスク情報(task[])で“stack_section”を省略したタスク定義について,以下の式で算出されます。なお,アプリケーション側でSURI_STACKセクションにデータを生成した場合は,そのサイズも加算してください。

Σtask[].stack_size

備考 スタック使用量の見積りについては,「付録D スタック使用量の算出」を参照してください。

20.23.4 SIセクション

SIセクションは,システム・スタック領域が割り付けられるセクションです。

SIセクションのサイズは,システム情報(system)システム・スタック・サイズ(stack_size)です。

備考 スタック使用量の見積りについては,「付録D スタック使用量の算出」を参照してください。