본문으로 바로가기

[nRF52] NRF_ERROR_NO_MEM 에러 디버깅

category Nordic_nRF52 2022. 5. 4. 20:49

: ble_peripheral ==> keyboard 프로젝트에 Central 기능을 추가중 아래와 같은 에러 발생시 디버깅 해봤습니다.

 

>> Debug Terminal <<
nrf_sdh_ble: Insufficient RAM allocated for the SoftDevice.
nrf_sdh_ble: Change the RAM start location from 0x20002250 to 0x200028C8.
nrf_sdh_ble: Maximum RAM size for application is 0xD738.
nrf_sdh_ble: sd_ble_enable() returned NRF_ERROR_NO_MEM.
app: Fatal error

1> 로그를 보니 RAM_START 위치를 0x200028C8 로 수정 하라고 적혀 있네요.

  RAM_START 는  .emProject 파일의 linker_section_placement_macros 에 적혀 있네요.

  아래처럼 직접 .emProjet 를 수정하면 끝

linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;
           RAM_PH_START=0x20000000;RAM_PH_SIZE=0x10000;FLASH_START=0x26000;
           FLASH_SIZE=0x5a000;RAM_START=0x200028C8;RAM_SIZE=0xddb0"

 

>> .emProject 직접 수정하지 않고 IDE 사용해 수정할려면 2번 항목 참조

 

2> IDE 통해서 수정하기

 2-1> 프로젝트 에서 오른쪽 마우스 --> Options... 선택

 

 2-2> 아래그림처럼 선택하기

   : Common --> Linker --> Section Placement Macros --> "..."

 

 

 

 2-3> RAM_START  값 0x200028C8 로 변경하기

 

 이후 정상적으로 실행이 되네요.

 

< 기타 >

A>  ble_app_hids_keyboard 프로젝트에 Nordic UART Service (NUS) 를 추가시  동일한 에러 발생

  ▶  ble_nus_init() 함수에서  발생을 합니다.

     sdk_config.h 파일 수정 및 로그 는 아래 내용 참고하세요.

~~ 중략 ~~
#define BLE_NUS_ENABLED 1
<error> app: ERROR 4 [NRF_ERROR_NO_MEM] at D:\Project\SES\nRF5SDK_1702\nRF5_SDK\examples\ble_peripheral\ble_app_hids_keyboard\main.c:796
PC at: 0x000326AB
<error> app: End of error report

  ▶   sdk_config.h 파일에 한군데 더 수정

~~ 중략 ~~
#define NRF_SDH_BLE_VS_UUID_COUNT 1

 

 ▶   NRF 로그에 warning 이 추가되서 나오네요.

<warning> nrf_sdh_ble: Insufficient RAM allocated for the SoftDevice.
<warning> nrf_sdh_ble: Change the RAM start location from 0x20002250 to 0x20002260.
<warning> nrf_sdh_ble: Maximum RAM size for application is 0xDDA0.
<error> nrf_sdh_ble: sd_ble_enable() returned NRF_ERROR_NO_MEM.
<error> app: ERROR 4 [NRF_ERROR_NO_MEM] at D:\Project\SES\nRF5SDK_1702\nRF5_SDK\examples\ble_peripheral\ble_app_hids_keyboard\main.c:1437
PC at: 0x000331CB
<error> app: End of error report

 

  ==> 이후 과정은 위와 동일합니다.

     혹시 적용이 안되면 SES 종료 후  다시 실행해주세요

 

 

참고하세요.

반응형