Everything
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セクションは,システム・スタック領域が割り付けられるセクションです。
備考 スタック使用量の見積りについては,「付録D スタック使用量の算出」を参照してください。