성능 측정
TouchGFX Core는 성능을 측정하는 데 사용할 수 있는 몇 가지 신호를 노출합니다. 사용자는 이러한 신호가 내부적으로 트리거될 때 애플리케이션을 계측하여 개별 GPIO를 트리거할 수 있기 때문에 "렌더링 시간" 및 기타 유용한 신호를 시각화하는 것이 가능합니다. 이 섹션에서는 CubeMX에서 GPIO를 구성하는 방법과 노출된 각 신호가 수행하는 작업에 대해 설명합니다.
Further reading
TouchGFX Core에서 노출되는 신호
TouchGFX Core 헤더 파일 GPIO.hpp
내에서 다음과 같은 신호들이 정의되어 있습니다.
신호 | 표현 |
---|---|
VSYNC_FREQ | TouchGFX 애플리케이션은 LTDC, 외부 주변 장치 또는 하드웨어 타이머에서 발생한 인터럽트 같이 내부 또는 외부 이벤트에 의해 구동됩니다. 렌더링을 마친 TouchGFX Engine은 VSYNC 신호를 기다립니다. TouchGFX가 다음 프레임의 렌더링을 시작할 수 있도록 디스플레이 업데이트가 완료되었음을 나타냅니다. |
RENDER_TIME | 프레임이 TouchGFX로 전송된 시점부터 렌더링 단계가 끝나는 시점까지 소요되는 시간입니다. |
FRAME_RATE | 사용자 애플리케이션의 프레임 속도입니다. 프레임이 업데이트되면 신호가 토글됩니다. 렌더링 시간이 디스플레이에서 정의한 최대 렌더링 시간을 초과하면 프레임 속도가 저하됩니다. |
MCU_ACTIVE | 이 신호는 TouchGFX가 MCU를 사용할 때마다 높아집니다. MCU는 프레임 버퍼가 전송될 때, 그리고 TouchGFX가 유휴 상태에 있지 않고 작업을 수행할 때 활성화됩니다. |
STM32CubeMX GPIO 구성
STM32CubeMX를 사용해 GPIO 출력 핀을 손쉽게 구성할 수 있습니다. 각 핀에 사용자 레이블을 지정하면 TouchGFXGPIO.cpp
의 TouchGFX Generator에서 생성된 코드가 TouchGFX Core에서 내부적으로 신호가 수신될 때 토글해야 할 핀을 파악할 수 있습니다.
TouchGFXGPIO 클래스
TouchGFX Generator는 TouchGFXGPIO.cpp
파일의 GPIO 클래스를 위한 함수를 생성합니다. TouchGFX Core는 TouchGFXGPIO
클래스에서 함수를 호출한 다음, STM32CubeMX의 사용자 구성에 따라 핀을 토글합니다. GPIO::set
이 아래 스니펫에 표시됩니다.
TouchGFXGPIO.cpp
void GPIO::set(GPIO_ID id)
{
switch (id)
{
case GPIO::VSYNC_FREQ:
#if defined(VSYNC_FREQ_GPIO_Port) && defined(VSYNC_FREQ_Pin)
HAL_GPIO_WritePin(VSYNC_FREQ_GPIO_Port, VSYNC_FREQ_Pin, GPIO_PIN_SET);
#endif
break;
case GPIO::RENDER_TIME:
#if defined(RENDER_TIME_GPIO_Port) && defined(RENDER_TIME_Pin)
HAL_GPIO_WritePin(RENDER_TIME_GPIO_Port, RENDER_TIME_Pin, GPIO_PIN_SET);
#endif
break;
case GPIO::FRAME_RATE:
#if defined(FRAME_RATE_GPIO_Port) && defined(FRAME_RATE_Pin)
HAL_GPIO_WritePin(FRAME_RATE_GPIO_Port, FRAME_RATE_Pin, GPIO_PIN_SET);
#endif
break;
case GPIO::MCU_ACTIVE:
#if defined(MCU_ACTIVE_GPIO_Port) && defined(MCU_ACTIVE_Pin)
HAL_GPIO_WritePin(MCU_ACTIVE_GPIO_Port, MCU_ACTIVE_Pin, GPIO_PIN_SET);
#endif
break;
}
}
핀에 사용자 레이블 VSYNC_FREQ
이 지정되어 있는 경우, CubeMX는 포트 및 핀과 일치하는 기호를 자동으로 생성합니다(예: VSYNC_FREQ_GPIO_Port
, VSYNC_FREQ_Pin
). 구성된 신호를 측정하려면 오실로스코프 또는 로직 분석기를 사용하십시오. 아래 이미지는 4개 신호 각각을 표시하는 로직 분석기를 보여줍니다. 애플리케이션은 애니메이션화된 이미지 UI 예제와 함께 STM32F746G-DISCO에서 실행됩니다. 이 애플리케이션에 대한 VSYNC
신호가 LTDC에서 16ms마다 생성됩니다.