Raspberry Pi Pico2(RP2350) 개발 환경 구성은 다양한 방법이 있지만 이번에는 Raspberry Pi Pico2 C/C++ SDK를 이용하여 테스트 해 보자. Arduino IDE 환경은 다양하고 편리한 라이브러리를 사용할 수 있는 장점이 있지만 아무래도 개발 속도나 수행 속도가 느린 단점이 존재 한다.
그리고 Wiznet에서 제공하는 W6100 라이브러리도 SDK 환경으로 구성되어 있기 때문에 SDK 개발환경을 세팅해 두는 것이 좋을것 같다.
우선 VScode의 확장 모듈 Raspberry Pi Pico를 설치 하거나 최신으로 업데이트 한다.
설치가 완료 되면 새로운 프로젝트를 Pico2로 생성하면 간단히 기본 코드를 생성해 준다.
Raspberry Pi Pico C/C++ SDK 설치후 문제 없이 생성되었는지 컴파일 해보면 정상 컴파일 되는것을 확인 할 수 있다.
Raspberry Pi Pico C/C++ SDK 개발환경에서 GPIO토글 속도로 RP2350의 기본적인 성능 테스트를 해보자.
#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/uart.h"
int main()
{
stdio_init_all();
gpio_init(25);
gpio_set_dir(25, GPIO_OUT);
gpio_put(25, 0);
gpio_init(0);
gpio_set_dir(0, GPIO_OUT);
while (true) {
//160ns
gpio_put(0, 1);
gpio_put(0, 0);
}
}
우선 SDK에서 제공하는 GPIO 제어 함수 gpio_put() 함수로 테스트 해보면 160ns로 측정된다.
비트 제어 함수 함수로 테스트 해보면 64ns로 측정된다.
while (true) {
//160ns
//gpio_put(0, 1);
//gpio_put(0, 0);
//64ns
gpioc_bit_out_put(0, 1);
gpioc_bit_out_put(0, 0);
}
레지스터 직접 제어로 테스트 해보자
while (true) {
//160ns
//gpio_put(0, 1);
//gpio_put(0, 0);
//60ns
//gpioc_bit_out_put(0, 1);
//gpioc_bit_out_put(0, 0);
//20ns
sio_hw->gpio_set = 0x01;
sio_hw->gpio_clr = 0x01;
}
20ns로 측정이 되지만 150Mhz CPU 성능이 아닌것 같다.
옵티마이즈 설정을 최대로 해보자
# C 컴파일러 최적화 옵션 설정
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2")
- -O0 : 최적화 없음 (디버깅 시 유용)
- -O1 : 기본적인 최적화
- -O2 : 더 많은 최적화 (일반적으로 사용)
- -O3 : 고급 최적화 (성능 중시)
- -Os : 코드 크기 최적화
- -Ofast : 성능 중심의 최적화 (정확성에 영향을 줄 수 있음)
옵티마이즈 옵션 설정 후 6.4ns 로 측정된다. RP2040 C++ SDK 환경에서 GPIO 성능 측정 결과 8.5ns 와 비교하면 클럭 속도 만큼 빨라진것 같다. (RP2350의 전체적인 CPU성는은 벤치마크 테스트 결과를 참고.)
RP2350 Arduino IDE에서 GPIO 테스트 결과 와 비교해 보면 On/Off 하는 시간은 6ns대로 비슷하지만 메인 루프를 돌고 다음 명령을 수행 하는 시간이 SDK에서는 20ns로 짧은데 Arduino에서는 150ns 상당히 느려진다.