2016年1月3日日曜日

STM32F1でメモリ間コピー



ちょっと思う所ありメモリ間コピーを試してみた。上から 1)memcpy関数 2)forでコピー 3)DMAでM2M 4)DMAでM2M(2本並列で動作) という感じ。
転送サイズは2KiB。

1はそのままその通り、string.hのmemcpy関数を使用した。だいたい25usくらい。
2は32bitポインタ間で512回forコピー。67usくらい。
3はDMAでM2M。優先度はVeryHigh、チャンネルは2-5。8usくらい。
4は3とほとんど同じ、ただし2-5で優先度はLow、そして2-4のVeryHighを同時に走らせる。これはDMAが競合した状態でどうなるかを見ている。9usくらいかな。

感想:memcpy早い。どんな最適化してるんだよ。

とりあえず、DMAのM2Mを使うのが最速っぽい。条件によってはコアからは干渉が不要で、初期化の数usec以外はほっといても勝手に転送してくれたりもする。DMAの初期化を含めても2KiB程度なら10usec未満で完了するらしい。

0 件のコメント:

コメントを投稿