nRF52로 BLE 디바이스 개발 (3) nRF52840의 RTT로 로그 출력

이 기사는 nRF52로 BLE 디바이스 개발 (2) OTA 업데이트 Buttonless DFU 및 Secure DFU의 뒤를 따릅니다.

소개



nRF52840-DK에 Feather nRF52840을 SWD 케이블로 연결하면, Feather의 UART는 DK의 디버그 마이크로컴퓨터에는 접속되지 않기 때문에, UART로의 로그취할 수 없습니다. SWD의 RTT(Real Time Terminal) 기능으로 로그를 출력해야 합니다.

SDK 설정



nRF52 SDK의 다양한 설정을 위해 각 프로젝트는 sdk_config.h를 포함하도록 설정되어 있습니다.


각 모듈의 설정값을 변경할 때는 이 안을 다시 쓰게 됩니다.

RTT 로그 설정



RTT 로그를 사용하려면 sdk_config.h의 다음 부분을 변경하십시오.

sdk_config.h
// ログ機能の有効化
#ifndef NRF_LOG_ENABLED
#define NRF_LOG_ENABLED 1
#endif

// RTT ログの有効化
#ifndef NRF_LOG_BACKEND_RTT_ENABLED
#define NRF_LOG_BACKEND_RTT_ENABLED 1
#endif

// UARTログの有効化
#ifndef NRF_LOG_BACKEND_UART_ENABLED
#define NRF_LOG_BACKEND_UART_ENABLED 1
#endif

여기의 설정값에 1을 정의하는 것으로, 각 기능이 유효하게 됩니다.

nRF52832에서는, 여기의 설정만으로 ses의 터미널 윈도우에 로그가 출력되게 됩니다.

nRF52840



하지만 nRF52840에서는 위의 설정만으로는 로그가 나오지 않습니다. 조금 전 SDK에서 버그처럼 보입니다.
#ifndef NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED
#define NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED 0
#endif

위의 정의를 0으로 하는 것으로, nRF52840에서도 로그가 나오게 됩니다.

로깅 기능 초기화



  이하의 코드로 로그 기능의 초기화를 실시합니다. 일반적으로 main.c의 시작 부분에서 호출됩니다.
    APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
    NRF_LOG_DEFAULT_BACKENDS_INIT();

로그 출력은 이하의 매크로로.
    NRF_LOG_INFO("Application started.");

nrf_log.h에 다양한 매크로가 정의되어 있습니다.
- NRF_LOG_XXXX() 시스템은 printf 함수로 작동합니다.
- NRF_LOG_HEXDUMP_XXXX() 시스템은 포인터 끝을 덤프합니다.
- NRF_LOG_FLOAT() 로 float의 고정 포맷 출력을 할 수 있습니다.

이상입니다.

좋은 웹페이지 즐겨찾기