

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