

#include <nitro/os/common/systemCall.h>
#define SVC_CpuClear( data, destp, size, bit );
#define SVC_CpuClearArray( data, destp, bit );
#define SVC_CpuClearFast( data, destp, size );
#define SVC_CpuClearArrayFast( data, destp );
(これらはマクロです)
| data | クリアデータ |
| destp | デスティネーションアドレス |
| size | 転送バイト数 |
| bit | 転送ビット幅(16 または 32) |
なし。
システムコールを用いてCPUでメモリクリアを行います。
MI_CpuClear*() は0でメモリを埋める関数ですが、SVC_CpuClear*() は指定の値でメモリを埋める関数です。
SVC_CpuClear*() はマクロなので、destp はポインタであれば型は制限されません。size は u32 です。bit は 16 か 32 の即値のみが指定できます。data はクリアデータ(メモリを埋めるデータ)で、bit が 16 の場合 u16 の値を、bit が 32の場合 u32 の値を指定してください。
MI_CpuClear*() や MI_CpuFill*() との動作上の違いは、SVC_CpuClear*() はシステムROM上で動作するため、キャッシュやTCMで動作する場合の半分の周波数で動作するという点です。しかしキャッシュが有効である場合はループ部分での差はないのでSVC関数の呼び出しのオーバーヘッドの発生が差異となってきます。また引数の指定の仕方が異なり、メモリを埋める値の指定の仕方も違うのは前述の通りです。どちらの関数でも記述が出来る場合、特に理由がなければ SVC_CpuClear*() より MI_CpuClear*() や MI_CpuFill*() を用いるのがよいでしょう。
SVC_Clear() はdata で示されるデータを destp で示されるアドレス以下 size バイトに書き込みます。 destp は 転送ビットが16の場合は2バイト境界に、32の場合は4バイト境界に合わせる必要があります。
SVC_CpuClearArray() は、sizeof( destp ) を転送サイズとする SVC_CpuClear()です。つまり SVC_CpuClear( data, destp, sizeof(destp), bit ) と同じです。
SVC_CpuClearFast() は data で示されるデータを destp で示されるアドレス以下 size バイトに高速に書き込みます。書き込みサイズは4の倍数とする必要があります。32バイト単位で高速に行い、端数は4バイト単位で行います。destp は 4バイト境界に合わせる必要があります。
SVC_CpuClearArrayFast() は sizeof( destp )を転送サイズとする SVC_CpuClearFast() です。つまり SVC_CpuClearFast( data ,destp, sizeof(destp) ) と同じです。
システムコールを呼んでいます。
MI_CpuClear*, MI_CpuFill*, MI_DmaClear*, SVC_CpuCopy*
2004/07/20 SVC_CpuClearFast() の転送サイズ条件を32バイトの倍数から4の倍数に変更
2004/03/29 システムコールを用いるということを明記
2004/01/18 初版