ASMD21에 Arduino 를 올렸으니 간단히 성능 테스트를 해 봐야지...
GPIO 토글 속도로 수행 속도를 측정해 보았다. 다른 MCU의 Arduino 코드에서 성능 테스트와 비교해 보면 클럭대비 나쁘지는 않은것 같다.
아두이노에서 제공하는 GPIO제어 함수(digitalWrite)로 GPIO 토글 하면 2.3us 정도 측정이 된다.
#define PIN_OUT 27
#define Led1Off() PORT->Group[0].OUTCLR.reg = (1<<27)
#define Led1On() PORT->Group[0].OUTSET.reg = (1<<27)
void setup() {
PORT->Group[0].DIRSET.reg = (1 << 27);
PORT->Group[0].OUTSET.reg = (1 << 27);
}
void loop() {
delay(1);
digitalWrite(PIN_OUT, 1);
digitalWrite(PIN_OUT, 0);
}
좀더 속도를 올리기 위해서 SAMD21의 GPIO 레지스터 직접 제어로 GPIO토글 하면 84ns 정도 측정이 된다.
AtmelStudio 에서 속도 테스트 한 경우와 비교하면 비슷하게 나오는것 같다.
main 루프 수행하는데 걸리는 시간은 500ns(1.6Mhz) 정도 소요 되는 것 같다.
void loop()
{
Led1On();
Led1Off();
}
참고로 아두이노 에서 loop() 함수가 호출되는 구조를 보면 아래와 같이 조금 느릴 수 밖에 없는 구조 인것 같다.
int main( void )
{
init();
__libc_init_array();
initVariant();
delay(1);
#if defined(USBCON)
USBDevice.init();
USBDevice.attach();
#endif
setup();
for (;;)
{
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
반응형