LPCマイコンのコードのRAM実行

LPC-Link2をLPC4370ボードとして用い、コードを実行させてみると、なぜかLPCXpresso LPC1769と比べて10倍以上遅かった。LPC-Link2は Cortex-M4 @ 204MHz、LPCXpresso LPC1769は Cortex-M3 @ 120MHzである。ぜったいに何かおかしい。


調べてみると、どうやらLPC-Link2のLPC4370は、外部SPI-Flashのコードを実行しているようだった。RAMに展開して実行するには、LPCXpresso環境の場合、下記のようなマクロを関数定義に用いる。

#include <cr_section_macros.h>

__RAMFUNC(RAM) void hoge(void)
{
    ...
}



すると、380usecかかっていた処理が5.4usecに短縮した。2桁違う! LPCXpresso LPC1769と比べても倍以上速い。M4とM3では周波数以上に差があるということだろうか?


各種LPCマイコンでの処理時間を比較してみた。

ボード マイコン CPUコア クロック 処理時間
LPCXpresso LPC1115 LPC1115 Cotex-M0 50MHz 58usec
LPCXpresso LPC1769 LPC1769 Cotex-M3 120MHz 15usec
LPC-Link2 LPC4370 Cotex-M4 204MHz 5.4usec (RAM実行時)
LPC-Link2 LPC4370 Cotex-M4 204MHz 380usec (SPI Flash実行時)



写真


ちなみに、LPC-Link2をマイコンボードとして用いる場合は、LPC-Link2を2個用意し、片方をデバッガ、もう片方をターゲットとする。これはジャンパで設定できる。

ジャンパ デバッガ ターゲット
JP1 開放 (デバッガとして使用) 短絡 (ターゲットとして使用)
JP2 短絡 (ターゲットへの給電) 開放 (給電しない)