SVC_CpuCopy*

構文

#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 初版