BLE Stackの初期化
iBeaconを発信するためにBLE Stackの初期化を行う。
Defineの追加
|  | #define APP_BLE_CONN_CFG_TAG    1
 | 
Externの追加
|  | extern uint32_t __app_ram_start__;
 | 
BLE Stackの初期化処理
|  | /**@brief Function for initializing the BLE stack.
 */
 void    ble_stack_init(void) {
     APP_ERROR_CHECK(nrf_sdh_enable_request());
     APP_ERROR_CHECK(nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &__app_ram_start__));
     APP_ERROR_CHECK(nrf_sdh_ble_enable(&__app_ram_start__));
 }
 | 
Build Optionの設定
Project ExplorerでProject選択後、OptionsボタンからOption画面を開く。その後、左上のdrop-down listでPrivate ConfigurationのCommonを選択し、以下のOptionを追加設定する
### Linker -> Linker Symbol Definitions
 |Symbol|
 |:--|
 |start_sdh_req_observers=sdh_req_observers$$Base|
 |__stop_sdh_req_observers=sdh_req_observers$$Limit|
 |__start_sdh_state_observers=sdh_state_observers$$Base|
 |__stop_sdh_state_observers=sdh_state_observers$$Limit|
 |__app_ram_start=app_ram_start$$Base|

Linker Scriptの編集
SEGGER_Flash.icfファイルを開き、以下の編集を行う
SEGGER_Flash.icf
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17 | /*** 省略 ***/
define block log_const_data   { section .log_const_data*   };
define block log_dynamic_data { section .log_dynamic_data* };
define block pwr_mgmt_data    { section .pwr_mgmt_data*    };
define block app_ram_start with size = 4 { }; //追加
define block sdh_req_observers   { section .sdh_req_observers* }; //追加
define block sdh_state_observers { section .sdh_state_observers* }; //追加
//
// Explicit initialization settings for sections
//
/*** 省略 ***/
place in RAM                             {                                          // Special sections
                                           section .non_init, section .non_init.*,  // No initialization section
                                           block tls,                               // Thread-local-storage block
                                           block app_ram_start //追加
                                         };
/*** 省略 ***/
 | 
main.c
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 | #include "app_error.h"
#include "bsp.h"
#include "nrf_pwr_mgmt.h"
#include "nrf_sdh.h"
#include "nrf_sdh_ble.h"
#define NRF_LOG_MODULE_NAME iBEACON_SAMPLE
#include "nrf_log.h"
NRF_LOG_MODULE_REGISTER();
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
#define LED1                    BSP_BOARD_LED_0
#define APP_BLE_CONN_CFG_TAG    1
extern uint32_t __app_ram_start__;
void    ble_stack_init(void) {
    APP_ERROR_CHECK(nrf_sdh_enable_request());
    APP_ERROR_CHECK(nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &__app_ram_start__));
    APP_ERROR_CHECK(nrf_sdh_ble_enable(&__app_ram_start__));
}
void    log_init(void) {
    APP_ERROR_CHECK(NRF_LOG_INIT(NULL));
    NRF_LOG_DEFAULT_BACKENDS_INIT();
}
int main(void) {
    log_init();
    NRF_LOG_INFO("iBEACON_SAMPLE");
    NRF_LOG_FLUSH();
    bsp_board_init(BSP_INIT_LEDS);
    APP_ERROR_CHECK(nrf_pwr_mgmt_init());
    ble_stack_init();
    bsp_board_led_on(LED1);
    while(true) {
        if(NRF_LOG_PROCESS() == false) {
            nrf_pwr_mgmt_run();
        }
    }
}
 |