メモリ

メモリ属性値

SOLID_MEM_ATTR_READONLY
SOLID_MEM_ATTR_EXECUTABLE
SOLID_MEM_ATTR_CACHEABLE
SOLID_MEM_ATTR_BUFFERABLE
SOLID_MEM_ATTR_CODE
SOLID_MEM_ATTR_RODATA
SOLID_MEM_ATTR_DATA
SOLID_MEM_ATTR_IO
SOLID_MEM_ATTR_TEST

定数

名前 説明
SOLID_MEM_ATTR_READONLY 1 書き込み不可
SOLID_MEM_ATTR_EXECUTABLE 2 実行可能
SOLID_MEM_ATTR_CACHEABLE 4 キャッシュ可
SOLID_MEM_ATTR_BUFFERABLE 8 バッファ可
SOLID_MEM_ATTR_CODE   コード領域の属性: 書き込み不可、実行可能、キャッシュ可、バッファ可
SOLID_MEM_ATTR_RODATA   ROデータ領域の属性: 書き込み不可、キャッシュ可、バッファ可
SOLID_MEM_ATTR_DATA   通常データ領域の属性: キャッシュ可、バッファ可
SOLID_MEM_ATTR_IO   IO領域の属性: バッファ可
SOLID_MEM_ATTR_TEST 0 strongly ordered (主にテスト用)

メモリ空間

SOLID_RAM
SOLID_IO
SOLID_CORE
SOLID_RESERVE

定数

名前 説明
SOLID_RAM 0 通常RAM
SOLID_IO 1 IO空間
SOLID_CORE 2 コアサービス用
SOLID_RESERVE 3 領域予約用

SOLID_MEM_Alloc

int SOLID_MEM_Alloc(SOLID_ADDRESS VA, size_t size)

論理アドレスにメモリを確保します。

指定された範囲内に既にメモリが確保されている場合はエラーが返ります。

パラメータ:
  • VA – 確保する領域の先頭アドレス
  • size – 確保する領域のサイズ(byte)
戻り値:

SOLID_MEM_AllocFlat

int SOLID_MEM_AllocFlat(SOLID_ADDRESS VA, size_t size)

論理アドレスに物理アドレス的に連続なメモリを確保します。

指定された範囲内に既にメモリが確保されている場合はエラーが返ります。

パラメータ:
  • VA – 確保する領域の先頭アドレス
  • size – 確保する領域のサイズ(byte)
戻り値:

SOLID_MEM_IsFlat

int SOLID_MEM_IsFlat(SOLID_ADDRESS VA, size_t size)

指定した論理アドレス範囲が物理アドレス的に連続かどうかを問い合わせます

パラメータ:
  • VA – 確認する領域の先頭アドレス
  • size – 確認する領域のサイズ(byte)
戻り値:

  • 0: 物理メモリは不連続である
  • 1: 物理メモリは連続である
  • それ以外: エラー

SOLID_MEM_Realloc

int SOLID_MEM_Realloc(SOLID_ADDRESS VA, size_t size)

論理アドレスにメモリを確保します。

既に確保されている場合、確保されていない領域だけを確保します。

パラメータ:
  • VA – 確保する領域の先頭アドレス
  • size – 確保する領域のサイズ(byte)
戻り値:

SOLID_MEM_Free

int SOLID_MEM_Free(SOLID_ADDRESS VA, size_t size)

指定された論理アドレスを解放します。

パラメータ:
  • VA – 解放する領域の先頭アドレス
  • size – 解放する領域のサイズ(byte)
戻り値:

SOLID_MEM_Map

int SOLID_MEM_Map(SOLID_ADDRESS VA, size_t size, SOLID_PHYADDRESS PA)

論理アドレスに物理アドレスをマップします。

既にそのエリアに物理アドレスがマップされていた場合、新しいものに上書きされます。

パラメータ:
  • VA – マップする論理アドレス領域の先頭アドレス
  • size – マップする領域のサイズ(byte)
  • PA – マップされる物理アドレス領域の先頭アドレス
戻り値:

SOLID_MEM_Unmap

int SOLID_MEM_Unmap(SOLID_ADDRESS VA, size_t size)

論理アドレスを無効状態にします。

パラメータ:
  • VA – 無効にする論理アドレス領域の先頭アドレス
  • size – 無効にする領域のサイズ(byte)
戻り値:

SOLID_MEM_IsValid

int SOLID_MEM_IsValid(SOLID_ADDRESS VA, size_t size)

指定した論理アドレス範囲がアクセス可能かを問い合わせます。

アクセス可能かどうかを確認するだけのため、書き込み可/不可や実行可能領域かどうかは判定されません。

パラメータ:
  • VA – チェックする領域の先頭アドレス
  • size – チェックする領域のサイズ(byte)
戻り値:

  • 1: 指定された範囲はアクセス可能
  • 0: アクセス不可の領域が存在

SOLID_MEM_VA2PA

int SOLID_MEM_VA2PA(SOLID_ADDRESS VA, SOLID_ADDRESS *PA)

論理アドレスから物理アドレスを確定します。

