본문으로 바로가기

[nRF52] ble_app_hids_keyboard 예제에 wdt 추가하기

category Nordic_nRF52 2022. 4. 20. 16:48

0>  ble_peripheral 안의 ble_app_hids_keyboard  예제에
     watchdog 사용을 위해 component 를 추가해 봤습니다.

     WDT 적용을 위해  3가지 부분을 수정해합니다.

    (xxxx.emProject  , sdk_config.h , 소스코드(main.c))

 

1> .emProject 에 nrfx_wdt.c 추가하기

    <folder Name="nRF_Drivers">
      ~~~~ 중략 ~~~~
      <file file_name="../../../../../../modules/nrfx/drivers/src/nrfx_wdt.c" />
    </folder>

c_user_include_directories 는 기본적으로 추가가 되어 있어서 추가사항에 빠져 있으나 이부분도 확인후 없으면

추가해야 합니다.

 

nrf_drv_wdt.h 파일 위치 검색
$ find ../../../ -name nrf_drv_wdt.h
../../../integration/nrfx/legacy/nrf_drv_wdt.h

>> .emProject 안에 다음내용 추가되어 있는지 체킹
c_user_include_directories=" ~~~중략 ~~~~ ;../../../../../../integration/nrfx/legacy;"

 

 

2> sdk_config.h 파일 수정사항

#define WDT_ENABLED 1

 

3> main.c 수정사항 

   : WDT 초기화 및 WDT expire 안되게 주기적으로 nrf_drv_wdt_channel_feed() 함수 호출하기

    app_timer 를 한개 만들어서 저는 호출했습니다.

    default WDT expire 시간은 2초입니다. (WDT_CONFIG_RELOAD_VALUE 값 참조)

#include "nrf_drv_wdt.h"


void wdt_event_handler(void)
{
    ~~~ 중략 ~~~
}

int main(void)
{
    ~~~ 중략 ~~~
    //Configure WDT.
    nrf_drv_wdt_config_t config = NRF_DRV_WDT_DEAFULT_CONFIG;
    iRet = nrf_drv_wdt_init(&config, wdt_event_handler);
    iRet = nrf_drv_wdt_channel_alloc(&m_channel_id);
    nrf_drv_wdt_enable();
    ~~~ 중략 ~~~
}

// 아래의 코드를 주기적으로 호출해 줘야 watchdog 리셋이 걸리지 않습니다.
nrf_drv_wdt_channel_feed(m_channel_id);

 

 

< 기타>

  A.  sdk_config.h 파일 미수정시 에러로그

1> ..../arm-none-eabi/bin/ld: Output/Release/Obj/xxxx_pca10040_s132/
     main.o:in function `nrf_drv_wdt_init':
1> ....\ble_app_hids_keyboard\pca10040\s132\ses/../../../../../../integration/nrfx/legacy/
     nrf_drv_wdt.h:102: undefined reference to `nrfx_wdt_init'
1> ..../arm-none-eabi/bin/ld: Output/Release/Obj/xxxx_pca10040_s132/
     main.o: in function `main':
1> ....\ble_app_hids_keyboard/main.c:4189: 
    undefined reference to `nrfx_wdt_channel_alloc'
1> ..../arm-none-eabi/bin/ld:  ....\ble_app_hids_keyboard/
     main.c:4191: undefined reference to `nrfx_wdt_enable'
Build failed

 

  B> .emProject 미수정시 에러로그 

    ▶ 위 sdk_config.h 파일 에러와 동일합니다.

 

 

 

  

 

 

그럼 수고하세요.

반응형