MI_AllocWramx

# MI_AllocWram*

## 構文

  `#include <twl/mi.h>`
  `u32 MI_AllocWram( MIWramPos wram, MIWramSize size, MIWramProc proc )`
  `u32 MI_AllocWramSlot( MIWramPos wram, int slot, MIWramSize size, MIWramProc proc )`

  `(define)
  #define MI_AllocWram_A( size, proc );
  #define MI_AllocWram_B( size, proc );
  #define MI_AllocWram_C( size, proc );
  #define MI_AllocWramSlot_A( slot, size, proc );
  #define MI_AllocWramSlot_B( slot,.size, proc );
  #define MI_AllocWramSlot_C( slot, size, proc );
  `

## 引数

wram | 確保する対象のWRAM
slot | スロット番号
size | 確保する領域の大きさ
proc | 使用するプロセッサ

## 返り値

確保できたときは、その先頭アドレスを返します。
確保できなかったときは `MI_WRAM_ALLOC_FAIL` (0 に define されています) を返します。

## 説明

WRAM から領域を確保します。

wram は対象となる WRAM で、`MIWramPos` 型です。`MI_WRAM_A, MI_WRAM_B, MI_WRAM_C` のいずれかとなります。

size は、確保しようとする領域の大きさです。`MIWramSize` 型で、MI_WRAM_SIZE_xxxKB となります。xxx には 0 〜 256 の値が入りますが、WRAM-A の場合は確保できる大きさは64KB単位で、WRAM-B、WRAM-C の場合は 32KB 単位です。

proc は、その確保する領域をどこが使用するかを表します。`MIWramProc` 型で、`MI_WRAM_ARM9, MI_WRAM_ARM7, MI_WRAM_DSP` のいずれかとなります。

`MI_AllocWram_A` は `MI_AllocWram( MI_WRAM_A, ... )` の define です。
`MI_AllocWram_B` は `MI_AllocWram( MI_WRAM_B, ... )` の define です。
`MI_AllocWram_C` は `MI_AllocWram( MI_WRAM_C, ... )` の define です。
`MI_AllocWramSlot_A` は `MI_AllocWramSlot( MI_WRAM_A, ... )` の define です。
`MI_AllocWramSlot_B` は `MI_AllocWramSlot( MI_WRAM_B, ... )` の define です。
`MI_AllocWramSlot_C` は `MI_AllocWramSlot( MI_WRAM_C, ... )` の define です。

`MI_AllocWram*()` によって確保される領域は、

・その時点で使用されていない
・指定のプロセッサに予約されているか、どこからも予約されていない
・指定のサイズ分、連続領域を確保することが出来る

を満たしている中で、下位アドレス側から確保されます。

`MI_AllocWramSlot*()` の場合は、確保する場所を指定することが出来ます。ただしその領域が取得条件を満たさなければ、たとえそれ以外で確保できる場所があっても失敗となります。

(例) 以下のように WRAM-C が予約されている場合を考えます。但しまだどの領域も確保はされていないとします。

どこもまだ確保していない場合、
`MI_AllocWram_C( MI_WRAM_SIZE_64KB, MI_WRAM_ARM7 )`
→ slot2 と slot3 を確保します。返り値は 0x03950000 です。

どこもまだ確保していない場合、
`MI_AllocWram_C( MI_WRAM_SIZE_64KB, MI_WRAM_DSP )`
→ slot3 と slot4 を確保します。返り値は 0x03958000 です。

どこもまだ確保していない場合、
`MI_AllocWram_C( MI_WRAM_SIZE_96KB, MI_WRAM_ARM7 )`
→ 確保できません。返り値は `MI_WRAM_ALLOC_FAIL` (=0) です。

## 参照

概要(ワークRAM)、MI関連の定数

## 履歴

2007/08/22 初版