物理アドレスが割り当てられていない場合、SOLID_ERR_MACV が返ります。

パラメータ:
  • VA – 論理アドレス
  • PA – 物理アドレス
戻り値:

SOLID_MEM_GetAttr

int SOLID_MEM_GetAttr(SOLID_ADDRESS VA, int *attr)

指定された論理アドレスの属性を取得します。

パラメータ:
戻り値:

SOLID_MEM_SetAttr

int SOLID_MEM_SetAttr(SOLID_ADDRESS VA, size_t size, int attr)

指定された論理アドレスの範囲の属性を変更します

パラメータ:
戻り値:

SOLID_MEM_GetAddress

int SOLID_MEM_GetAddress(const char *areaname, SOLID_ADDRESS *VA, size_t *size)

領域名からアドレスを取得します

パラメータ:
  • areaname – 領域名(文字列,NUL終端)
  • VA – 領域の先頭アドレス
  • size – 領域のサイズ(byte)
戻り値:

SOLID_MEM_GetAreaName

int SOLID_MEM_GetAreaName(SOLID_ADDRESS VA, const char **pAreaname)

アドレスから領域名を取得します

パラメータ:
  • VA – 領域に含まれるアドレス
  • pAreaname – 領域名へのポインタ
戻り値:

SOLID_MEM_CACHE_InvalidateCode

void SOLID_MEM_CACHE_InvalidateCode(SOLID_ADDRESS VA, size_t size)

指定された領域のコードキャッシュを破棄します

パラメータ:
  • VA – 領域の先頭アドレス
  • size – 領域のサイズ(byte)

SOLID_MEM_CACHE_Invalidate

void SOLID_MEM_CACHE_Invalidate(SOLID_ADDRESS VA, size_t size)

データキャッシュを破棄します

一定サイズ(32K)以上の範囲を指定した場合、データキャッシュ全体を書き戻して破棄する処理に変更されます

パラメータ:
  • VA – 領域の先頭アドレス
  • size – 領域のサイズ(byte)

SOLID_MEM_CACHE_Clean

void SOLID_MEM_CACHE_Clean(SOLID_ADDRESS VA, size_t size)

データキャッシュを書き戻します

一定サイズ(32K)以上の範囲を指定した場合、データキャッシュ全体を書き戻す処理に変更されます

パラメータ:
  • VA – 領域の先頭アドレス
  • size – 領域のサイズ(byte)

SOLID_MEM_CACHE_Flush

void SOLID_MEM_CACHE_Flush(SOLID_ADDRESS VA, size_t size)

データキャッシュを書き戻してから破棄します

一定サイズ(32K)以上の範囲を指定した場合、データキャッシュ全体を書き戻して破棄する処理に変更されます

パラメータ:
  • VA – 領域の先頭アドレス
  • size – 領域のサイズ(byte)

SOLID_MEM_AllocIO

int SOLID_MEM_AllocIO(SOLID_PHYADDRESS PA, size_t size, SOLID_ADDRESS *VA)

IO割り当て空間にIOを割り付けます

パラメータ:
  • PA – 割り付けるIOの物理アドレス
  • size – 割り付けるIOの範囲(byte)
  • VA – 割り付けた領域の先頭アドレス
戻り値:

SOLID_MEM_FreeIO

int SOLID_MEM_FreeIO(SOLID_ADDRESS VA, size_t size)

IO割り当て空間のIOを解放する

パラメータ:
  • VA – 解放するIOの先頭アドレス
  • size – 解放するIOのサイズ(byte)
戻り値:

SOLID_MEM_CheckIO

int SOLID_MEM_CheckIO(SOLID_PHYADDRESS PA, SOLID_ADDRESS *VA, size_t *size)

IO割り当てがされているかを問い合わせる

パラメータ:
  • PA – 問い合わせるIOの物理アドレス
  • VA – 割り当てられた領域の先頭アドレス
  • size – 割り当てられたIOの範囲(byte)
戻り値:

SOLID_MEM_CONF

typedef struct _SOLID_MEM_CONF_ SOLID_MEM_CONF

説明

物理/論理メモリ領域設定用構造体

定義

typedef struct _SOLID_MEM_CONF_ {
    SOLID_ADDRESS paddr;
    size_t        size;
    unsigned long attr;
    const char*   name;
    SOLID_ADDRESS vaddr;
} SOLID_MEM_CONF;

メンバー

paddr
使用する領域の物理アドレス
size
使用するメモリ領域のサイズ
attr

属性:

SOLID_RAM:通常RAM
SOLID_IO:IO空間
SOLID_CORE:コアサービス用
SOLID_RESERVE:領域予約用
name
領域を識別する文字列(『0’終端)
vaddr
マッピングする論理アドレス

IMPL_MEM_GetConfig

void IMPL_MEM_GetConfig(SOLID_MEM_CONF **pp_list, int *p_len)

メモリ設定リストを取得する。

この関数で取得された論理アドレスの設定はSOLIDで自動的に割り付けられます。

メモリマップデザイナを使用している場合、この実装を変更する必要はありません。

パラメータ:
  • pp_list – メモリ設定
  • p_len – メモリ設定の個数