ESP32-C3는 기존 ESP32 시리즈(240Mhz)와 달리 160Mhz 32-bit RISC-V core 를 탑제하고 있다. 성능보다는 가격과 소비전력에 장점을 두고 있지 않을까..
아무튼 기존 ESP32 Arduino 코드의 성능과 비교해서 ESP32-C3 의 성능 테스트를 해 두면 좋을것 같다.
우선 CPU Frequency를 160Mhz 로 설정해서 GPIO 코글 테스트를 해 보자

Arduino에서 제공하는 GPIO 제어 함수로 테스트 해 보면
#define LED_PIN1 3
void setup() {
pinMode(LED_PIN1, OUTPUT);
}
void loop() {
digitalWrite(3, 0);
digitalWrite(3, 1);
}
2.3us로 상당히 느리다.

ESP32-C3 GPIO 제어 레지스터에 직접 출력하면 120ns 정도로 출력된다. 레지스터 제어 구조는 ESP32와 조금 다른것 같다. RISC-V 코어라 그런듯..
#define LED_PIN1 3
void setup() {
pinMode(LED_PIN1, OUTPUT);
}
void loop() {
//digitalWrite(3, 0);
//digitalWrite(3, 1);
GPIO.out_w1ts.out_w1ts = (1 << LED_PIN1);
GPIO.out_w1tc.out_w1tc = (1 << LED_PIN1);
}
ESP32의 60ns보다 두배 정도 느리고 ESP8266의 72ns 보다 조금 빠를 수준인것 같다.

루프 수행 주기는 2us로 측정이 된다. 통일한 코드로 ESP-IDF SDK 환경에서 GPIO 테스트 결과와 비교해 보면 120ns로 5배 정도 느려진다.

시리얼 포트를 추가 하면 6.7us로 더 느려진다.
#define LED_PIN1 3
void setup() {
pinMode(LED_PIN1, OUTPUT);
Serial.begin(115200);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("ESP32-C3 GPIO Test");
}
void loop() {
GPIO.out_w1ts.out_w1ts = (1 << LED_PIN1);
GPIO.out_w1tc.out_w1tc = (1 << LED_PIN1);
}
GPIO 수행 속도가 MCU전체 성능은 아니지만 조금은 아쉬운 성능인것 같다. 좀더 자세한 성능 지표는 ESP32-C3 Dhrystone, Whetstone, IIR Benchmark 성능스트 참고

반응형