├── .gitignore ├── Documentation └── Images │ ├── JLinkPromptNo.png │ └── JLinkPromptYes.png ├── JLINK_MONITOR.c ├── JLINK_MONITOR.h ├── JLINK_MONITOR_ISR_ARM.s ├── JLINK_MONITOR_ISR_SES.s ├── README.md ├── ble_app_blinky.eww ├── main.c └── pca10040 └── s132 ├── arm5_no_packs ├── JLinkLog.txt ├── JLinkSettings.ini ├── README.md ├── RTE │ ├── Device │ │ └── nRF52832_xxAA │ │ │ ├── arm_startup_nrf52.s │ │ │ ├── startup_config.h │ │ │ └── system_nrf52.c │ └── RTE_Components.h ├── _build │ ├── ExtDll.iex │ ├── app_button.crf │ ├── app_error.crf │ ├── app_error_weak.crf │ ├── app_scheduler.crf │ ├── app_timer.crf │ ├── app_util_platform.crf │ ├── arm_startup_nrf52.lst │ ├── ble_advdata.crf │ ├── ble_app_blinky_pca10040_s132_nrf52832_xxaa.dep │ ├── ble_conn_params.crf │ ├── ble_conn_state.crf │ ├── ble_lbs.crf │ ├── ble_srv_common.crf │ ├── boards.crf │ ├── hardfault_handler_keil.crf │ ├── hardfault_implementation.crf │ ├── jlink_monitor.crf │ ├── jlink_monitor_isr_arm.lst │ ├── main.crf │ ├── nrf52832_xxaa.build_log.htm │ ├── nrf52832_xxaa.htm │ ├── nrf52832_xxaa.lnp │ ├── nrf52832_xxaa.sct │ ├── nrf_assert.crf │ ├── nrf_atfifo.crf │ ├── nrf_balloc.crf │ ├── nrf_ble_gatt.crf │ ├── nrf_drv_clock.crf │ ├── nrf_drv_common.crf │ ├── nrf_drv_gpiote.crf │ ├── nrf_drv_uart.crf │ ├── nrf_fprintf.crf │ ├── nrf_fprintf_format.crf │ ├── nrf_log_backend_rtt.crf │ ├── nrf_log_backend_serial.crf │ ├── nrf_log_backend_uart.crf │ ├── nrf_log_default_backends.crf │ ├── nrf_log_frontend.crf │ ├── nrf_log_str_formatter.crf │ ├── nrf_memobj.crf │ ├── nrf_pwr_mgmt.crf │ ├── nrf_sdh.crf │ ├── nrf_sdh_ble.crf │ ├── nrf_sdh_soc.crf │ ├── nrf_section_iter.crf │ ├── nrf_strerror.crf │ ├── sdk_mapped_flags.crf │ ├── segger_rtt.crf │ ├── segger_rtt_printf.crf │ ├── segger_rtt_syscalls_keil.crf │ └── system_nrf52.crf ├── ble_app_blinky_pca10040_s132.uvguix.haho ├── ble_app_blinky_pca10040_s132.uvoptx └── ble_app_blinky_pca10040_s132.uvprojx ├── config └── sdk_config.h └── ses ├── Output ├── ble_app_blinky_pca10040_s132 Debug │ └── Obj │ │ ├── ble_app_blinky_pca10040_s132.ind │ │ └── ble_app_blinky_pca10040_s132.ld └── ble_app_blinky_pca10040_s132 Release │ └── Obj │ ├── SEGGER_RTT.asm │ ├── ble_app_blinky_pca10040_s132.ind │ └── ble_app_blinky_pca10040_s132.ld ├── README.md ├── ble_app_blinky_pca10040_s132.emProject ├── ble_app_blinky_pca10040_s132.emSession ├── ble_app_blinky_pca10040_s132_Debug.jlink ├── ble_app_blinky_pca10040_s132_Release.jlink └── flash_placement.xml /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Object files 5 | *.o 6 | *.ko 7 | *.obj 8 | *.elf 9 | 10 | # Linker output 11 | *.ilk 12 | *.map 13 | *.exp 14 | 15 | # Precompiled Headers 16 | *.gch 17 | *.pch 18 | 19 | # Libraries 20 | *.lib 21 | *.a 22 | *.la 23 | *.lo 24 | 25 | # Shared objects (inc. Windows DLLs) 26 | *.dll 27 | *.so 28 | *.so.* 29 | *.dylib 30 | 31 | # Executables 32 | *.exe 33 | *.out 34 | *.app 35 | *.i*86 36 | *.x86_64 37 | *.hex 38 | 39 | # Debug files 40 | *.dSYM/ 41 | *.su 42 | *.idb 43 | *.pdb 44 | 45 | # Kernel Module Compile Results 46 | *.mod* 47 | *.cmd 48 | .tmp_versions/ 49 | modules.order 50 | Module.symvers 51 | Mkfile.old 52 | dkms.conf 53 | -------------------------------------------------------------------------------- /Documentation/Images/JLinkPromptNo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/Documentation/Images/JLinkPromptNo.png -------------------------------------------------------------------------------- /Documentation/Images/JLinkPromptYes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/Documentation/Images/JLinkPromptYes.png -------------------------------------------------------------------------------- /JLINK_MONITOR.c: -------------------------------------------------------------------------------- 1 | /********************************************************************* 2 | * SEGGER Microcontroller GmbH & Co. KG * 3 | * The Embedded Experts * 4 | ********************************************************************** 5 | * * 6 | * (c) 1995 - 2015 SEGGER Microcontroller GmbH & Co. KG * 7 | * * 8 | * www.segger.com Support: support@segger.com * 9 | * * 10 | ********************************************************************** 11 | 12 | ---------------------------------------------------------------------- 13 | File : JLINK_MONITOR.c 14 | Purpose : Implementation of debug monitor for J-Link monitor mode debug on Cortex-M devices. 15 | -------- END-OF-HEADER --------------------------------------------- 16 | */ 17 | 18 | #include "JLINK_MONITOR.h" 19 | #include "app_timer.h" 20 | 21 | /********************************************************************* 22 | * 23 | * Configuration 24 | * 25 | ********************************************************************** 26 | */ 27 | 28 | /********************************************************************* 29 | * 30 | * Defines 31 | * 32 | ********************************************************************** 33 | */ 34 | 35 | /********************************************************************* 36 | * 37 | * Types 38 | * 39 | ********************************************************************** 40 | */ 41 | 42 | /********************************************************************* 43 | * 44 | * Static data 45 | * 46 | ********************************************************************** 47 | */ 48 | 49 | volatile int MAIN_MonCnt; // Incremented in JLINK_MONITOR_OnPoll() while CPU is in debug mode 50 | 51 | /********************************************************************* 52 | * 53 | * Local functions 54 | * 55 | ********************************************************************** 56 | */ 57 | 58 | /********************************************************************* 59 | * 60 | * Global functions 61 | * 62 | ********************************************************************** 63 | */ 64 | 65 | #if CONFIG_JLINK_MONITOR_ENABLED 66 | STATIC_ASSERT(APP_TIMER_KEEPS_RTC_ACTIVE); 67 | 68 | 69 | /********************************************************************* 70 | * 71 | * JLINK_MONITOR_OnExit() 72 | * 73 | * Function description 74 | * Called from DebugMon_Handler(), once per debug exit. 75 | * May perform some target specific operations to be done on debug mode exit. 76 | * 77 | * Notes 78 | * (1) Must not keep the CPU busy for more than 100 ms 79 | */ 80 | void JLINK_MONITOR_OnExit(void) { 81 | // 82 | // Add custom code here 83 | // 84 | app_timer_resume(); 85 | } 86 | 87 | /********************************************************************* 88 | * 89 | * JLINK_MONITOR_OnEnter() 90 | * 91 | * Function description 92 | * Called from DebugMon_Handler(), once per debug entry. 93 | * May perform some target specific operations to be done on debug mode entry 94 | * 95 | * Notes 96 | * (1) Must not keep the CPU busy for more than 100 ms 97 | */ 98 | void JLINK_MONITOR_OnEnter(void) { 99 | // 100 | // Add custom code here 101 | // 102 | app_timer_pause(); 103 | } 104 | 105 | /********************************************************************* 106 | * 107 | * JLINK_MONITOR_OnPoll() 108 | * 109 | * Function description 110 | * Called periodically from DebugMon_Handler(), to perform some actions that need to be performed periodically during debug mode. 111 | * 112 | * Notes 113 | * (1) Must not keep the CPU busy for more than 100 ms 114 | */ 115 | void JLINK_MONITOR_OnPoll(void) { 116 | // 117 | // Add custom code here 118 | // 119 | #if CONFIG_WATCHDOG_ENABLED 120 | nrf_drv_wdt_channel_feed(s_watchdog_channel); 121 | #endif 122 | 123 | MAIN_MonCnt++; 124 | // _Delay(500000); 125 | } 126 | #endif 127 | /****** End Of File *************************************************/ 128 | -------------------------------------------------------------------------------- /JLINK_MONITOR.h: -------------------------------------------------------------------------------- 1 | /********************************************************************* 2 | * SEGGER Microcontroller GmbH & Co. KG * 3 | * The Embedded Experts * 4 | ********************************************************************** 5 | * * 6 | * (c) 1995 - 2015 SEGGER Microcontroller GmbH & Co. KG * 7 | * * 8 | * www.segger.com Support: support@segger.com * 9 | * * 10 | ********************************************************************** 11 | 12 | ---------------------------------------------------------------------- 13 | File : JLINK_MONITOR.h 14 | Purpose : Header file of debug monitor for J-Link monitor mode debug on Cortex-M devices. 15 | -------- END-OF-HEADER --------------------------------------------- 16 | */ 17 | 18 | #ifndef JLINK_MONITOR_H 19 | #define JLINK_MONITOR_H 20 | 21 | void JLINK_MONITOR_OnExit (void); 22 | void JLINK_MONITOR_OnEnter (void); 23 | void JLINK_MONITOR_OnPoll (void); 24 | 25 | #endif 26 | 27 | /****** End Of File *************************************************/ 28 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Monitor Mode Debugging in Keil µVision5 and Segger Embedded Studio 2 | 3 | ## Introduction 4 | Monitor Mode Debugging enables you to halt and step through low priority code whilst letting high priority code execute as normal. With MMD you can debug your application while maintaining a BLE connection. 5 | 6 | Requirements: 7 | * nRF5_SDK16.0 8 | * nRF52DK (PCA10040) 9 | * Keil µVision5 or Segger Embedded Studio V3.30 10 | * nRF Connect (mobile or computer) 11 | 12 | 13 | ## What exactly is MMD? 14 | Monitor Mode Debugging is essentially an interrupt service routine that contains an infinite loop. The MMD ISR has an execution priority equeal to or higher than your application, but lower than the code you want to run unimpeded. When the CPU receives a halt command from the debugger, it will execute the MMD ISR instead of halting, preempting the application code. While the CPU is busy running the MMD ISR (infinite loop), code with higher execution priority (SoftDevice, drivers, etc) can preempt the MMD ISR, but lower execution priority code (main application, libraries, etc) cannot. 15 | 16 | When single stepping through code, a debugger will insert a breakpoint after each step. This means that MMD can also handle stepping through code of equal or lower priority without preempting higher priority calls. 17 | 18 | 19 | ## Okay that sounds great, but i'm still not convinced that this is useful for me 20 | 21 | I've made an example for Keil and SES based on the ble_app_blinky_s132 tutorial in SDK16.0. 22 | 23 | See the [Keil README](pca10040/s132/arm5_no_packs/README.md) and the [SES README](pca10040/s132/ses/README.md) for instructions. 24 | 25 | -------------------------------------------------------------------------------- /ble_app_blinky.eww: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $WS_DIR$\pca10040\s132\iar\ble_app_blinky_pca10040_s132.ewp 5 | 6 | $WS_DIR$\pca10056\s140\iar\ble_app_blinky_pca10056_s140.ewp 7 | 8 | $WS_DIR$\pca10040e\s112\iar\ble_app_blinky_pca10040e_s112.ewp 9 | 10 | -------------------------------------------------------------------------------- /main.c: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 - 2019, Nordic Semiconductor ASA 3 | * 4 | * All rights reserved. 5 | * 6 | * Redistribution and use in source and binary forms, with or without modification, 7 | * are permitted provided that the following conditions are met: 8 | * 9 | * 1. Redistributions of source code must retain the above copyright notice, this 10 | * list of conditions and the following disclaimer. 11 | * 12 | * 2. Redistributions in binary form, except as embedded into a Nordic 13 | * Semiconductor ASA integrated circuit in a product or a software update for 14 | * such product, must reproduce the above copyright notice, this list of 15 | * conditions and the following disclaimer in the documentation and/or other 16 | * materials provided with the distribution. 17 | * 18 | * 3. Neither the name of Nordic Semiconductor ASA nor the names of its 19 | * contributors may be used to endorse or promote products derived from this 20 | * software without specific prior written permission. 21 | * 22 | * 4. This software, with or without modification, must only be used with a 23 | * Nordic Semiconductor ASA integrated circuit. 24 | * 25 | * 5. Any software provided in binary form under this license must not be reverse 26 | * engineered, decompiled, modified and/or disassembled. 27 | * 28 | * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS 29 | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 30 | * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE 31 | * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE 32 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 33 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 34 | * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 35 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 36 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 37 | * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 38 | * 39 | */ 40 | /** 41 | * @brief Blinky Sample Application main file. 42 | * 43 | * This file contains the source code for a sample server application using the LED Button service. 44 | */ 45 | 46 | #include 47 | #include 48 | #include "nordic_common.h" 49 | #include "nrf.h" 50 | #include "app_error.h" 51 | #include "ble.h" 52 | #include "ble_err.h" 53 | #include "ble_hci.h" 54 | #include "ble_srv_common.h" 55 | #include "ble_advdata.h" 56 | #include "ble_conn_params.h" 57 | #include "nrf_sdh.h" 58 | #include "nrf_sdh_ble.h" 59 | #include "boards.h" 60 | #include "app_timer.h" 61 | #include "app_button.h" 62 | #include "ble_lbs.h" 63 | #include "nrf_ble_gatt.h" 64 | #include "nrf_ble_qwr.h" 65 | #include "nrf_pwr_mgmt.h" 66 | 67 | #include "nrf_log.h" 68 | #include "nrf_log_ctrl.h" 69 | #include "nrf_log_default_backends.h" 70 | 71 | 72 | #define ADVERTISING_LED BSP_BOARD_LED_0 /**< Is on when device is advertising. */ 73 | #define CONNECTED_LED BSP_BOARD_LED_1 /**< Is on when device has connected. */ 74 | #define LEDBUTTON_LED BSP_BOARD_LED_2 /**< LED to be toggled with the help of the LED Button Service. */ 75 | #define LEDBUTTON_BUTTON BSP_BUTTON_0 /**< Button that will trigger the notification event with the LED Button Service */ 76 | 77 | #define DEVICE_NAME "Nordic_Blinky" /**< Name of device. Will be included in the advertising data. */ 78 | 79 | #define APP_BLE_OBSERVER_PRIO 3 /**< Application's BLE observer priority. You shouldn't need to modify this value. */ 80 | #define APP_BLE_CONN_CFG_TAG 1 /**< A tag identifying the SoftDevice BLE configuration. */ 81 | 82 | #define APP_ADV_INTERVAL 64 /**< The advertising interval (in units of 0.625 ms; this value corresponds to 40 ms). */ 83 | #define APP_ADV_DURATION BLE_GAP_ADV_TIMEOUT_GENERAL_UNLIMITED /**< The advertising time-out (in units of seconds). When set to 0, we will never time out. */ 84 | 85 | 86 | #define MIN_CONN_INTERVAL MSEC_TO_UNITS(100, UNIT_1_25_MS) /**< Minimum acceptable connection interval (0.5 seconds). */ 87 | #define MAX_CONN_INTERVAL MSEC_TO_UNITS(200, UNIT_1_25_MS) /**< Maximum acceptable connection interval (1 second). */ 88 | #define SLAVE_LATENCY 0 /**< Slave latency. */ 89 | #define CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS) /**< Connection supervisory time-out (4 seconds). */ 90 | 91 | #define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(20000) /**< Time from initiating event (connect or start of notification) to first time sd_ble_gap_conn_param_update is called (15 seconds). */ 92 | #define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000) /**< Time between each call to sd_ble_gap_conn_param_update after the first call (5 seconds). */ 93 | #define MAX_CONN_PARAMS_UPDATE_COUNT 3 /**< Number of attempts before giving up the connection parameter negotiation. */ 94 | 95 | #define BUTTON_DETECTION_DELAY APP_TIMER_TICKS(50) /**< Delay from a GPIOTE event until a button is reported as pushed (in number of timer ticks). */ 96 | 97 | #define DEAD_BEEF 0xDEADBEEF /**< Value used as error code on stack dump, can be used to identify stack location on stack unwind. */ 98 | 99 | 100 | BLE_LBS_DEF(m_lbs); /**< LED Button Service instance. */ 101 | NRF_BLE_GATT_DEF(m_gatt); /**< GATT module instance. */ 102 | NRF_BLE_QWR_DEF(m_qwr); /**< Context for the Queued Write module.*/ 103 | 104 | static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID; /**< Handle of the current connection. */ 105 | 106 | static uint8_t m_adv_handle = BLE_GAP_ADV_SET_HANDLE_NOT_SET; /**< Advertising handle used to identify an advertising set. */ 107 | static uint8_t m_enc_advdata[BLE_GAP_ADV_SET_DATA_SIZE_MAX]; /**< Buffer for storing an encoded advertising set. */ 108 | static uint8_t m_enc_scan_response_data[BLE_GAP_ADV_SET_DATA_SIZE_MAX]; /**< Buffer for storing an encoded scan data. */ 109 | 110 | /**@brief Struct that contains pointers to the encoded advertising data. */ 111 | static ble_gap_adv_data_t m_adv_data = 112 | { 113 | .adv_data = 114 | { 115 | .p_data = m_enc_advdata, 116 | .len = BLE_GAP_ADV_SET_DATA_SIZE_MAX 117 | }, 118 | .scan_rsp_data = 119 | { 120 | .p_data = m_enc_scan_response_data, 121 | .len = BLE_GAP_ADV_SET_DATA_SIZE_MAX 122 | 123 | } 124 | }; 125 | 126 | /**@brief Function for assert macro callback. 127 | * 128 | * @details This function will be called in case of an assert in the SoftDevice. 129 | * 130 | * @warning This handler is an example only and does not fit a final product. You need to analyze 131 | * how your product is supposed to react in case of Assert. 132 | * @warning On assert from the SoftDevice, the system can only recover on reset. 133 | * 134 | * @param[in] line_num Line number of the failing ASSERT call. 135 | * @param[in] p_file_name File name of the failing ASSERT call. 136 | */ 137 | void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name) 138 | { 139 | app_error_handler(DEAD_BEEF, line_num, p_file_name); 140 | } 141 | 142 | 143 | /**@brief Function for the LEDs initialization. 144 | * 145 | * @details Initializes all LEDs used by the application. 146 | */ 147 | static void leds_init(void) 148 | { 149 | bsp_board_init(BSP_INIT_LEDS); 150 | } 151 | 152 | 153 | /**@brief Function for the Timer initialization. 154 | * 155 | * @details Initializes the timer module. 156 | */ 157 | static void timers_init(void) 158 | { 159 | // Initialize timer module, making it use the scheduler 160 | ret_code_t err_code = app_timer_init(); 161 | APP_ERROR_CHECK(err_code); 162 | } 163 | 164 | 165 | /**@brief Function for the GAP initialization. 166 | * 167 | * @details This function sets up all the necessary GAP (Generic Access Profile) parameters of the 168 | * device including the device name, appearance, and the preferred connection parameters. 169 | */ 170 | static void gap_params_init(void) 171 | { 172 | ret_code_t err_code; 173 | ble_gap_conn_params_t gap_conn_params; 174 | ble_gap_conn_sec_mode_t sec_mode; 175 | 176 | BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); 177 | 178 | err_code = sd_ble_gap_device_name_set(&sec_mode, 179 | (const uint8_t *)DEVICE_NAME, 180 | strlen(DEVICE_NAME)); 181 | APP_ERROR_CHECK(err_code); 182 | 183 | memset(&gap_conn_params, 0, sizeof(gap_conn_params)); 184 | 185 | gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL; 186 | gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL; 187 | gap_conn_params.slave_latency = SLAVE_LATENCY; 188 | gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT; 189 | 190 | err_code = sd_ble_gap_ppcp_set(&gap_conn_params); 191 | APP_ERROR_CHECK(err_code); 192 | } 193 | 194 | 195 | /**@brief Function for initializing the GATT module. 196 | */ 197 | static void gatt_init(void) 198 | { 199 | ret_code_t err_code = nrf_ble_gatt_init(&m_gatt, NULL); 200 | APP_ERROR_CHECK(err_code); 201 | } 202 | 203 | 204 | /**@brief Function for initializing the Advertising functionality. 205 | * 206 | * @details Encodes the required advertising data and passes it to the stack. 207 | * Also builds a structure to be passed to the stack when starting advertising. 208 | */ 209 | static void advertising_init(void) 210 | { 211 | ret_code_t err_code; 212 | ble_advdata_t advdata; 213 | ble_advdata_t srdata; 214 | 215 | ble_uuid_t adv_uuids[] = {{LBS_UUID_SERVICE, m_lbs.uuid_type}}; 216 | 217 | // Build and set advertising data. 218 | memset(&advdata, 0, sizeof(advdata)); 219 | 220 | advdata.name_type = BLE_ADVDATA_FULL_NAME; 221 | advdata.include_appearance = true; 222 | advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_GENERAL_DISC_MODE; 223 | 224 | 225 | memset(&srdata, 0, sizeof(srdata)); 226 | srdata.uuids_complete.uuid_cnt = sizeof(adv_uuids) / sizeof(adv_uuids[0]); 227 | srdata.uuids_complete.p_uuids = adv_uuids; 228 | 229 | err_code = ble_advdata_encode(&advdata, m_adv_data.adv_data.p_data, &m_adv_data.adv_data.len); 230 | APP_ERROR_CHECK(err_code); 231 | 232 | err_code = ble_advdata_encode(&srdata, m_adv_data.scan_rsp_data.p_data, &m_adv_data.scan_rsp_data.len); 233 | APP_ERROR_CHECK(err_code); 234 | 235 | ble_gap_adv_params_t adv_params; 236 | 237 | // Set advertising parameters. 238 | memset(&adv_params, 0, sizeof(adv_params)); 239 | 240 | adv_params.primary_phy = BLE_GAP_PHY_1MBPS; 241 | adv_params.duration = APP_ADV_DURATION; 242 | adv_params.properties.type = BLE_GAP_ADV_TYPE_CONNECTABLE_SCANNABLE_UNDIRECTED; 243 | adv_params.p_peer_addr = NULL; 244 | adv_params.filter_policy = BLE_GAP_ADV_FP_ANY; 245 | adv_params.interval = APP_ADV_INTERVAL; 246 | 247 | err_code = sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, &adv_params); 248 | APP_ERROR_CHECK(err_code); 249 | } 250 | 251 | 252 | /**@brief Function for handling Queued Write Module errors. 253 | * 254 | * @details A pointer to this function will be passed to each service which may need to inform the 255 | * application about an error. 256 | * 257 | * @param[in] nrf_error Error code containing information about what went wrong. 258 | */ 259 | static void nrf_qwr_error_handler(uint32_t nrf_error) 260 | { 261 | APP_ERROR_HANDLER(nrf_error); 262 | } 263 | 264 | 265 | /**@brief Function for handling write events to the LED characteristic. 266 | * 267 | * @param[in] p_lbs Instance of LED Button Service to which the write applies. 268 | * @param[in] led_state Written/desired state of the LED. 269 | */ 270 | static void led_write_handler(uint16_t conn_handle, ble_lbs_t * p_lbs, uint8_t led_state) 271 | { 272 | if (led_state) 273 | { 274 | bsp_board_led_on(LEDBUTTON_LED); 275 | NRF_LOG_INFO("Received LED ON!"); 276 | } 277 | else 278 | { 279 | bsp_board_led_off(LEDBUTTON_LED); 280 | NRF_LOG_INFO("Received LED OFF!"); 281 | } 282 | } 283 | 284 | 285 | /**@brief Function for initializing services that will be used by the application. 286 | */ 287 | static void services_init(void) 288 | { 289 | ret_code_t err_code; 290 | ble_lbs_init_t init = {0}; 291 | nrf_ble_qwr_init_t qwr_init = {0}; 292 | 293 | // Initialize Queued Write Module. 294 | qwr_init.error_handler = nrf_qwr_error_handler; 295 | 296 | err_code = nrf_ble_qwr_init(&m_qwr, &qwr_init); 297 | APP_ERROR_CHECK(err_code); 298 | 299 | // Initialize LBS. 300 | init.led_write_handler = led_write_handler; 301 | 302 | err_code = ble_lbs_init(&m_lbs, &init); 303 | APP_ERROR_CHECK(err_code); 304 | } 305 | 306 | 307 | /**@brief Function for handling the Connection Parameters Module. 308 | * 309 | * @details This function will be called for all events in the Connection Parameters Module that 310 | * are passed to the application. 311 | * 312 | * @note All this function does is to disconnect. This could have been done by simply 313 | * setting the disconnect_on_fail config parameter, but instead we use the event 314 | * handler mechanism to demonstrate its use. 315 | * 316 | * @param[in] p_evt Event received from the Connection Parameters Module. 317 | */ 318 | static void on_conn_params_evt(ble_conn_params_evt_t * p_evt) 319 | { 320 | ret_code_t err_code; 321 | 322 | if (p_evt->evt_type == BLE_CONN_PARAMS_EVT_FAILED) 323 | { 324 | err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_CONN_INTERVAL_UNACCEPTABLE); 325 | APP_ERROR_CHECK(err_code); 326 | } 327 | } 328 | 329 | 330 | /**@brief Function for handling a Connection Parameters error. 331 | * 332 | * @param[in] nrf_error Error code containing information about what went wrong. 333 | */ 334 | static void conn_params_error_handler(uint32_t nrf_error) 335 | { 336 | APP_ERROR_HANDLER(nrf_error); 337 | } 338 | 339 | 340 | /**@brief Function for initializing the Connection Parameters module. 341 | */ 342 | static void conn_params_init(void) 343 | { 344 | ret_code_t err_code; 345 | ble_conn_params_init_t cp_init; 346 | 347 | memset(&cp_init, 0, sizeof(cp_init)); 348 | 349 | cp_init.p_conn_params = NULL; 350 | cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY; 351 | cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY; 352 | cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT; 353 | cp_init.start_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID; 354 | cp_init.disconnect_on_fail = false; 355 | cp_init.evt_handler = on_conn_params_evt; 356 | cp_init.error_handler = conn_params_error_handler; 357 | 358 | err_code = ble_conn_params_init(&cp_init); 359 | APP_ERROR_CHECK(err_code); 360 | } 361 | 362 | 363 | /**@brief Function for starting advertising. 364 | */ 365 | static void advertising_start(void) 366 | { 367 | ret_code_t err_code; 368 | 369 | err_code = sd_ble_gap_adv_start(m_adv_handle, APP_BLE_CONN_CFG_TAG); 370 | APP_ERROR_CHECK(err_code); 371 | 372 | bsp_board_led_on(ADVERTISING_LED); 373 | } 374 | 375 | 376 | /**@brief Function for handling BLE events. 377 | * 378 | * @param[in] p_ble_evt Bluetooth stack event. 379 | * @param[in] p_context Unused. 380 | */ 381 | static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context) 382 | { 383 | ret_code_t err_code; 384 | 385 | switch (p_ble_evt->header.evt_id) 386 | { 387 | case BLE_GAP_EVT_CONNECTED: 388 | NRF_LOG_INFO("Connected"); 389 | bsp_board_led_on(CONNECTED_LED); 390 | bsp_board_led_off(ADVERTISING_LED); 391 | m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle; 392 | err_code = nrf_ble_qwr_conn_handle_assign(&m_qwr, m_conn_handle); 393 | APP_ERROR_CHECK(err_code); 394 | err_code = app_button_enable(); 395 | APP_ERROR_CHECK(err_code); 396 | break; 397 | 398 | case BLE_GAP_EVT_DISCONNECTED: 399 | NRF_LOG_INFO("Disconnected"); 400 | bsp_board_led_off(CONNECTED_LED); 401 | m_conn_handle = BLE_CONN_HANDLE_INVALID; 402 | err_code = app_button_disable(); 403 | APP_ERROR_CHECK(err_code); 404 | advertising_start(); 405 | break; 406 | 407 | case BLE_GAP_EVT_SEC_PARAMS_REQUEST: 408 | // Pairing not supported 409 | err_code = sd_ble_gap_sec_params_reply(m_conn_handle, 410 | BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, 411 | NULL, 412 | NULL); 413 | APP_ERROR_CHECK(err_code); 414 | break; 415 | 416 | case BLE_GAP_EVT_PHY_UPDATE_REQUEST: 417 | { 418 | NRF_LOG_DEBUG("PHY update request."); 419 | ble_gap_phys_t const phys = 420 | { 421 | .rx_phys = BLE_GAP_PHY_AUTO, 422 | .tx_phys = BLE_GAP_PHY_AUTO, 423 | }; 424 | err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys); 425 | APP_ERROR_CHECK(err_code); 426 | } break; 427 | 428 | case BLE_GATTS_EVT_SYS_ATTR_MISSING: 429 | // No system attributes have been stored. 430 | err_code = sd_ble_gatts_sys_attr_set(m_conn_handle, NULL, 0, 0); 431 | APP_ERROR_CHECK(err_code); 432 | break; 433 | 434 | case BLE_GATTC_EVT_TIMEOUT: 435 | // Disconnect on GATT Client timeout event. 436 | NRF_LOG_DEBUG("GATT Client Timeout."); 437 | err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle, 438 | BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); 439 | APP_ERROR_CHECK(err_code); 440 | break; 441 | 442 | case BLE_GATTS_EVT_TIMEOUT: 443 | // Disconnect on GATT Server timeout event. 444 | NRF_LOG_DEBUG("GATT Server Timeout."); 445 | err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gatts_evt.conn_handle, 446 | BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); 447 | APP_ERROR_CHECK(err_code); 448 | break; 449 | 450 | default: 451 | // No implementation needed. 452 | break; 453 | } 454 | } 455 | 456 | 457 | /**@brief Function for initializing the BLE stack. 458 | * 459 | * @details Initializes the SoftDevice and the BLE event interrupt. 460 | */ 461 | static void ble_stack_init(void) 462 | { 463 | ret_code_t err_code; 464 | 465 | err_code = nrf_sdh_enable_request(); 466 | APP_ERROR_CHECK(err_code); 467 | 468 | // Configure the BLE stack using the default settings. 469 | // Fetch the start address of the application RAM. 470 | uint32_t ram_start = 0; 471 | err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start); 472 | APP_ERROR_CHECK(err_code); 473 | 474 | // Enable BLE stack. 475 | err_code = nrf_sdh_ble_enable(&ram_start); 476 | APP_ERROR_CHECK(err_code); 477 | 478 | // Register a handler for BLE events. 479 | NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, ble_evt_handler, NULL); 480 | } 481 | 482 | 483 | /**@brief Function for handling events from the button handler module. 484 | * 485 | * @param[in] pin_no The pin that the event applies to. 486 | * @param[in] button_action The button action (press/release). 487 | */ 488 | static void button_event_handler(uint8_t pin_no, uint8_t button_action) 489 | { 490 | ret_code_t err_code; 491 | 492 | switch (pin_no) 493 | { 494 | case LEDBUTTON_BUTTON: 495 | NRF_LOG_INFO("Send button state change."); 496 | err_code = ble_lbs_on_button_change(m_conn_handle, &m_lbs, button_action); 497 | if (err_code != NRF_SUCCESS && 498 | err_code != BLE_ERROR_INVALID_CONN_HANDLE && 499 | err_code != NRF_ERROR_INVALID_STATE && 500 | err_code != BLE_ERROR_GATTS_SYS_ATTR_MISSING) 501 | { 502 | APP_ERROR_CHECK(err_code); 503 | } 504 | break; 505 | 506 | default: 507 | APP_ERROR_HANDLER(pin_no); 508 | break; 509 | } 510 | } 511 | 512 | 513 | /**@brief Function for initializing the button handler module. 514 | */ 515 | static void buttons_init(void) 516 | { 517 | ret_code_t err_code; 518 | 519 | //The array must be static because a pointer to it will be saved in the button handler module. 520 | static app_button_cfg_t buttons[] = 521 | { 522 | {LEDBUTTON_BUTTON, false, BUTTON_PULL, button_event_handler} 523 | }; 524 | 525 | err_code = app_button_init(buttons, ARRAY_SIZE(buttons), 526 | BUTTON_DETECTION_DELAY); 527 | APP_ERROR_CHECK(err_code); 528 | } 529 | 530 | 531 | static void log_init(void) 532 | { 533 | ret_code_t err_code = NRF_LOG_INIT(NULL); 534 | APP_ERROR_CHECK(err_code); 535 | 536 | NRF_LOG_DEFAULT_BACKENDS_INIT(); 537 | } 538 | 539 | 540 | /**@brief Function for initializing power management. 541 | */ 542 | static void power_management_init(void) 543 | { 544 | ret_code_t err_code; 545 | err_code = nrf_pwr_mgmt_init(); 546 | APP_ERROR_CHECK(err_code); 547 | } 548 | 549 | 550 | /**@brief Function for handling the idle state (main loop). 551 | * 552 | * @details If there is no pending log operation, then sleep until next the next event occurs. 553 | */ 554 | static void idle_state_handle(void) 555 | { 556 | if (NRF_LOG_PROCESS() == false) 557 | { 558 | nrf_pwr_mgmt_run(); 559 | } 560 | } 561 | 562 | 563 | /**@brief Function for application main entry. 564 | */ 565 | int main(void) 566 | { 567 | #if CONFIG_JLINK_MONITOR_ENABLED 568 | NVIC_SetPriority(DebugMonitor_IRQn, _PRIO_SD_LOW); 569 | #endif 570 | 571 | // Initialize. 572 | log_init(); 573 | leds_init(); 574 | timers_init(); 575 | buttons_init(); 576 | power_management_init(); 577 | ble_stack_init(); 578 | gap_params_init(); 579 | gatt_init(); 580 | services_init(); 581 | advertising_init(); 582 | conn_params_init(); 583 | 584 | // Start execution. 585 | NRF_LOG_INFO("Blinky example started."); 586 | advertising_start(); 587 | 588 | // Enter main loop. 589 | for (;;) 590 | { 591 | idle_state_handle(); 592 | } 593 | } 594 | 595 | 596 | /** 597 | * @} 598 | */ 599 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/JLinkSettings.ini: -------------------------------------------------------------------------------- 1 | [BREAKPOINTS] 2 | ForceImpTypeAny = 0 3 | ShowInfoWin = 1 4 | EnableFlashBP = 2 5 | BPDuringExecution = 0 6 | [CFI] 7 | CFISize = 0x00 8 | CFIAddr = 0x00 9 | [CPU] 10 | MonModeVTableAddr = 0x26000 11 | MonModeDebug = 1 12 | MaxNumAPs = 0 13 | LowPowerHandlingMode = 0 14 | OverrideMemMap = 0 15 | AllowSimulation = 1 16 | ScriptFile="" 17 | [FLASH] 18 | CacheExcludeSize = 0x00 19 | CacheExcludeAddr = 0x00 20 | MinNumBytesFlashDL = 0 21 | SkipProgOnCRCMatch = 1 22 | VerifyDownload = 1 23 | AllowCaching = 1 24 | EnableFlashDL = 2 25 | Override = 0 26 | Device="ARM7" 27 | [GENERAL] 28 | WorkRAMSize = 0x00 29 | WorkRAMAddr = 0x00 30 | RAMUsageLimit = 0x00 31 | [SWO] 32 | SWOLogFile="" 33 | [MEM] 34 | RdOverrideOrMask = 0x00 35 | RdOverrideAndMask = 0xFFFFFFFF 36 | RdOverrideAddr = 0xFFFFFFFF 37 | WrOverrideOrMask = 0x00 38 | WrOverrideAndMask = 0xFFFFFFFF 39 | WrOverrideAddr = 0xFFFFFFFF 40 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/README.md: -------------------------------------------------------------------------------- 1 | # Monitor Mode Debugging in Keil5 2 | 3 | Steps: 4 | 1. Unzip/clone into SDK16.0/examples/ble_peripheral 5 | 6 | 2. Open the keil project file [ble_app_blinky_pca10040_s132.uvprojx](ble_app_blinky_pca10040_s132.uvprojx) 7 | 8 | 3. Compile the example. 9 | 10 | 4. Erase and flash an nRF52DK with 's132_nrf52_7.0.1_softdevice.hex' found in SDK16.0\components\softdevice\s132\hex 11 | 12 | 5. Flash the application to the nRF52DK via Keil. 13 | NOTE: When prompted with the dialog box 'Monitor Mode missing license' you need to press 'No'. This is done to prevent the J-link driver to enter MMD when flashing the application. You can also flash the application through nrfjprog without any modification. 14 | 15 | ![JlinkPromptNo](../../../Documentation/Images/JLinkPromptNo.png " ") 16 | 17 | 6. Enter debug mode. 18 | NOTE: When prompted with the dialog box 'Monitor Mode missing license' you need to press 'Yes'. 19 | 20 | ![JlinkPromptYes](../../../Documentation/Images/JLinkPromptYes.png " ") 21 | 22 | 7. Start code execution. 23 | 24 | 8. Open nRF Connect and connect to 'NORDIC_BLINKY'. Expand the 'Nordic LED Button Service' and enable notifications for the Button characteristics (press the three downward pointing arrows button). 25 | 26 | 9. Press 'Button 1' on the nRF52DK and verify that the Button characteristic's Value field appears and changes value from 'Button pressed' to 'Button released' when pushing the button. 27 | 28 | 10. Stop code execution. 29 | 30 | 11. Verify that the button value in nRF Connect does not change when pressing 'Button 1' 31 | 32 | 12. Start code execution and verify that the value in nRF Connect now changes when pressing 'Button 1'. 33 | 34 | 13. You have now verified that the BLE link remained intact despite halting the CPU. 35 | 36 | 14. Feel free to play around with the LED and single stepping through application code. Now you can finally figure out what your BLE service is actually doing without losing the BLE link ^^ 37 | 38 | 39 | ## Hey that really is neat, but how do I implement MMD in my project? 40 | The differences between this example and the standard ble_app_blinky demo are listed below: 41 | 42 | 1. You need to compile the MMD ISR (DebugMon_Handler) found in [JLINK_MONITOR_ISR_ARM.s](../../../JLINK_MONITOR_ISR_ARM.s) 43 | 44 | 2. You need to stop the app_timer (and feed a watchdog if needed) with the MMD utility functions that the assembly coded ISR refers to in [JLINK_MONITOR.c](../../../JLINK_MONITOR.c) and [JLINK_MONITOR.h](../../../JLINK_MONITOR.h) 45 | 46 | 3. You need to enable the interrupt by NVIC_SetPriority(DebugMonitor_IRQn, _PRIO_SD_LOW) at the start of your main loop. The priority level determines what execution priority levels you want to block. 47 | 48 | 4. Enable MMD in the J-link driver: see line 10 and 11 in [JLinkSettings.ini](JLinkSettings.ini). 49 | See https://www.segger.com/downloads/jlink/UM08001 Chapter 9.7 Forwarding of Monitor Interrupts. The reference to "additional software layer that takes all interrupts in the first place and forwards them to the user application" in the J-link User Guide chapter 9.7 is in our case the SoftDevice. 50 | 51 | ### Wait, that's it!? 52 | Youp, that's it. 53 | 54 | Happy debugging! 55 | 56 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/RTE/Device/nRF52832_xxAA/arm_startup_nrf52.s: -------------------------------------------------------------------------------- 1 | ; Copyright (c) 2009-2017 ARM Limited. All rights reserved. 2 | ; 3 | ; SPDX-License-Identifier: Apache-2.0 4 | ; 5 | ; Licensed under the Apache License, Version 2.0 (the License); you may 6 | ; not use this file except in compliance with the License. 7 | ; You may obtain a copy of the License at 8 | ; 9 | ; www.apache.org/licenses/LICENSE-2.0 10 | ; 11 | ; Unless required by applicable law or agreed to in writing, software 12 | ; distributed under the License is distributed on an AS IS BASIS, WITHOUT 13 | ; WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | ; See the License for the specific language governing permissions and 15 | ; limitations under the License. 16 | ; 17 | ; NOTICE: This file has been modified by Nordic Semiconductor ASA. 18 | 19 | IF :DEF: __STARTUP_CONFIG 20 | #include "startup_config.h" 21 | #ifndef __STARTUP_CONFIG_STACK_ALIGNEMENT 22 | #define __STARTUP_CONFIG_STACK_ALIGNEMENT 3 23 | #endif 24 | ENDIF 25 | 26 | IF :DEF: __STARTUP_CONFIG 27 | Stack_Size EQU __STARTUP_CONFIG_STACK_SIZE 28 | ELIF :DEF: __STACK_SIZE 29 | Stack_Size EQU __STACK_SIZE 30 | ELSE 31 | Stack_Size EQU 8192 32 | ENDIF 33 | 34 | IF :DEF: __STARTUP_CONFIG 35 | Stack_Align EQU __STARTUP_CONFIG_STACK_ALIGNEMENT 36 | ELSE 37 | Stack_Align EQU 3 38 | ENDIF 39 | 40 | AREA STACK, NOINIT, READWRITE, ALIGN=Stack_Align 41 | Stack_Mem SPACE Stack_Size 42 | __initial_sp 43 | 44 | IF :DEF: __STARTUP_CONFIG 45 | Heap_Size EQU __STARTUP_CONFIG_HEAP_SIZE 46 | ELIF :DEF: __HEAP_SIZE 47 | Heap_Size EQU __HEAP_SIZE 48 | ELSE 49 | Heap_Size EQU 8192 50 | ENDIF 51 | 52 | AREA HEAP, NOINIT, READWRITE, ALIGN=3 53 | __heap_base 54 | Heap_Mem SPACE Heap_Size 55 | __heap_limit 56 | 57 | PRESERVE8 58 | THUMB 59 | 60 | ; Vector Table Mapped to Address 0 at Reset 61 | 62 | AREA RESET, DATA, READONLY 63 | EXPORT __Vectors 64 | EXPORT __Vectors_End 65 | EXPORT __Vectors_Size 66 | 67 | __Vectors DCD __initial_sp ; Top of Stack 68 | DCD Reset_Handler 69 | DCD NMI_Handler 70 | DCD HardFault_Handler 71 | DCD MemoryManagement_Handler 72 | DCD BusFault_Handler 73 | DCD UsageFault_Handler 74 | DCD 0 ; Reserved 75 | DCD 0 ; Reserved 76 | DCD 0 ; Reserved 77 | DCD 0 ; Reserved 78 | DCD SVC_Handler 79 | DCD DebugMon_Handler 80 | DCD 0 ; Reserved 81 | DCD PendSV_Handler 82 | DCD SysTick_Handler 83 | 84 | ; External Interrupts 85 | DCD POWER_CLOCK_IRQHandler 86 | DCD RADIO_IRQHandler 87 | DCD UARTE0_UART0_IRQHandler 88 | DCD SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler 89 | DCD SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler 90 | DCD NFCT_IRQHandler 91 | DCD GPIOTE_IRQHandler 92 | DCD SAADC_IRQHandler 93 | DCD TIMER0_IRQHandler 94 | DCD TIMER1_IRQHandler 95 | DCD TIMER2_IRQHandler 96 | DCD RTC0_IRQHandler 97 | DCD TEMP_IRQHandler 98 | DCD RNG_IRQHandler 99 | DCD ECB_IRQHandler 100 | DCD CCM_AAR_IRQHandler 101 | DCD WDT_IRQHandler 102 | DCD RTC1_IRQHandler 103 | DCD QDEC_IRQHandler 104 | DCD COMP_LPCOMP_IRQHandler 105 | DCD SWI0_EGU0_IRQHandler 106 | DCD SWI1_EGU1_IRQHandler 107 | DCD SWI2_EGU2_IRQHandler 108 | DCD SWI3_EGU3_IRQHandler 109 | DCD SWI4_EGU4_IRQHandler 110 | DCD SWI5_EGU5_IRQHandler 111 | DCD TIMER3_IRQHandler 112 | DCD TIMER4_IRQHandler 113 | DCD PWM0_IRQHandler 114 | DCD PDM_IRQHandler 115 | DCD 0 ; Reserved 116 | DCD 0 ; Reserved 117 | DCD MWU_IRQHandler 118 | DCD PWM1_IRQHandler 119 | DCD PWM2_IRQHandler 120 | DCD SPIM2_SPIS2_SPI2_IRQHandler 121 | DCD RTC2_IRQHandler 122 | DCD I2S_IRQHandler 123 | DCD FPU_IRQHandler 124 | DCD 0 ; Reserved 125 | DCD 0 ; Reserved 126 | DCD 0 ; Reserved 127 | DCD 0 ; Reserved 128 | DCD 0 ; Reserved 129 | DCD 0 ; Reserved 130 | DCD 0 ; Reserved 131 | DCD 0 ; Reserved 132 | DCD 0 ; Reserved 133 | DCD 0 ; Reserved 134 | DCD 0 ; Reserved 135 | DCD 0 ; Reserved 136 | DCD 0 ; Reserved 137 | DCD 0 ; Reserved 138 | DCD 0 ; Reserved 139 | DCD 0 ; Reserved 140 | DCD 0 ; Reserved 141 | DCD 0 ; Reserved 142 | DCD 0 ; Reserved 143 | DCD 0 ; Reserved 144 | DCD 0 ; Reserved 145 | DCD 0 ; Reserved 146 | DCD 0 ; Reserved 147 | DCD 0 ; Reserved 148 | DCD 0 ; Reserved 149 | DCD 0 ; Reserved 150 | DCD 0 ; Reserved 151 | DCD 0 ; Reserved 152 | DCD 0 ; Reserved 153 | DCD 0 ; Reserved 154 | DCD 0 ; Reserved 155 | DCD 0 ; Reserved 156 | DCD 0 ; Reserved 157 | DCD 0 ; Reserved 158 | DCD 0 ; Reserved 159 | DCD 0 ; Reserved 160 | DCD 0 ; Reserved 161 | DCD 0 ; Reserved 162 | DCD 0 ; Reserved 163 | DCD 0 ; Reserved 164 | DCD 0 ; Reserved 165 | DCD 0 ; Reserved 166 | DCD 0 ; Reserved 167 | DCD 0 ; Reserved 168 | DCD 0 ; Reserved 169 | DCD 0 ; Reserved 170 | DCD 0 ; Reserved 171 | DCD 0 ; Reserved 172 | DCD 0 ; Reserved 173 | DCD 0 ; Reserved 174 | DCD 0 ; Reserved 175 | DCD 0 ; Reserved 176 | DCD 0 ; Reserved 177 | DCD 0 ; Reserved 178 | DCD 0 ; Reserved 179 | DCD 0 ; Reserved 180 | DCD 0 ; Reserved 181 | DCD 0 ; Reserved 182 | DCD 0 ; Reserved 183 | DCD 0 ; Reserved 184 | DCD 0 ; Reserved 185 | DCD 0 ; Reserved 186 | DCD 0 ; Reserved 187 | DCD 0 ; Reserved 188 | DCD 0 ; Reserved 189 | DCD 0 ; Reserved 190 | DCD 0 ; Reserved 191 | DCD 0 ; Reserved 192 | DCD 0 ; Reserved 193 | DCD 0 ; Reserved 194 | DCD 0 ; Reserved 195 | DCD 0 ; Reserved 196 | DCD 0 ; Reserved 197 | 198 | __Vectors_End 199 | 200 | __Vectors_Size EQU __Vectors_End - __Vectors 201 | 202 | AREA |.text|, CODE, READONLY 203 | 204 | ; Reset Handler 205 | 206 | 207 | Reset_Handler PROC 208 | EXPORT Reset_Handler [WEAK] 209 | IMPORT SystemInit 210 | IMPORT __main 211 | 212 | 213 | LDR R0, =SystemInit 214 | BLX R0 215 | LDR R0, =__main 216 | BX R0 217 | ENDP 218 | 219 | ; Dummy Exception Handlers (infinite loops which can be modified) 220 | 221 | NMI_Handler PROC 222 | EXPORT NMI_Handler [WEAK] 223 | B . 224 | ENDP 225 | HardFault_Handler\ 226 | PROC 227 | EXPORT HardFault_Handler [WEAK] 228 | B . 229 | ENDP 230 | MemoryManagement_Handler\ 231 | PROC 232 | EXPORT MemoryManagement_Handler [WEAK] 233 | B . 234 | ENDP 235 | BusFault_Handler\ 236 | PROC 237 | EXPORT BusFault_Handler [WEAK] 238 | B . 239 | ENDP 240 | UsageFault_Handler\ 241 | PROC 242 | EXPORT UsageFault_Handler [WEAK] 243 | B . 244 | ENDP 245 | SVC_Handler PROC 246 | EXPORT SVC_Handler [WEAK] 247 | B . 248 | ENDP 249 | DebugMon_Handler\ 250 | PROC 251 | EXPORT DebugMon_Handler [WEAK] 252 | B . 253 | ENDP 254 | PendSV_Handler PROC 255 | EXPORT PendSV_Handler [WEAK] 256 | B . 257 | ENDP 258 | SysTick_Handler PROC 259 | EXPORT SysTick_Handler [WEAK] 260 | B . 261 | ENDP 262 | 263 | Default_Handler PROC 264 | 265 | EXPORT POWER_CLOCK_IRQHandler [WEAK] 266 | EXPORT RADIO_IRQHandler [WEAK] 267 | EXPORT UARTE0_UART0_IRQHandler [WEAK] 268 | EXPORT SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler [WEAK] 269 | EXPORT SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler [WEAK] 270 | EXPORT NFCT_IRQHandler [WEAK] 271 | EXPORT GPIOTE_IRQHandler [WEAK] 272 | EXPORT SAADC_IRQHandler [WEAK] 273 | EXPORT TIMER0_IRQHandler [WEAK] 274 | EXPORT TIMER1_IRQHandler [WEAK] 275 | EXPORT TIMER2_IRQHandler [WEAK] 276 | EXPORT RTC0_IRQHandler [WEAK] 277 | EXPORT TEMP_IRQHandler [WEAK] 278 | EXPORT RNG_IRQHandler [WEAK] 279 | EXPORT ECB_IRQHandler [WEAK] 280 | EXPORT CCM_AAR_IRQHandler [WEAK] 281 | EXPORT WDT_IRQHandler [WEAK] 282 | EXPORT RTC1_IRQHandler [WEAK] 283 | EXPORT QDEC_IRQHandler [WEAK] 284 | EXPORT COMP_LPCOMP_IRQHandler [WEAK] 285 | EXPORT SWI0_EGU0_IRQHandler [WEAK] 286 | EXPORT SWI1_EGU1_IRQHandler [WEAK] 287 | EXPORT SWI2_EGU2_IRQHandler [WEAK] 288 | EXPORT SWI3_EGU3_IRQHandler [WEAK] 289 | EXPORT SWI4_EGU4_IRQHandler [WEAK] 290 | EXPORT SWI5_EGU5_IRQHandler [WEAK] 291 | EXPORT TIMER3_IRQHandler [WEAK] 292 | EXPORT TIMER4_IRQHandler [WEAK] 293 | EXPORT PWM0_IRQHandler [WEAK] 294 | EXPORT PDM_IRQHandler [WEAK] 295 | EXPORT MWU_IRQHandler [WEAK] 296 | EXPORT PWM1_IRQHandler [WEAK] 297 | EXPORT PWM2_IRQHandler [WEAK] 298 | EXPORT SPIM2_SPIS2_SPI2_IRQHandler [WEAK] 299 | EXPORT RTC2_IRQHandler [WEAK] 300 | EXPORT I2S_IRQHandler [WEAK] 301 | EXPORT FPU_IRQHandler [WEAK] 302 | POWER_CLOCK_IRQHandler 303 | RADIO_IRQHandler 304 | UARTE0_UART0_IRQHandler 305 | SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler 306 | SPIM1_SPIS1_TWIM1_TWIS1_SPI1_TWI1_IRQHandler 307 | NFCT_IRQHandler 308 | GPIOTE_IRQHandler 309 | SAADC_IRQHandler 310 | TIMER0_IRQHandler 311 | TIMER1_IRQHandler 312 | TIMER2_IRQHandler 313 | RTC0_IRQHandler 314 | TEMP_IRQHandler 315 | RNG_IRQHandler 316 | ECB_IRQHandler 317 | CCM_AAR_IRQHandler 318 | WDT_IRQHandler 319 | RTC1_IRQHandler 320 | QDEC_IRQHandler 321 | COMP_LPCOMP_IRQHandler 322 | SWI0_EGU0_IRQHandler 323 | SWI1_EGU1_IRQHandler 324 | SWI2_EGU2_IRQHandler 325 | SWI3_EGU3_IRQHandler 326 | SWI4_EGU4_IRQHandler 327 | SWI5_EGU5_IRQHandler 328 | TIMER3_IRQHandler 329 | TIMER4_IRQHandler 330 | PWM0_IRQHandler 331 | PDM_IRQHandler 332 | MWU_IRQHandler 333 | PWM1_IRQHandler 334 | PWM2_IRQHandler 335 | SPIM2_SPIS2_SPI2_IRQHandler 336 | RTC2_IRQHandler 337 | I2S_IRQHandler 338 | FPU_IRQHandler 339 | B . 340 | ENDP 341 | ALIGN 342 | 343 | ; User Initial Stack & Heap 344 | 345 | IF :DEF:__MICROLIB 346 | 347 | EXPORT __initial_sp 348 | EXPORT __heap_base 349 | EXPORT __heap_limit 350 | 351 | ELSE 352 | 353 | IMPORT __use_two_region_memory 354 | EXPORT __user_initial_stackheap 355 | 356 | __user_initial_stackheap PROC 357 | 358 | LDR R0, = Heap_Mem 359 | LDR R1, = (Stack_Mem + Stack_Size) 360 | LDR R2, = (Heap_Mem + Heap_Size) 361 | LDR R3, = Stack_Mem 362 | BX LR 363 | ENDP 364 | 365 | ALIGN 366 | 367 | ENDIF 368 | 369 | END 370 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/RTE/Device/nRF52832_xxAA/startup_config.h: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (c) 2010 - 2017, Nordic Semiconductor ASA All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright 12 | notice, this list of conditions and the following disclaimer in the 13 | documentation and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of Nordic Semiconductor ASA nor the names of its 16 | contributors may be used to endorse or promote products derived from this 17 | software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE 22 | ARE DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA OR CONTRIBUTORS BE 23 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 | POSSIBILITY OF SUCH DAMAGE. 30 | 31 | */ 32 | 33 | /* Configure stack size, stack alignement and heap size with a header file instead of project settings or modification of Nordic provided assembler files. Modify this file as needed. */ 34 | 35 | /* In order to make use this file, 36 | 1. For Keil uVision IDE, in the Options for Target -> Asm tab, define symbol __STARTUP_CONFIG and use the additional assembler option --cpreproc in Misc Control text box. 37 | 2. For GCC compiling, add extra assembly option -D__STARTUP_CONFIG. 38 | 3. For IAR Embedded Workbench define symbol __STARTUP_CONFIG in the Assembler options and define symbol __STARTUP_CONFIG=1 in the linker options. 39 | */ 40 | 41 | /* This file is a template and should be copied to the project directory. */ 42 | 43 | /* Define size of stack. Size must be multiple of 4. */ 44 | #define __STARTUP_CONFIG_STACK_SIZE 0x1000 45 | 46 | /* Define alignement of stack. Alignment will be 2 to the power of __STARTUP_CONFIG_STACK_ALIGNEMENT. Since calling convention requires that the stack is aligned to 8-bytes when a function is called, the minimum __STARTUP_CONFIG_STACK_ALIGNEMENT is therefore 3. */ 47 | #define __STARTUP_CONFIG_STACK_ALIGNEMENT 3 48 | 49 | /* Define size of heap. Size must be multiple of 4. */ 50 | #define __STARTUP_CONFIG_HEAP_SIZE 0x1000 51 | 52 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/RTE/Device/nRF52832_xxAA/system_nrf52.c: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Copyright (c) 2009-2017 ARM Limited. All rights reserved. 4 | 5 | SPDX-License-Identifier: Apache-2.0 6 | 7 | Licensed under the Apache License, Version 2.0 (the License); you may 8 | not use this file except in compliance with the License. 9 | You may obtain a copy of the License at 10 | 11 | www.apache.org/licenses/LICENSE-2.0 12 | 13 | Unless required by applicable law or agreed to in writing, software 14 | distributed under the License is distributed on an AS IS BASIS, WITHOUT 15 | WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | See the License for the specific language governing permissions and 17 | limitations under the License. 18 | 19 | NOTICE: This file has been modified by Nordic Semiconductor ASA. 20 | 21 | */ 22 | 23 | /* NOTE: Template files (including this one) are application specific and therefore expected to 24 | be copied into the application project folder prior to its use! */ 25 | 26 | #include 27 | #include 28 | #include "nrf.h" 29 | #include "system_nrf52.h" 30 | 31 | /*lint ++flb "Enter library region" */ 32 | 33 | #define __SYSTEM_CLOCK_64M (64000000UL) 34 | 35 | static bool errata_12(void); 36 | static bool errata_16(void); 37 | static bool errata_31(void); 38 | static bool errata_32(void); 39 | static bool errata_36(void); 40 | static bool errata_37(void); 41 | static bool errata_57(void); 42 | static bool errata_66(void); 43 | static bool errata_108(void); 44 | static bool errata_136(void); 45 | 46 | 47 | #if defined ( __CC_ARM ) 48 | uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK_64M; 49 | #elif defined ( __ICCARM__ ) 50 | __root uint32_t SystemCoreClock = __SYSTEM_CLOCK_64M; 51 | #elif defined ( __GNUC__ ) 52 | uint32_t SystemCoreClock __attribute__((used)) = __SYSTEM_CLOCK_64M; 53 | #endif 54 | 55 | void SystemCoreClockUpdate(void) 56 | { 57 | SystemCoreClock = __SYSTEM_CLOCK_64M; 58 | } 59 | 60 | void SystemInit(void) 61 | { 62 | /* Enable SWO trace functionality. If ENABLE_SWO is not defined, SWO pin will be used as GPIO (see Product 63 | Specification to see which one). */ 64 | #if defined (ENABLE_SWO) 65 | CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; 66 | NRF_CLOCK->TRACECONFIG |= CLOCK_TRACECONFIG_TRACEMUX_Serial << CLOCK_TRACECONFIG_TRACEMUX_Pos; 67 | NRF_P0->PIN_CNF[18] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 68 | #endif 69 | 70 | /* Enable Trace functionality. If ENABLE_TRACE is not defined, TRACE pins will be used as GPIOs (see Product 71 | Specification to see which ones). */ 72 | #if defined (ENABLE_TRACE) 73 | CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk; 74 | NRF_CLOCK->TRACECONFIG |= CLOCK_TRACECONFIG_TRACEMUX_Parallel << CLOCK_TRACECONFIG_TRACEMUX_Pos; 75 | NRF_P0->PIN_CNF[14] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 76 | NRF_P0->PIN_CNF[15] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 77 | NRF_P0->PIN_CNF[16] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 78 | NRF_P0->PIN_CNF[18] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 79 | NRF_P0->PIN_CNF[20] = (GPIO_PIN_CNF_DRIVE_H0H1 << GPIO_PIN_CNF_DRIVE_Pos) | (GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos) | (GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos); 80 | #endif 81 | 82 | /* Workaround for Errata 12 "COMP: Reference ladder not correctly calibrated" found at the Errata document 83 | for your device located at https://infocenter.nordicsemi.com/ */ 84 | if (errata_12()){ 85 | *(volatile uint32_t *)0x40013540 = (*(uint32_t *)0x10000324 & 0x00001F00) >> 8; 86 | } 87 | 88 | /* Workaround for Errata 16 "System: RAM may be corrupt on wakeup from CPU IDLE" found at the Errata document 89 | for your device located at https://infocenter.nordicsemi.com/ */ 90 | if (errata_16()){ 91 | *(volatile uint32_t *)0x4007C074 = 3131961357ul; 92 | } 93 | 94 | /* Workaround for Errata 31 "CLOCK: Calibration values are not correctly loaded from FICR at reset" found at the Errata document 95 | for your device located at https://infocenter.nordicsemi.com/ */ 96 | if (errata_31()){ 97 | *(volatile uint32_t *)0x4000053C = ((*(volatile uint32_t *)0x10000244) & 0x0000E000) >> 13; 98 | } 99 | 100 | /* Workaround for Errata 32 "DIF: Debug session automatically enables TracePort pins" found at the Errata document 101 | for your device located at https://infocenter.nordicsemi.com/ */ 102 | if (errata_32()){ 103 | CoreDebug->DEMCR &= ~CoreDebug_DEMCR_TRCENA_Msk; 104 | } 105 | 106 | /* Workaround for Errata 36 "CLOCK: Some registers are not reset when expected" found at the Errata document 107 | for your device located at https://infocenter.nordicsemi.com/ */ 108 | if (errata_36()){ 109 | NRF_CLOCK->EVENTS_DONE = 0; 110 | NRF_CLOCK->EVENTS_CTTO = 0; 111 | NRF_CLOCK->CTIV = 0; 112 | } 113 | 114 | /* Workaround for Errata 37 "RADIO: Encryption engine is slow by default" found at the Errata document 115 | for your device located at https://infocenter.nordicsemi.com/ */ 116 | if (errata_37()){ 117 | *(volatile uint32_t *)0x400005A0 = 0x3; 118 | } 119 | 120 | /* Workaround for Errata 57 "NFCT: NFC Modulation amplitude" found at the Errata document 121 | for your device located at https://infocenter.nordicsemi.com/ */ 122 | if (errata_57()){ 123 | *(volatile uint32_t *)0x40005610 = 0x00000005; 124 | *(volatile uint32_t *)0x40005688 = 0x00000001; 125 | *(volatile uint32_t *)0x40005618 = 0x00000000; 126 | *(volatile uint32_t *)0x40005614 = 0x0000003F; 127 | } 128 | 129 | /* Workaround for Errata 66 "TEMP: Linearity specification not met with default settings" found at the Errata document 130 | for your device located at https://infocenter.nordicsemi.com/ */ 131 | if (errata_66()){ 132 | NRF_TEMP->A0 = NRF_FICR->TEMP.A0; 133 | NRF_TEMP->A1 = NRF_FICR->TEMP.A1; 134 | NRF_TEMP->A2 = NRF_FICR->TEMP.A2; 135 | NRF_TEMP->A3 = NRF_FICR->TEMP.A3; 136 | NRF_TEMP->A4 = NRF_FICR->TEMP.A4; 137 | NRF_TEMP->A5 = NRF_FICR->TEMP.A5; 138 | NRF_TEMP->B0 = NRF_FICR->TEMP.B0; 139 | NRF_TEMP->B1 = NRF_FICR->TEMP.B1; 140 | NRF_TEMP->B2 = NRF_FICR->TEMP.B2; 141 | NRF_TEMP->B3 = NRF_FICR->TEMP.B3; 142 | NRF_TEMP->B4 = NRF_FICR->TEMP.B4; 143 | NRF_TEMP->B5 = NRF_FICR->TEMP.B5; 144 | NRF_TEMP->T0 = NRF_FICR->TEMP.T0; 145 | NRF_TEMP->T1 = NRF_FICR->TEMP.T1; 146 | NRF_TEMP->T2 = NRF_FICR->TEMP.T2; 147 | NRF_TEMP->T3 = NRF_FICR->TEMP.T3; 148 | NRF_TEMP->T4 = NRF_FICR->TEMP.T4; 149 | } 150 | 151 | /* Workaround for Errata 108 "RAM: RAM content cannot be trusted upon waking up from System ON Idle or System OFF mode" found at the Errata document 152 | for your device located at https://infocenter.nordicsemi.com/ */ 153 | if (errata_108()){ 154 | *(volatile uint32_t *)0x40000EE4 = *(volatile uint32_t *)0x10000258 & 0x0000004F; 155 | } 156 | 157 | /* Workaround for Errata 136 "System: Bits in RESETREAS are set when they should not be" found at the Errata document 158 | for your device located at https://infocenter.nordicsemi.com/ */ 159 | if (errata_136()){ 160 | if (NRF_POWER->RESETREAS & POWER_RESETREAS_RESETPIN_Msk){ 161 | NRF_POWER->RESETREAS = ~POWER_RESETREAS_RESETPIN_Msk; 162 | } 163 | } 164 | 165 | /* Enable the FPU if the compiler used floating point unit instructions. __FPU_USED is a MACRO defined by the 166 | * compiler. Since the FPU consumes energy, remember to disable FPU use in the compiler if floating point unit 167 | * operations are not used in your code. */ 168 | #if (__FPU_USED == 1) 169 | SCB->CPACR |= (3UL << 20) | (3UL << 22); 170 | __DSB(); 171 | __ISB(); 172 | #endif 173 | 174 | /* Configure NFCT pins as GPIOs if NFCT is not to be used in your code. If CONFIG_NFCT_PINS_AS_GPIOS is not defined, 175 | two GPIOs (see Product Specification to see which ones) will be reserved for NFC and will not be available as 176 | normal GPIOs. */ 177 | #if defined (CONFIG_NFCT_PINS_AS_GPIOS) 178 | if ((NRF_UICR->NFCPINS & UICR_NFCPINS_PROTECT_Msk) == (UICR_NFCPINS_PROTECT_NFC << UICR_NFCPINS_PROTECT_Pos)){ 179 | NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos; 180 | while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 181 | NRF_UICR->NFCPINS &= ~UICR_NFCPINS_PROTECT_Msk; 182 | while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 183 | NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos; 184 | while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 185 | NVIC_SystemReset(); 186 | } 187 | #endif 188 | 189 | /* Configure GPIO pads as pPin Reset pin if Pin Reset capabilities desired. If CONFIG_GPIO_AS_PINRESET is not 190 | defined, pin reset will not be available. One GPIO (see Product Specification to see which one) will then be 191 | reserved for PinReset and not available as normal GPIO. */ 192 | #if defined (CONFIG_GPIO_AS_PINRESET) 193 | if (((NRF_UICR->PSELRESET[0] & UICR_PSELRESET_CONNECT_Msk) != (UICR_PSELRESET_CONNECT_Connected << UICR_PSELRESET_CONNECT_Pos)) || 194 | ((NRF_UICR->PSELRESET[1] & UICR_PSELRESET_CONNECT_Msk) != (UICR_PSELRESET_CONNECT_Connected << UICR_PSELRESET_CONNECT_Pos))){ 195 | NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos; 196 | while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 197 | NRF_UICR->PSELRESET[0] = 21; 198 | while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 199 | NRF_UICR->PSELRESET[1] = 21; 200 | while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 201 | NRF_NVMC->CONFIG = NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos; 202 | while (NRF_NVMC->READY == NVMC_READY_READY_Busy){} 203 | NVIC_SystemReset(); 204 | } 205 | #endif 206 | 207 | SystemCoreClockUpdate(); 208 | } 209 | 210 | 211 | static bool errata_12(void) 212 | { 213 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 214 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 215 | return true; 216 | } 217 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 218 | return true; 219 | } 220 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 221 | return true; 222 | } 223 | } 224 | 225 | return false; 226 | } 227 | 228 | static bool errata_16(void) 229 | { 230 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 231 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 232 | return true; 233 | } 234 | } 235 | 236 | return false; 237 | } 238 | 239 | static bool errata_31(void) 240 | { 241 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 242 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 243 | return true; 244 | } 245 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 246 | return true; 247 | } 248 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 249 | return true; 250 | } 251 | } 252 | 253 | return false; 254 | } 255 | 256 | static bool errata_32(void) 257 | { 258 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 259 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 260 | return true; 261 | } 262 | } 263 | 264 | return false; 265 | } 266 | 267 | static bool errata_36(void) 268 | { 269 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 270 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 271 | return true; 272 | } 273 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 274 | return true; 275 | } 276 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 277 | return true; 278 | } 279 | } 280 | 281 | return false; 282 | } 283 | 284 | static bool errata_37(void) 285 | { 286 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 287 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 288 | return true; 289 | } 290 | } 291 | 292 | return false; 293 | } 294 | 295 | static bool errata_57(void) 296 | { 297 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 298 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 299 | return true; 300 | } 301 | } 302 | 303 | return false; 304 | } 305 | 306 | static bool errata_66(void) 307 | { 308 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 309 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 310 | return true; 311 | } 312 | } 313 | 314 | return false; 315 | } 316 | 317 | 318 | static bool errata_108(void) 319 | { 320 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 321 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 322 | return true; 323 | } 324 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 325 | return true; 326 | } 327 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 328 | return true; 329 | } 330 | } 331 | 332 | return false; 333 | } 334 | 335 | 336 | static bool errata_136(void) 337 | { 338 | if ((((*(uint32_t *)0xF0000FE0) & 0x000000FF) == 0x6) && (((*(uint32_t *)0xF0000FE4) & 0x0000000F) == 0x0)){ 339 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x30){ 340 | return true; 341 | } 342 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x40){ 343 | return true; 344 | } 345 | if (((*(uint32_t *)0xF0000FE8) & 0x000000F0) == 0x50){ 346 | return true; 347 | } 348 | } 349 | 350 | return false; 351 | } 352 | 353 | 354 | /*lint --flb "Leave library region" */ 355 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/RTE/RTE_Components.h: -------------------------------------------------------------------------------- 1 | 2 | /* 3 | * Auto generated Run-Time-Environment Component Configuration File 4 | * *** Do not modify ! *** 5 | * 6 | * Project: 'ble_app_blinky_pca10040_s132' 7 | * Target: 'nrf52832_xxaa' 8 | */ 9 | 10 | #ifndef RTE_COMPONENTS_H 11 | #define RTE_COMPONENTS_H 12 | 13 | 14 | /* 15 | * Define the Device Header File: 16 | */ 17 | #define CMSIS_device_header "nrf.h" 18 | 19 | 20 | #endif /* RTE_COMPONENTS_H */ 21 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/ExtDll.iex: -------------------------------------------------------------------------------- 1 | [EXTDLL] 2 | Count=0 3 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/app_button.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/app_button.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/app_error.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/app_error.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/app_error_weak.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/app_error_weak.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/app_scheduler.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/app_scheduler.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/app_timer.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/app_timer.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/app_util_platform.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/app_util_platform.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/ble_advdata.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/ble_advdata.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/ble_app_blinky_pca10040_s132_nrf52832_xxaa.dep: -------------------------------------------------------------------------------- 1 | Dependencies for Project 'ble_app_blinky_pca10040_s132', Target 'nrf52832_xxaa': (DO NOT MODIFY !) 2 | F (..\..\..\main.c)(0x5DC0551B)(--c99 -c --cpu Cortex-M4.fp -D__MICROLIB -g -O0 --apcs=interwork --split_sections -I ..\..\..\config -I ..\..\..\..\..\..\components -I ..\..\..\..\..\..\components\ble\ble_advertising -I ..\..\..\..\..\..\components\ble\ble_dtm -I ..\..\..\..\..\..\components\ble\ble_racp -I ..\..\..\..\..\..\components\ble\ble_services\ble_ancs_c -I ..\..\..\..\..\..\components\ble\ble_services\ble_ans_c -I ..\..\..\..\..\..\components\ble\ble_services\ble_bas -I ..\..\..\..\..\..\components\ble\ble_services\ble_bas_c -I ..\..\..\..\..\..\components\ble\ble_services\ble_cscs -I ..\..\..\..\..\..\components\ble\ble_services\ble_cts_c -I ..\..\..\..\..\..\components\ble\ble_services\ble_dfu -I ..\..\..\..\..\..\components\ble\ble_services\ble_dis -I ..\..\..\..\..\..\components\ble\ble_services\ble_gls -I ..\..\..\..\..\..\components\ble\ble_services\ble_hids -I ..\..\..\..\..\..\components\ble\ble_services\ble_hrs -I ..\..\..\..\..\..\components\ble\ble_services\ble_hrs_c -I ..\..\..\..\..\..\components\ble\ble_services\ble_hts -I ..\..\..\..\..\..\components\ble\ble_services\ble_ias -I ..\..\..\..\..\..\components\ble\ble_services\ble_ias_c -I ..\..\..\..\..\..\components\ble\ble_services\ble_lbs -I ..\..\..\..\..\..\components\ble\ble_services\ble_lbs_c -I ..\..\..\..\..\..\components\ble\ble_services\ble_lls -I ..\..\..\..\..\..\components\ble\ble_services\ble_nus -I ..\..\..\..\..\..\components\ble\ble_services\ble_nus_c -I ..\..\..\..\..\..\components\ble\ble_services\ble_rscs -I ..\..\..\..\..\..\components\ble\ble_services\ble_rscs_c -I ..\..\..\..\..\..\components\ble\ble_services\ble_tps -I ..\..\..\..\..\..\components\ble\common -I ..\..\..\..\..\..\components\ble\nrf_ble_gatt -I ..\..\..\..\..\..\components\ble\nrf_ble_qwr -I ..\..\..\..\..\..\components\ble\peer_manager -I ..\..\..\..\..\..\components\boards -I ..\..\..\..\..\..\components\drivers_nrf\clock -I ..\..\..\..\..\..\components\drivers_nrf\common -I ..\..\..\..\..\..\components\drivers_nrf\comp -I ..\..\..\..\..\..\components\drivers_nrf\delay -I ..\..\..\..\..\..\components\drivers_nrf\gpiote -I ..\..\..\..\..\..\components\drivers_nrf\hal -I ..\..\..\..\..\..\components\drivers_nrf\i2s -I ..\..\..\..\..\..\components\drivers_nrf\lpcomp -I ..\..\..\..\..\..\components\drivers_nrf\pdm -I ..\..\..\..\..\..\components\drivers_nrf\power -I ..\..\..\..\..\..\components\drivers_nrf\ppi -I ..\..\..\..\..\..\components\drivers_nrf\pwm -I ..\..\..\..\..\..\components\drivers_nrf\qdec -I ..\..\..\..\..\..\components\drivers_nrf\rng -I ..\..\..\..\..\..\components\drivers_nrf\rtc -I ..\..\..\..\..\..\components\drivers_nrf\saadc -I ..\..\..\..\..\..\components\drivers_nrf\spi_master -I ..\..\..\..\..\..\components\drivers_nrf\spi_slave -I ..\..\..\..\..\..\components\drivers_nrf\swi -I ..\..\..\..\..\..\components\drivers_nrf\timer -I ..\..\..\..\..\..\components\drivers_nrf\twi_master -I ..\..\..\..\..\..\components\drivers_nrf\twis_slave -I ..\..\..\..\..\..\components\drivers_nrf\uart -I ..\..\..\..\..\..\components\drivers_nrf\usbd -I ..\..\..\..\..\..\components\drivers_nrf\wdt -I ..\..\..\..\..\..\components\libraries\atomic -I ..\..\..\..\..\..\components\libraries\atomic_fifo -I ..\..\..\..\..\..\components\libraries\balloc -I ..\..\..\..\..\..\components\libraries\button -I ..\..\..\..\..\..\components\libraries\cli -I ..\..\..\..\..\..\components\libraries\crc16 -I ..\..\..\..\..\..\components\libraries\crc32 -I ..\..\..\..\..\..\components\libraries\csense -I ..\..\..\..\..\..\components\libraries\csense_drv -I ..\..\..\..\..\..\components\libraries\ecc -I ..\..\..\..\..\..\components\libraries\experimental_log -I ..\..\..\..\..\..\components\libraries\experimental_log\src -I ..\..\..\..\..\..\components\libraries\experimental_memobj -I ..\..\..\..\..\..\components\libraries\experimental_section_vars -I ..\..\..\..\..\..\components\libraries\fds -I ..\..\..\..\..\..\components\libraries\fstorage -I ..\..\..\..\..\..\components\libraries\gpiote -I ..\..\..\..\..\..\components\libraries\hardfault -I ..\..\..\..\..\..\components\libraries\hci -I ..\..\..\..\..\..\components\libraries\led_softblink -I ..\..\..\..\..\..\components\libraries\low_power_pwm -I ..\..\..\..\..\..\components\libraries\mem_manager -I ..\..\..\..\..\..\components\libraries\mutex -I ..\..\..\..\..\..\components\libraries\pwm -I ..\..\..\..\..\..\components\libraries\pwr_mgmt -I ..\..\..\..\..\..\components\libraries\queue -I ..\..\..\..\..\..\components\libraries\scheduler -I ..\..\..\..\..\..\components\libraries\slip -I ..\..\..\..\..\..\components\libraries\strerror -I ..\..\..\..\..\..\components\libraries\timer -I ..\..\..\..\..\..\components\libraries\twi -I ..\..\..\..\..\..\components\libraries\twi_mngr -I ..\..\..\..\..\..\components\libraries\uart -I ..\..\..\..\..\..\components\libraries\usbd -I ..\..\..\..\..\..\components\libraries\usbd\class\audio -I ..\..\..\..\..\..\components\libraries\usbd\class\cdc -I ..\..\..\..\..\..\components\libraries\usbd\class\cdc\acm -I ..\..\..\..\..\..\components\libraries\usbd\class\hid -I ..\..\..\..\..\..\components\libraries\usbd\class\hid\generic -I ..\..\..\..\..\..\components\libraries\usbd\class\hid\kbd -I ..\..\..\..\..\..\components\libraries\usbd\class\hid\mouse -I ..\..\..\..\..\..\components\libraries\usbd\class\msc -I ..\..\..\..\..\..\components\libraries\usbd\config -I ..\..\..\..\..\..\components\libraries\util -I ..\..\..\..\..\..\components\softdevice\common -I ..\..\..\..\..\..\components\softdevice\s132\headers -I ..\..\..\..\..\..\components\softdevice\s132\headers\nrf52 -I ..\..\..\..\..\..\components\toolchain -I ..\..\..\..\..\..\external\fprintf -I ..\..\..\..\..\..\external\segger_rtt -I ..\config --reduce_paths -IC:\Users\haho\Documents\nRF_SDK\nRF5_SDK_14.2\examples\ble_peripheral\MMD\pca10040\s132\arm5_no_packs\RTE -IC:\Keil_v5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include -IC:\Keil_v5\ARM\PACK\NordicSemiconductor\nRF_DeviceFamilyPack\8.15.0\Device\Include -IC:\Keil_v5\ARM\CMSIS\Include -D__UVISION_VERSION="521" -D_RTE_ -DNRF52 -DBOARD_PCA10040 -DCONFIG_GPIO_AS_PINRESET -DFLOAT_ABI_HARD -DNRF52 -DNRF52832_XXAA -DNRF52_PAN_74 -DNRF_SD_BLE_API_VERSION="5" -DS132 -DSOFTDEVICE_PRESENT -DSWI_DISABLE0 -DDEBUG -DCONFIG_JLINK_MONITOR_ENABLED -o .\_build\main.o --omf_browse .\_build\main.crf --depend .\_build\main.d) 3 | I (C:\Keil_v5\ARM\ARMCC\include\stdint.h)(0x574E9286) 4 | I (C:\Keil_v5\ARM\ARMCC\include\string.h)(0x574E9286) 5 | I (..\..\..\..\..\..\components\libraries\util\nordic_common.h)(0x5A0B5C8F) 6 | I (C:\Keil_v5\ARM\PACK\NordicSemiconductor\nRF_DeviceFamilyPack\8.15.0\Device\Include\nrf.h)(0x59D3498E) 7 | I (C:\Keil_v5\ARM\PACK\NordicSemiconductor\nRF_DeviceFamilyPack\8.15.0\Device\Include\nrf52.h)(0x59D34992) 8 | I (C:\Keil_v5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include\core_cm4.h)(0x56260B6C) 9 | I (C:\Keil_v5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include\core_cmInstr.h)(0x5625F7B0) 10 | I (C:\Keil_v5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include\cmsis_armcc.h)(0x5625F7B0) 11 | I (C:\Keil_v5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include\core_cmFunc.h)(0x5625F7B0) 12 | I (C:\Keil_v5\ARM\PACK\ARM\CMSIS\4.5.0\CMSIS\Include\core_cmSimd.h)(0x5625F7B0) 13 | I (C:\Keil_v5\ARM\PACK\NordicSemiconductor\nRF_DeviceFamilyPack\8.15.0\Device\Include\system_nrf52.h)(0x59D3498C) 14 | I (C:\Keil_v5\ARM\PACK\NordicSemiconductor\nRF_DeviceFamilyPack\8.15.0\Device\Include\nrf52_bitfields.h)(0x59D34992) 15 | I (C:\Keil_v5\ARM\PACK\NordicSemiconductor\nRF_DeviceFamilyPack\8.15.0\Device\Include\nrf51_to_nrf52.h)(0x59D34990) 16 | I (C:\Keil_v5\ARM\PACK\NordicSemiconductor\nRF_DeviceFamilyPack\8.15.0\Device\Include\nrf52_name_change.h)(0x59D34990) 17 | I (C:\Keil_v5\ARM\PACK\NordicSemiconductor\nRF_DeviceFamilyPack\8.15.0\Device\Include\compiler_abstraction.h)(0x59D34990) 18 | I (..\..\..\..\..\..\components\libraries\util\app_error.h)(0x5A0B5C8F) 19 | I (C:\Keil_v5\ARM\ARMCC\include\stdio.h)(0x574E9286) 20 | I (C:\Keil_v5\ARM\ARMCC\include\stdbool.h)(0x574E9286) 21 | I (..\..\..\..\..\..\components\libraries\util\sdk_errors.h)(0x5A0B5C8F) 22 | I (..\..\..\..\..\..\components\softdevice\s132\headers\nrf_error.h)(0x5954B958) 23 | I (..\config\sdk_config.h)(0x5AA26154) 24 | I (..\..\..\..\..\..\components\libraries\util\app_error_weak.h)(0x5A0B5C8F) 25 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble.h)(0x5954B958) 26 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble_ranges.h)(0x5954B958) 27 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble_types.h)(0x5954B958) 28 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble_gap.h)(0x5954B958) 29 | I (..\..\..\..\..\..\components\softdevice\s132\headers\nrf_svc.h)(0x5954B958) 30 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble_l2cap.h)(0x5954B958) 31 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble_err.h)(0x5954B958) 32 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble_gatt.h)(0x5954B958) 33 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble_gattc.h)(0x5954B958) 34 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble_gatts.h)(0x5954B958) 35 | I (..\..\..\..\..\..\components\softdevice\s132\headers\ble_hci.h)(0x5954B958) 36 | I (..\..\..\..\..\..\components\ble\common\ble_srv_common.h)(0x5A0B5C8F) 37 | I (..\..\..\..\..\..\components\libraries\util\app_util.h)(0x5A0B5C8F) 38 | I (C:\Keil_v5\ARM\ARMCC\include\stddef.h)(0x574E9286) 39 | I (..\..\..\..\..\..\components\ble\common\ble_advdata.h)(0x5A0B5C8F) 40 | I (..\..\..\..\..\..\components\ble\common\ble_conn_params.h)(0x5A0B5C8F) 41 | I (..\..\..\..\..\..\components\softdevice\common\nrf_sdh.h)(0x5A0B5C90) 42 | I (..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.h)(0x5A0B5C8F) 43 | I (..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section.h)(0x5A0B5C8F) 44 | I (..\..\..\..\..\..\components\libraries\util\nrf_assert.h)(0x5A0B5C8F) 45 | I (..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.h)(0x5A0B5C90) 46 | I (..\..\..\..\..\..\components\boards\boards.h)(0x5A0B5C8F) 47 | F (..\config\sdk_config.h)(0x5DC05498)() 48 | F (..\..\..\JLINK_MONITOR.c)(0x5DC05300)() 49 | F (..\..\..\JLINK_MONITOR_ISR_ARM.s)(0x5DC05300)() 50 | F (..\..\..\..\..\..\components\boards\boards.c)(0x5DAA1F0C)() 51 | F (..\..\..\..\..\..\external\utf_converter\utf.c)(0x5DA9DB88)() 52 | F (..\..\..\..\..\..\components\ble\common\ble_advdata.c)(0x5DAA1F0C)() 53 | F (..\..\..\..\..\..\components\ble\common\ble_conn_params.c)(0x5DAA1F0C)() 54 | F (..\..\..\..\..\..\components\ble\common\ble_conn_state.c)(0x5DAA1F0C)() 55 | F (..\..\..\..\..\..\components\ble\common\ble_srv_common.c)(0x5DAA1F0C)() 56 | F (..\..\..\..\..\..\components\ble\nrf_ble_gatt\nrf_ble_gatt.c)(0x5DAA1F0C)() 57 | F (..\..\..\..\..\..\components\ble\nrf_ble_qwr\nrf_ble_qwr.c)(0x5DAA1F0C)() 58 | F (..\..\..\..\..\..\components\ble\ble_services\ble_lbs\ble_lbs.c)(0x5DAA1F0C)() 59 | F (..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_clock.c)(0x5DAA1F14)() 60 | F (..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_uart.c)(0x5DAA1F14)() 61 | F (..\..\..\..\..\..\modules\nrfx\soc\nrfx_atomic.c)(0x5DAA1F14)() 62 | F (..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_clock.c)(0x5DAA1F14)() 63 | F (..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_gpiote.c)(0x5DAA1F14)() 64 | F (..\..\..\..\..\..\modules\nrfx\drivers\src\prs\nrfx_prs.c)(0x5DAA1F14)() 65 | F (..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uart.c)(0x5DAA1F14)() 66 | F (..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_uarte.c)(0x5DAA1F14)() 67 | F (..\..\..\..\..\..\components\libraries\button\app_button.c)(0x5DAA1F0C)() 68 | F (..\..\..\..\..\..\components\libraries\util\app_error.c)(0x5DAA1F0C)() 69 | F (..\..\..\..\..\..\components\libraries\util\app_error_handler_keil.c)(0x5DAA1F0C)() 70 | F (..\..\..\..\..\..\components\libraries\util\app_error_weak.c)(0x5DAA1F0C)() 71 | F (..\..\..\..\..\..\components\libraries\scheduler\app_scheduler.c)(0x5DAA1F0C)() 72 | F (..\..\..\..\..\..\components\libraries\timer\app_timer2.c)(0x5DAA1F0C)() 73 | F (..\..\..\..\..\..\components\libraries\util\app_util_platform.c)(0x5DAA1F0C)() 74 | F (..\..\..\..\..\..\components\libraries\timer\drv_rtc.c)(0x5DAA1F0C)() 75 | F (..\..\..\..\..\..\components\libraries\hardfault\hardfault_implementation.c)(0x5DAA1F0C)() 76 | F (..\..\..\..\..\..\components\libraries\util\nrf_assert.c)(0x5DAA1F0C)() 77 | F (..\..\..\..\..\..\components\libraries\atomic_fifo\nrf_atfifo.c)(0x5DAA1F0C)() 78 | F (..\..\..\..\..\..\components\libraries\atomic_flags\nrf_atflags.c)(0x5DAA1F0C)() 79 | F (..\..\..\..\..\..\components\libraries\atomic\nrf_atomic.c)(0x5DAA1F0C)() 80 | F (..\..\..\..\..\..\components\libraries\balloc\nrf_balloc.c)(0x5DAA1F0C)() 81 | F (..\..\..\..\..\..\external\fprintf\nrf_fprintf.c)(0x5DAA1F13)() 82 | F (..\..\..\..\..\..\external\fprintf\nrf_fprintf_format.c)(0x5DA9DB88)() 83 | F (..\..\..\..\..\..\components\libraries\memobj\nrf_memobj.c)(0x5DAA1F0C)() 84 | F (..\..\..\..\..\..\components\libraries\pwr_mgmt\nrf_pwr_mgmt.c)(0x5DAA1F0C)() 85 | F (..\..\..\..\..\..\components\libraries\ringbuf\nrf_ringbuf.c)(0x5DAA1F0C)() 86 | F (..\..\..\..\..\..\components\libraries\experimental_section_vars\nrf_section_iter.c)(0x5DAA1F0C)() 87 | F (..\..\..\..\..\..\components\libraries\sortlist\nrf_sortlist.c)(0x5DAA1F0C)() 88 | F (..\..\..\..\..\..\components\libraries\strerror\nrf_strerror.c)(0x5DAA1F0C)() 89 | F (..\..\..\..\..\..\components\libraries\log\src\nrf_log_backend_rtt.c)(0x5DAA1F0C)() 90 | F (..\..\..\..\..\..\components\libraries\log\src\nrf_log_backend_serial.c)(0x5DAA1F0C)() 91 | F (..\..\..\..\..\..\components\libraries\log\src\nrf_log_backend_uart.c)(0x5DAA1F0C)() 92 | F (..\..\..\..\..\..\components\libraries\log\src\nrf_log_default_backends.c)(0x5DAA1F0C)() 93 | F (..\..\..\..\..\..\components\libraries\log\src\nrf_log_frontend.c)(0x5DAA1F0C)() 94 | F (..\..\..\..\..\..\components\libraries\log\src\nrf_log_str_formatter.c)(0x5DAA1F0C)() 95 | F (..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT.c)(0x5DA9DB88)() 96 | F (..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_Syscalls_KEIL.c)(0x5DA9DB88)() 97 | F (..\..\..\..\..\..\external\segger_rtt\SEGGER_RTT_printf.c)(0x5DA9DB88)() 98 | F (..\..\..\..\..\..\components\softdevice\common\nrf_sdh.c)(0x5DAA1F0D)() 99 | F (..\..\..\..\..\..\components\softdevice\common\nrf_sdh_ble.c)(0x5DAA1F0D)() 100 | F (..\..\..\..\..\..\components\softdevice\common\nrf_sdh_soc.c)(0x5DAA1F0D)() 101 | F (RTE\Device\nRF52832_xxAA\arm_startup_nrf52.s)(0x5DC05300)() 102 | F (RTE\Device\nRF52832_xxAA\system_nrf52.c)(0x5DC05300)() 103 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/ble_conn_params.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/ble_conn_params.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/ble_conn_state.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/ble_conn_state.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/ble_lbs.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/ble_lbs.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/ble_srv_common.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/ble_srv_common.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/boards.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/boards.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/hardfault_handler_keil.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/hardfault_handler_keil.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/hardfault_implementation.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/hardfault_implementation.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/jlink_monitor.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/jlink_monitor.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/main.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/main.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf52832_xxaa.build_log.htm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf52832_xxaa.build_log.htm -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf52832_xxaa.lnp: -------------------------------------------------------------------------------- 1 | --cpu Cortex-M4.fp 2 | ".\_build\main.o" 3 | ".\_build\jlink_monitor.o" 4 | ".\_build\jlink_monitor_isr_arm.o" 5 | ".\_build\boards.o" 6 | ".\_build\ble_advdata.o" 7 | ".\_build\ble_conn_params.o" 8 | ".\_build\ble_conn_state.o" 9 | ".\_build\ble_srv_common.o" 10 | ".\_build\nrf_ble_gatt.o" 11 | ".\_build\ble_lbs.o" 12 | ".\_build\nrf_drv_clock.o" 13 | ".\_build\nrf_drv_common.o" 14 | ".\_build\nrf_drv_gpiote.o" 15 | ".\_build\nrf_drv_uart.o" 16 | ".\_build\app_button.o" 17 | ".\_build\app_error.o" 18 | ".\_build\app_error_weak.o" 19 | ".\_build\app_scheduler.o" 20 | ".\_build\app_timer.o" 21 | ".\_build\app_util_platform.o" 22 | ".\_build\hardfault_implementation.o" 23 | ".\_build\nrf_assert.o" 24 | ".\_build\nrf_atfifo.o" 25 | ".\_build\nrf_balloc.o" 26 | ".\_build\nrf_fprintf.o" 27 | ".\_build\nrf_fprintf_format.o" 28 | ".\_build\nrf_memobj.o" 29 | ".\_build\nrf_pwr_mgmt.o" 30 | ".\_build\nrf_section_iter.o" 31 | ".\_build\nrf_strerror.o" 32 | ".\_build\sdk_mapped_flags.o" 33 | ".\_build\hardfault_handler_keil.o" 34 | ".\_build\nrf_log_backend_rtt.o" 35 | ".\_build\nrf_log_backend_serial.o" 36 | ".\_build\nrf_log_backend_uart.o" 37 | ".\_build\nrf_log_default_backends.o" 38 | ".\_build\nrf_log_frontend.o" 39 | ".\_build\nrf_log_str_formatter.o" 40 | ".\_build\segger_rtt.o" 41 | ".\_build\segger_rtt_syscalls_keil.o" 42 | ".\_build\segger_rtt_printf.o" 43 | ".\_build\nrf_sdh.o" 44 | ".\_build\nrf_sdh_ble.o" 45 | ".\_build\nrf_sdh_soc.o" 46 | ".\_build\arm_startup_nrf52.o" 47 | ".\_build\system_nrf52.o" 48 | --library_type=microlib --strict --scatter ".\_build\nrf52832_xxaa.sct" 49 | --diag_suppress 6330 --summary_stderr --info summarysizes --map --xref --callgraph --symbols 50 | --info sizes --info totals --info unused --info veneers 51 | --list ".\_build\nrf52832_xxaa.map" -o .\_build\nrf52832_xxaa.axf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf52832_xxaa.sct: -------------------------------------------------------------------------------- 1 | ; ************************************************************* 2 | ; *** Scatter-Loading Description File generated by uVision *** 3 | ; ************************************************************* 4 | 5 | LR_IROM1 0x00023000 0x0005D000 { ; load region size_region 6 | ER_IROM1 0x00023000 0x0005D000 { ; load address = execution address 7 | *.o (RESET, +First) 8 | *(InRoot$$Sections) 9 | .ANY (+RO) 10 | } 11 | RW_IRAM1 0x20002180 0x0000DE80 { ; RW data 12 | .ANY (+RW +ZI) 13 | } 14 | } 15 | 16 | -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_assert.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_assert.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_atfifo.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_atfifo.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_balloc.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_balloc.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_ble_gatt.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_ble_gatt.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_drv_clock.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_drv_clock.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_drv_common.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_drv_common.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_drv_gpiote.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_drv_gpiote.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_drv_uart.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_drv_uart.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_fprintf.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_fprintf.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_fprintf_format.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_fprintf_format.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_log_backend_rtt.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_log_backend_rtt.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_log_backend_serial.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_log_backend_serial.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_log_backend_uart.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_log_backend_uart.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_log_default_backends.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_log_default_backends.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_log_frontend.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_log_frontend.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_log_str_formatter.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_log_str_formatter.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_memobj.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_memobj.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_pwr_mgmt.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_pwr_mgmt.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_sdh.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_sdh.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_sdh_ble.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_sdh_ble.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_sdh_soc.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_sdh_soc.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_section_iter.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_section_iter.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/nrf_strerror.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/nrf_strerror.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/sdk_mapped_flags.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/sdk_mapped_flags.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/segger_rtt.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/segger_rtt.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/segger_rtt_printf.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/segger_rtt_printf.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/segger_rtt_syscalls_keil.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/segger_rtt_syscalls_keil.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/_build/system_nrf52.crf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/NordicPlayground/j-link-monitoring-mode-debugging/ce7f7b29bc7f1bb6b7cdea0095c14e8d93b1e6cf/pca10040/s132/arm5_no_packs/_build/system_nrf52.crf -------------------------------------------------------------------------------- /pca10040/s132/arm5_no_packs/ble_app_blinky_pca10040_s132.uvoptx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1.0 5 | 6 |
### uVision Project, (C) Keil Software
7 | 8 | nrf52832_xxaa 9 | 0x4 10 | ARM-ADS 11 | 12 | 13 | 1 14 | 1 15 | 0 16 | 1 17 | 18 | 19 | 1 20 | 65535 21 | 0 22 | 0 23 | 0 24 | 25 | 26 | 79 27 | 66 28 | 8 29 | .\_build\ 30 | 31 | 0 32 | 33 | 0 34 | 1 35 | 1 36 | 1 37 | 1 38 | 1 39 | 1 40 | 1 41 | 1 42 | 1 43 | 1 44 | 1 45 | 1 46 | 1 47 | 0 48 | 1 49 | 0 50 | 1 51 | 1 52 | 1 53 | 0 54 | 0 55 | 7 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | Segger\JL2CM3.dll 67 | 68 | 69 | 70 | 0 71 | JL2CM3 72 | -U408001579 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) 73 | 74 | 75 | 0 76 | UL2CM3 77 | UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx)) 78 | 79 | 80 | 81 | 82 | 0 83 | 84 | 85 | 0 86 | 0 87 | 0 88 | 0 89 | 0 90 | 0 91 | 0 92 | 0 93 | 0 94 | 0 95 | 0 96 | 0 97 | 0 98 | 0 99 | 0 100 | 0 101 | 0 102 | 0 103 | 0 104 | 0 105 | 0 106 | 0 107 | 0 108 | 0 109 | 110 | 111 | 112 | 113 | 114 | flash_s132_nrf52_7.0.1_softdevice 115 | 0x4 116 | ARM-ADS 117 | 118 | 119 | 1 120 | 1 121 | 0 122 | 1 123 | 124 | 125 | 1 126 | 65535 127 | 0 128 | 0 129 | 0 130 | 131 | 132 | 79 133 | 66 134 | 8 135 | .\_build\ 136 | 137 | 0 138 | 139 | 0 140 | 1 141 | 1 142 | 1 143 | 1 144 | 1 145 | 1 146 | 1 147 | 1 148 | 1 149 | 1 150 | 1 151 | 1 152 | 1 153 | 0 154 | 1 155 | 0 156 | 1 157 | 1 158 | 1 159 | 0 160 | 0 161 | 7 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | Segger\JL2CM3.dll 173 | 174 | 175 | 176 | 0 177 | JL2CM3 178 | -U408001579 -O78 -S0 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC2000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) 179 | 180 | 181 | 0 182 | UL2CM3 183 | UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0nrf52xxx -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx)) 184 | 185 | 186 | 187 | 188 | 0 189 | 190 | 191 | 0 192 | 0 193 | 0 194 | 0 195 | 0 196 | 0 197 | 0 198 | 0 199 | 0 200 | 0 201 | 0 202 | 0 203 | 0 204 | 0 205 | 0 206 | 0 207 | 0 208 | 0 209 | 0 210 | 0 211 | 0 212 | 0 213 | 0 214 | 0 215 | 216 | 217 | 218 | 219 |
220 | 221 | 222 | -------------------------------------------------------------------------------- /pca10040/s132/ses/Output/ble_app_blinky_pca10040_s132 Debug/Obj/ble_app_blinky_pca10040_s132.ind: -------------------------------------------------------------------------------- 1 | --start-group 2 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/thumb_crt0.o" 3 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_log_backend_rtt.o" 4 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_log_backend_serial.o" 5 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_log_backend_uart.o" 6 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_log_default_backends.o" 7 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_log_frontend.o" 8 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_log_str_formatter.o" 9 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/app_button.o" 10 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/app_error.o" 11 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/app_error_weak.o" 12 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/app_scheduler.o" 13 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/app_timer.o" 14 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/app_util_platform.o" 15 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/hardfault_implementation.o" 16 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_assert.o" 17 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_atfifo.o" 18 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_balloc.o" 19 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_fprintf.o" 20 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_fprintf_format.o" 21 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_memobj.o" 22 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_pwr_mgmt.o" 23 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_section_iter.o" 24 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_strerror.o" 25 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/sdk_mapped_flags.o" 26 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/boards.o" 27 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_drv_clock.o" 28 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_drv_common.o" 29 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_drv_gpiote.o" 30 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_drv_uart.o" 31 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/main.o" 32 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/SEGGER_RTT.o" 33 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/SEGGER_RTT_Syscalls_SES.o" 34 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/SEGGER_RTT_printf.o" 35 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/ble_advdata.o" 36 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/ble_conn_params.o" 37 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/ble_conn_state.o" 38 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/ble_srv_common.o" 39 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_ble_gatt.o" 40 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/ses_nRF_Startup.o" 41 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/ses_nrf52_Vectors.o" 42 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/system_nrf52.o" 43 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/JLINK_MONITOR_ISR_SES.o" 44 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/JLINK_MONITOR.o" 45 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/ble_lbs.o" 46 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_sdh.o" 47 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_sdh_ble.o" 48 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/nrf_sdh_soc.o" 49 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/bsp.o" 50 | "Output/ble_app_blinky_pca10040_s132 Debug/Obj/bsp_btn_ble.o" 51 | "C:/Program Files/SEGGER/SEGGER Embedded Studio 3.30/lib/libdebugio_mempoll_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 52 | "C:/Program Files/SEGGER/SEGGER Embedded Studio 3.30/lib/libm_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 53 | "C:/Program Files/SEGGER/SEGGER Embedded Studio 3.30/lib/libc_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 54 | "C:/Program Files/SEGGER/SEGGER Embedded Studio 3.30/lib/libcpp_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 55 | "C:/Program Files/SEGGER/SEGGER Embedded Studio 3.30/lib/libdebugio_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 56 | "C:/Program Files/SEGGER/SEGGER Embedded Studio 3.30/lib/libvfprintf_v7em_fpv4_sp_d16_hard_t_le_eabi.o" 57 | "C:/Program Files/SEGGER/SEGGER Embedded Studio 3.30/lib/libvfscanf_v7em_fpv4_sp_d16_hard_t_le_eabi.o" 58 | --end-group 59 | -------------------------------------------------------------------------------- /pca10040/s132/ses/Output/ble_app_blinky_pca10040_s132 Debug/Obj/ble_app_blinky_pca10040_s132.ld: -------------------------------------------------------------------------------- 1 | MEMORY 2 | { 3 | UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0 4 | RAM (wx) : ORIGIN = 0x20000000, LENGTH = 0x00010000 5 | FLASH (wx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 6 | } 7 | 8 | 9 | SECTIONS 10 | { 11 | __RAM_segment_start__ = 0x20000000; 12 | __RAM_segment_end__ = 0x20010000; 13 | __RAM_segment_size__ = 0x00010000; 14 | __FLASH_segment_start__ = 0x00000000; 15 | __FLASH_segment_end__ = 0x00080000; 16 | __FLASH_segment_size__ = 0x00080000; 17 | 18 | __HEAPSIZE__ = 512; 19 | __STACKSIZE_ABT__ = 0; 20 | __STACKSIZE_FIQ__ = 0; 21 | __STACKSIZE_IRQ__ = 0; 22 | __STACKSIZE_PROCESS__ = 0; 23 | __STACKSIZE_SVC__ = 0; 24 | __STACKSIZE_UND__ = 0; 25 | __STACKSIZE__ = 0x800; 26 | 27 | __reserved_ram_load_start__ = 0x20000000; 28 | .reserved_ram 0x20000000 (NOLOAD) : AT(0x20000000) 29 | { 30 | __reserved_ram_start__ = .; 31 | *(.reserved_ram .reserved_ram.*) 32 | . = MAX(__reserved_ram_start__ + 0x20002180-0x20000000 , .); 33 | } 34 | __reserved_ram_end__ = __reserved_ram_start__ + SIZEOF(.reserved_ram); 35 | __reserved_ram_size__ = SIZEOF(.reserved_ram); 36 | __reserved_ram_load_end__ = __reserved_ram_end__; 37 | 38 | . = ASSERT(__reserved_ram_start__ == __reserved_ram_end__ || (__reserved_ram_end__ >= __RAM_segment_start__ && __reserved_ram_end__ <= __RAM_segment_end__) , "error: .reserved_ram is too large to fit in RAM memory segment"); 39 | 40 | __vectors_ram_load_start__ = 0x20002180; 41 | .vectors_ram 0x20002180 (NOLOAD) : AT(0x20002180) 42 | { 43 | __vectors_ram_start__ = .; 44 | __app_ram_start__ = __vectors_ram_start__; 45 | *(.vectors_ram .vectors_ram.*) 46 | } 47 | __vectors_ram_end__ = __vectors_ram_start__ + SIZEOF(.vectors_ram); 48 | __vectors_ram_size__ = SIZEOF(.vectors_ram); 49 | __vectors_ram_load_end__ = __vectors_ram_end__; 50 | 51 | . = ASSERT(__vectors_ram_start__ == __vectors_ram_end__ || (__vectors_ram_end__ >= __RAM_segment_start__ && __vectors_ram_end__ <= __RAM_segment_end__) , "error: .vectors_ram is too large to fit in RAM memory segment"); 52 | . = ASSERT(__reserved_ram_end__ <= __vectors_ram_start__ , "error: section .reserved_ram overlaps absolute placed section .vectors_ram"); 53 | 54 | __nrf_sections_run_load_start__ = ALIGN(__vectors_ram_end__ , 4); 55 | .nrf_sections_run ALIGN(__vectors_ram_end__ , 4) (NOLOAD) : AT(ALIGN(__vectors_ram_end__ , 4)) 56 | { 57 | __nrf_sections_run_start__ = .; 58 | __start_nrf_sections_run = __nrf_sections_run_start__; 59 | KEEP(*(.nrf_sections_run .nrf_sections_run.*)) 60 | } 61 | __nrf_sections_run_end__ = __nrf_sections_run_start__ + SIZEOF(.nrf_sections_run); 62 | __nrf_sections_run_size__ = SIZEOF(.nrf_sections_run); 63 | __nrf_sections_run_load_end__ = __nrf_sections_run_end__; 64 | 65 | . = ASSERT(__nrf_sections_run_start__ == __nrf_sections_run_end__ || (__nrf_sections_run_end__ >= __RAM_segment_start__ && __nrf_sections_run_end__ <= __RAM_segment_end__) , "error: .nrf_sections_run is too large to fit in RAM memory segment"); 66 | 67 | __reserved_flash_load_start__ = 0x0; 68 | .reserved_flash 0x0 (NOLOAD) : AT(0x0) 69 | { 70 | __reserved_flash_start__ = .; 71 | *(.reserved_flash .reserved_flash.*) 72 | . = MAX(__reserved_flash_start__ + 0x23000-0x0 , .); 73 | } 74 | __reserved_flash_end__ = __reserved_flash_start__ + SIZEOF(.reserved_flash); 75 | __reserved_flash_size__ = SIZEOF(.reserved_flash); 76 | __reserved_flash_load_end__ = __reserved_flash_end__; 77 | 78 | . = ASSERT(__reserved_flash_start__ == __reserved_flash_end__ || (__reserved_flash_end__ >= __FLASH_segment_start__ && __reserved_flash_end__ <= __FLASH_segment_end__) , "error: .reserved_flash is too large to fit in FLASH memory segment"); 79 | 80 | __vectors_load_start__ = 0x23000; 81 | .vectors 0x23000 : AT(0x23000) 82 | { 83 | __vectors_start__ = .; 84 | *(.vectors .vectors.*) 85 | } 86 | __vectors_end__ = __vectors_start__ + SIZEOF(.vectors); 87 | __vectors_size__ = SIZEOF(.vectors); 88 | __vectors_load_end__ = __vectors_end__; 89 | 90 | . = ASSERT(__vectors_start__ == __vectors_end__ || (__vectors_end__ >= __FLASH_segment_start__ && __vectors_end__ <= __FLASH_segment_end__) , "error: .vectors is too large to fit in FLASH memory segment"); 91 | . = ASSERT(__reserved_flash_end__ <= __vectors_start__ , "error: section .reserved_flash overlaps absolute placed section .vectors"); 92 | 93 | __init_load_start__ = ALIGN(__vectors_end__ , 4); 94 | .init ALIGN(__vectors_end__ , 4) : AT(ALIGN(__vectors_end__ , 4)) 95 | { 96 | __init_start__ = .; 97 | *(.init .init.*) 98 | } 99 | __init_end__ = __init_start__ + SIZEOF(.init); 100 | __init_size__ = SIZEOF(.init); 101 | __init_load_end__ = __init_end__; 102 | 103 | . = ASSERT(__init_start__ == __init_end__ || (__init_end__ >= __FLASH_segment_start__ && __init_end__ <= __FLASH_segment_end__) , "error: .init is too large to fit in FLASH memory segment"); 104 | 105 | __init_rodata_load_start__ = ALIGN(__init_end__ , 4); 106 | .init_rodata ALIGN(__init_end__ , 4) : AT(ALIGN(__init_end__ , 4)) 107 | { 108 | __init_rodata_start__ = .; 109 | *(.init_rodata .init_rodata.*) 110 | } 111 | __init_rodata_end__ = __init_rodata_start__ + SIZEOF(.init_rodata); 112 | __init_rodata_size__ = SIZEOF(.init_rodata); 113 | __init_rodata_load_end__ = __init_rodata_end__; 114 | 115 | . = ASSERT(__init_rodata_start__ == __init_rodata_end__ || (__init_rodata_end__ >= __FLASH_segment_start__ && __init_rodata_end__ <= __FLASH_segment_end__) , "error: .init_rodata is too large to fit in FLASH memory segment"); 116 | 117 | __text_load_start__ = ALIGN(__init_rodata_end__ , 4); 118 | .text ALIGN(__init_rodata_end__ , 4) : AT(ALIGN(__init_rodata_end__ , 4)) 119 | { 120 | __text_start__ = .; 121 | *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) 122 | } 123 | __text_end__ = __text_start__ + SIZEOF(.text); 124 | __text_size__ = SIZEOF(.text); 125 | __text_load_end__ = __text_end__; 126 | 127 | . = ASSERT(__text_start__ == __text_end__ || (__text_end__ >= __FLASH_segment_start__ && __text_end__ <= __FLASH_segment_end__) , "error: .text is too large to fit in FLASH memory segment"); 128 | 129 | __sdh_soc_observers_load_start__ = ALIGN(__text_end__ , 4); 130 | .sdh_soc_observers ALIGN(__text_end__ , 4) : AT(ALIGN(__text_end__ , 4)) 131 | { 132 | __sdh_soc_observers_start__ = .; 133 | __start_sdh_soc_observers = __sdh_soc_observers_start__; 134 | KEEP(*(SORT(.sdh_soc_observers*))) 135 | } 136 | __sdh_soc_observers_end__ = __sdh_soc_observers_start__ + SIZEOF(.sdh_soc_observers); 137 | __sdh_soc_observers_size__ = SIZEOF(.sdh_soc_observers); 138 | __stop_sdh_soc_observers = __sdh_soc_observers_end__; 139 | __sdh_soc_observers_load_end__ = __sdh_soc_observers_end__; 140 | 141 | . = ASSERT(__sdh_soc_observers_start__ == __sdh_soc_observers_end__ || (__sdh_soc_observers_end__ >= __FLASH_segment_start__ && __sdh_soc_observers_end__ <= __FLASH_segment_end__) , "error: .sdh_soc_observers is too large to fit in FLASH memory segment"); 142 | 143 | __pwr_mgmt_data_load_start__ = ALIGN(__sdh_soc_observers_end__ , 4); 144 | .pwr_mgmt_data ALIGN(__sdh_soc_observers_end__ , 4) : AT(ALIGN(__sdh_soc_observers_end__ , 4)) 145 | { 146 | __pwr_mgmt_data_start__ = .; 147 | __start_pwr_mgmt_data = __pwr_mgmt_data_start__; 148 | KEEP(*(SORT(.pwr_mgmt_data*))) 149 | } 150 | __pwr_mgmt_data_end__ = __pwr_mgmt_data_start__ + SIZEOF(.pwr_mgmt_data); 151 | __pwr_mgmt_data_size__ = SIZEOF(.pwr_mgmt_data); 152 | __stop_pwr_mgmt_data = __pwr_mgmt_data_end__; 153 | __pwr_mgmt_data_load_end__ = __pwr_mgmt_data_end__; 154 | 155 | . = ASSERT(__pwr_mgmt_data_start__ == __pwr_mgmt_data_end__ || (__pwr_mgmt_data_end__ >= __FLASH_segment_start__ && __pwr_mgmt_data_end__ <= __FLASH_segment_end__) , "error: .pwr_mgmt_data is too large to fit in FLASH memory segment"); 156 | 157 | __sdh_ble_observers_load_start__ = ALIGN(__pwr_mgmt_data_end__ , 4); 158 | .sdh_ble_observers ALIGN(__pwr_mgmt_data_end__ , 4) : AT(ALIGN(__pwr_mgmt_data_end__ , 4)) 159 | { 160 | __sdh_ble_observers_start__ = .; 161 | __start_sdh_ble_observers = __sdh_ble_observers_start__; 162 | KEEP(*(SORT(.sdh_ble_observers*))) 163 | } 164 | __sdh_ble_observers_end__ = __sdh_ble_observers_start__ + SIZEOF(.sdh_ble_observers); 165 | __sdh_ble_observers_size__ = SIZEOF(.sdh_ble_observers); 166 | __stop_sdh_ble_observers = __sdh_ble_observers_end__; 167 | __sdh_ble_observers_load_end__ = __sdh_ble_observers_end__; 168 | 169 | . = ASSERT(__sdh_ble_observers_start__ == __sdh_ble_observers_end__ || (__sdh_ble_observers_end__ >= __FLASH_segment_start__ && __sdh_ble_observers_end__ <= __FLASH_segment_end__) , "error: .sdh_ble_observers is too large to fit in FLASH memory segment"); 170 | 171 | __log_const_data_load_start__ = ALIGN(__sdh_ble_observers_end__ , 4); 172 | .log_const_data ALIGN(__sdh_ble_observers_end__ , 4) : AT(ALIGN(__sdh_ble_observers_end__ , 4)) 173 | { 174 | __log_const_data_start__ = .; 175 | __start_log_const_data = __log_const_data_start__; 176 | KEEP(*(SORT(.log_const_data*))) 177 | } 178 | __log_const_data_end__ = __log_const_data_start__ + SIZEOF(.log_const_data); 179 | __log_const_data_size__ = SIZEOF(.log_const_data); 180 | __stop_log_const_data = __log_const_data_end__; 181 | __log_const_data_load_end__ = __log_const_data_end__; 182 | 183 | . = ASSERT(__log_const_data_start__ == __log_const_data_end__ || (__log_const_data_end__ >= __FLASH_segment_start__ && __log_const_data_end__ <= __FLASH_segment_end__) , "error: .log_const_data is too large to fit in FLASH memory segment"); 184 | 185 | __sdh_req_observers_load_start__ = ALIGN(__log_const_data_end__ , 4); 186 | .sdh_req_observers ALIGN(__log_const_data_end__ , 4) : AT(ALIGN(__log_const_data_end__ , 4)) 187 | { 188 | __sdh_req_observers_start__ = .; 189 | __start_sdh_req_observers = __sdh_req_observers_start__; 190 | KEEP(*(SORT(.sdh_req_observers*))) 191 | } 192 | __sdh_req_observers_end__ = __sdh_req_observers_start__ + SIZEOF(.sdh_req_observers); 193 | __sdh_req_observers_size__ = SIZEOF(.sdh_req_observers); 194 | __stop_sdh_req_observers = __sdh_req_observers_end__; 195 | __sdh_req_observers_load_end__ = __sdh_req_observers_end__; 196 | 197 | . = ASSERT(__sdh_req_observers_start__ == __sdh_req_observers_end__ || (__sdh_req_observers_end__ >= __FLASH_segment_start__ && __sdh_req_observers_end__ <= __FLASH_segment_end__) , "error: .sdh_req_observers is too large to fit in FLASH memory segment"); 198 | 199 | __sdh_state_observers_load_start__ = ALIGN(__sdh_req_observers_end__ , 4); 200 | .sdh_state_observers ALIGN(__sdh_req_observers_end__ , 4) : AT(ALIGN(__sdh_req_observers_end__ , 4)) 201 | { 202 | __sdh_state_observers_start__ = .; 203 | __start_sdh_state_observers = __sdh_state_observers_start__; 204 | KEEP(*(SORT(.sdh_state_observers*))) 205 | } 206 | __sdh_state_observers_end__ = __sdh_state_observers_start__ + SIZEOF(.sdh_state_observers); 207 | __sdh_state_observers_size__ = SIZEOF(.sdh_state_observers); 208 | __stop_sdh_state_observers = __sdh_state_observers_end__; 209 | __sdh_state_observers_load_end__ = __sdh_state_observers_end__; 210 | 211 | . = ASSERT(__sdh_state_observers_start__ == __sdh_state_observers_end__ || (__sdh_state_observers_end__ >= __FLASH_segment_start__ && __sdh_state_observers_end__ <= __FLASH_segment_end__) , "error: .sdh_state_observers is too large to fit in FLASH memory segment"); 212 | 213 | __sdh_stack_observers_load_start__ = ALIGN(__sdh_state_observers_end__ , 4); 214 | .sdh_stack_observers ALIGN(__sdh_state_observers_end__ , 4) : AT(ALIGN(__sdh_state_observers_end__ , 4)) 215 | { 216 | __sdh_stack_observers_start__ = .; 217 | __start_sdh_stack_observers = __sdh_stack_observers_start__; 218 | KEEP(*(SORT(.sdh_stack_observers*))) 219 | } 220 | __sdh_stack_observers_end__ = __sdh_stack_observers_start__ + SIZEOF(.sdh_stack_observers); 221 | __sdh_stack_observers_size__ = SIZEOF(.sdh_stack_observers); 222 | __stop_sdh_stack_observers = __sdh_stack_observers_end__; 223 | __sdh_stack_observers_load_end__ = __sdh_stack_observers_end__; 224 | 225 | . = ASSERT(__sdh_stack_observers_start__ == __sdh_stack_observers_end__ || (__sdh_stack_observers_end__ >= __FLASH_segment_start__ && __sdh_stack_observers_end__ <= __FLASH_segment_end__) , "error: .sdh_stack_observers is too large to fit in FLASH memory segment"); 226 | 227 | __cli_command_load_start__ = ALIGN(__sdh_stack_observers_end__ , 4); 228 | .cli_command ALIGN(__sdh_stack_observers_end__ , 4) : AT(ALIGN(__sdh_stack_observers_end__ , 4)) 229 | { 230 | __cli_command_start__ = .; 231 | __start_cli_command = __cli_command_start__; 232 | KEEP(*(.cli_command*)) 233 | } 234 | __cli_command_end__ = __cli_command_start__ + SIZEOF(.cli_command); 235 | __cli_command_size__ = SIZEOF(.cli_command); 236 | __stop_cli_command = __cli_command_end__; 237 | __cli_command_load_end__ = __cli_command_end__; 238 | 239 | . = ASSERT(__cli_command_start__ == __cli_command_end__ || (__cli_command_end__ >= __FLASH_segment_start__ && __cli_command_end__ <= __FLASH_segment_end__) , "error: .cli_command is too large to fit in FLASH memory segment"); 240 | 241 | __nrf_sections_load_start__ = ALIGN(__cli_command_end__ , 4); 242 | .nrf_sections ALIGN(__cli_command_end__ , 4) (NOLOAD) : AT(ALIGN(__cli_command_end__ , 4)) 243 | { 244 | __nrf_sections_start__ = .; 245 | __start_nrf_sections = __nrf_sections_start__; 246 | KEEP(*(.nrf_sections .nrf_sections.*)) 247 | } 248 | __nrf_sections_end__ = __nrf_sections_start__ + SIZEOF(.nrf_sections); 249 | __nrf_sections_size__ = SIZEOF(.nrf_sections); 250 | __nrf_sections_load_end__ = __nrf_sections_end__; 251 | 252 | . = ASSERT(__nrf_sections_start__ == __nrf_sections_end__ || (__nrf_sections_end__ >= __FLASH_segment_start__ && __nrf_sections_end__ <= __FLASH_segment_end__) , "error: .nrf_sections is too large to fit in FLASH memory segment"); 253 | 254 | __log_dynamic_data_load_start__ = ALIGN(__nrf_sections_end__ , 4); 255 | .log_dynamic_data ALIGN(__nrf_sections_run_end__ , 4) : AT(ALIGN(__nrf_sections_end__ , 4)) 256 | { 257 | __log_dynamic_data_start__ = .; 258 | KEEP(*(SORT(.log_dynamic_data*))) 259 | } 260 | __log_dynamic_data_end__ = __log_dynamic_data_start__ + SIZEOF(.log_dynamic_data); 261 | __log_dynamic_data_size__ = SIZEOF(.log_dynamic_data); 262 | __log_dynamic_data_load_end__ = __log_dynamic_data_load_start__ + SIZEOF(.log_dynamic_data); 263 | 264 | . = ASSERT(__log_dynamic_data_load_start__ == __log_dynamic_data_load_end__ || (__log_dynamic_data_load_end__ >= __FLASH_segment_start__ && __log_dynamic_data_load_end__ <= __FLASH_segment_end__) , "error: .log_dynamic_data is too large to fit in FLASH memory segment"); 265 | 266 | .log_dynamic_data_run ALIGN(__nrf_sections_run_end__ , 4) (NOLOAD) : 267 | { 268 | __log_dynamic_data_run_start__ = .; 269 | __start_log_dynamic_data = __log_dynamic_data_run_start__; 270 | . = MAX(__log_dynamic_data_run_start__ + SIZEOF(.log_dynamic_data), .); 271 | } 272 | __log_dynamic_data_run_end__ = __log_dynamic_data_run_start__ + SIZEOF(.log_dynamic_data_run); 273 | __log_dynamic_data_run_size__ = SIZEOF(.log_dynamic_data_run); 274 | __stop_log_dynamic_data = __log_dynamic_data_run_end__; 275 | __log_dynamic_data_run_load_end__ = __log_dynamic_data_run_end__; 276 | 277 | . = ASSERT(__log_dynamic_data_run_start__ == __log_dynamic_data_run_end__ || (__log_dynamic_data_run_end__ >= __RAM_segment_start__ && __log_dynamic_data_run_end__ <= __RAM_segment_end__) , "error: .log_dynamic_data_run is too large to fit in RAM memory segment"); 278 | 279 | __cli_sorted_cmd_ptrs_load_start__ = ALIGN(__log_dynamic_data_load_start__ + SIZEOF(.log_dynamic_data) , 4); 280 | .cli_sorted_cmd_ptrs ALIGN(__log_dynamic_data_run_end__ , 4) : AT(ALIGN(__log_dynamic_data_load_start__ + SIZEOF(.log_dynamic_data) , 4)) 281 | { 282 | __cli_sorted_cmd_ptrs_start__ = .; 283 | KEEP(*(.cli_sorted_cmd_ptrs*)) 284 | } 285 | __cli_sorted_cmd_ptrs_end__ = __cli_sorted_cmd_ptrs_start__ + SIZEOF(.cli_sorted_cmd_ptrs); 286 | __cli_sorted_cmd_ptrs_size__ = SIZEOF(.cli_sorted_cmd_ptrs); 287 | __cli_sorted_cmd_ptrs_load_end__ = __cli_sorted_cmd_ptrs_load_start__ + SIZEOF(.cli_sorted_cmd_ptrs); 288 | 289 | . = ASSERT(__cli_sorted_cmd_ptrs_load_start__ == __cli_sorted_cmd_ptrs_load_end__ || (__cli_sorted_cmd_ptrs_load_end__ >= __FLASH_segment_start__ && __cli_sorted_cmd_ptrs_load_end__ <= __FLASH_segment_end__) , "error: .cli_sorted_cmd_ptrs is too large to fit in FLASH memory segment"); 290 | 291 | .cli_sorted_cmd_ptrs_run ALIGN(__log_dynamic_data_run_end__ , 4) (NOLOAD) : 292 | { 293 | __cli_sorted_cmd_ptrs_run_start__ = .; 294 | __start_cli_sorted_cmd_ptrs = __cli_sorted_cmd_ptrs_run_start__; 295 | . = MAX(__cli_sorted_cmd_ptrs_run_start__ + SIZEOF(.cli_sorted_cmd_ptrs), .); 296 | } 297 | __cli_sorted_cmd_ptrs_run_end__ = __cli_sorted_cmd_ptrs_run_start__ + SIZEOF(.cli_sorted_cmd_ptrs_run); 298 | __cli_sorted_cmd_ptrs_run_size__ = SIZEOF(.cli_sorted_cmd_ptrs_run); 299 | __stop_cli_sorted_cmd_ptrs = __cli_sorted_cmd_ptrs_run_end__; 300 | __cli_sorted_cmd_ptrs_run_load_end__ = __cli_sorted_cmd_ptrs_run_end__; 301 | 302 | . = ASSERT(__cli_sorted_cmd_ptrs_run_start__ == __cli_sorted_cmd_ptrs_run_end__ || (__cli_sorted_cmd_ptrs_run_end__ >= __RAM_segment_start__ && __cli_sorted_cmd_ptrs_run_end__ <= __RAM_segment_end__) , "error: .cli_sorted_cmd_ptrs_run is too large to fit in RAM memory segment"); 303 | 304 | __fs_data_load_start__ = ALIGN(__cli_sorted_cmd_ptrs_load_start__ + SIZEOF(.cli_sorted_cmd_ptrs) , 4); 305 | .fs_data ALIGN(__cli_sorted_cmd_ptrs_run_end__ , 4) : AT(ALIGN(__cli_sorted_cmd_ptrs_load_start__ + SIZEOF(.cli_sorted_cmd_ptrs) , 4)) 306 | { 307 | __fs_data_start__ = .; 308 | KEEP(*(.fs_data*)) 309 | } 310 | __fs_data_end__ = __fs_data_start__ + SIZEOF(.fs_data); 311 | __fs_data_size__ = SIZEOF(.fs_data); 312 | __fs_data_load_end__ = __fs_data_load_start__ + SIZEOF(.fs_data); 313 | 314 | . = ASSERT(__fs_data_load_start__ == __fs_data_load_end__ || (__fs_data_load_end__ >= __FLASH_segment_start__ && __fs_data_load_end__ <= __FLASH_segment_end__) , "error: .fs_data is too large to fit in FLASH memory segment"); 315 | 316 | .fs_data_run ALIGN(__cli_sorted_cmd_ptrs_run_end__ , 4) (NOLOAD) : 317 | { 318 | __fs_data_run_start__ = .; 319 | __start_fs_data = __fs_data_run_start__; 320 | . = MAX(__fs_data_run_start__ + SIZEOF(.fs_data), .); 321 | } 322 | __fs_data_run_end__ = __fs_data_run_start__ + SIZEOF(.fs_data_run); 323 | __fs_data_run_size__ = SIZEOF(.fs_data_run); 324 | __stop_fs_data = __fs_data_run_end__; 325 | __fs_data_run_load_end__ = __fs_data_run_end__; 326 | 327 | . = ASSERT(__fs_data_run_start__ == __fs_data_run_end__ || (__fs_data_run_end__ >= __RAM_segment_start__ && __fs_data_run_end__ <= __RAM_segment_end__) , "error: .fs_data_run is too large to fit in RAM memory segment"); 328 | 329 | __nrf_sections_run_end_load_start__ = ALIGN(__fs_data_run_end__ , 4); 330 | .nrf_sections_run_end ALIGN(__fs_data_run_end__ , 4) (NOLOAD) : AT(ALIGN(__fs_data_run_end__ , 4)) 331 | { 332 | __nrf_sections_run_end_start__ = .; 333 | __end_nrf_sections_run = __nrf_sections_run_end_start__; 334 | KEEP(*(.nrf_sections_run_end .nrf_sections_run_end.*)) 335 | } 336 | __nrf_sections_run_end_end__ = __nrf_sections_run_end_start__ + SIZEOF(.nrf_sections_run_end); 337 | __nrf_sections_run_end_size__ = SIZEOF(.nrf_sections_run_end); 338 | __nrf_sections_run_end_load_end__ = __nrf_sections_run_end_end__; 339 | 340 | . = ASSERT(__nrf_sections_run_end_start__ == __nrf_sections_run_end_end__ || (__nrf_sections_run_end_end__ >= __RAM_segment_start__ && __nrf_sections_run_end_end__ <= __RAM_segment_end__) , "error: .nrf_sections_run_end is too large to fit in RAM memory segment"); 341 | 342 | __dtors_load_start__ = ALIGN(__fs_data_load_start__ + SIZEOF(.fs_data) , 4); 343 | .dtors ALIGN(__fs_data_load_start__ + SIZEOF(.fs_data) , 4) : AT(ALIGN(__fs_data_load_start__ + SIZEOF(.fs_data) , 4)) 344 | { 345 | __dtors_start__ = .; 346 | KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) KEEP (*(.fini_array)) KEEP (*(SORT(.fini_array.*))) 347 | } 348 | __dtors_end__ = __dtors_start__ + SIZEOF(.dtors); 349 | __dtors_size__ = SIZEOF(.dtors); 350 | __dtors_load_end__ = __dtors_end__; 351 | 352 | . = ASSERT(__dtors_start__ == __dtors_end__ || (__dtors_end__ >= __FLASH_segment_start__ && __dtors_end__ <= __FLASH_segment_end__) , "error: .dtors is too large to fit in FLASH memory segment"); 353 | 354 | __ctors_load_start__ = ALIGN(__dtors_end__ , 4); 355 | .ctors ALIGN(__dtors_end__ , 4) : AT(ALIGN(__dtors_end__ , 4)) 356 | { 357 | __ctors_start__ = .; 358 | KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) KEEP (*(.init_array)) KEEP (*(SORT(.init_array.*))) 359 | } 360 | __ctors_end__ = __ctors_start__ + SIZEOF(.ctors); 361 | __ctors_size__ = SIZEOF(.ctors); 362 | __ctors_load_end__ = __ctors_end__; 363 | 364 | . = ASSERT(__ctors_start__ == __ctors_end__ || (__ctors_end__ >= __FLASH_segment_start__ && __ctors_end__ <= __FLASH_segment_end__) , "error: .ctors is too large to fit in FLASH memory segment"); 365 | 366 | __rodata_load_start__ = ALIGN(__ctors_end__ , 4); 367 | .rodata ALIGN(__ctors_end__ , 4) : AT(ALIGN(__ctors_end__ , 4)) 368 | { 369 | __rodata_start__ = .; 370 | *(.rodata .rodata.* .gnu.linkonce.r.*) 371 | } 372 | __rodata_end__ = __rodata_start__ + SIZEOF(.rodata); 373 | __rodata_size__ = SIZEOF(.rodata); 374 | __rodata_load_end__ = __rodata_end__; 375 | 376 | . = ASSERT(__rodata_start__ == __rodata_end__ || (__rodata_end__ >= __FLASH_segment_start__ && __rodata_end__ <= __FLASH_segment_end__) , "error: .rodata is too large to fit in FLASH memory segment"); 377 | 378 | __ARM.exidx_load_start__ = ALIGN(__rodata_end__ , 4); 379 | .ARM.exidx ALIGN(__rodata_end__ , 4) : AT(ALIGN(__rodata_end__ , 4)) 380 | { 381 | __ARM.exidx_start__ = .; 382 | __exidx_start = __ARM.exidx_start__; 383 | *(.ARM.exidx .ARM.exidx.*) 384 | } 385 | __ARM.exidx_end__ = __ARM.exidx_start__ + SIZEOF(.ARM.exidx); 386 | __ARM.exidx_size__ = SIZEOF(.ARM.exidx); 387 | __exidx_end = __ARM.exidx_end__; 388 | __ARM.exidx_load_end__ = __ARM.exidx_end__; 389 | 390 | . = ASSERT(__ARM.exidx_start__ == __ARM.exidx_end__ || (__ARM.exidx_end__ >= __FLASH_segment_start__ && __ARM.exidx_end__ <= __FLASH_segment_end__) , "error: .ARM.exidx is too large to fit in FLASH memory segment"); 391 | 392 | __fast_load_start__ = ALIGN(__ARM.exidx_end__ , 4); 393 | .fast ALIGN(__nrf_sections_run_end_end__ , 4) : AT(ALIGN(__ARM.exidx_end__ , 4)) 394 | { 395 | __fast_start__ = .; 396 | *(.fast .fast.*) 397 | } 398 | __fast_end__ = __fast_start__ + SIZEOF(.fast); 399 | __fast_size__ = SIZEOF(.fast); 400 | __fast_load_end__ = __fast_load_start__ + SIZEOF(.fast); 401 | 402 | . = ASSERT(__fast_load_start__ == __fast_load_end__ || (__fast_load_end__ >= __FLASH_segment_start__ && __fast_load_end__ <= __FLASH_segment_end__) , "error: .fast is too large to fit in FLASH memory segment"); 403 | 404 | .fast_run ALIGN(__nrf_sections_run_end_end__ , 4) (NOLOAD) : 405 | { 406 | __fast_run_start__ = .; 407 | . = MAX(__fast_run_start__ + SIZEOF(.fast), .); 408 | } 409 | __fast_run_end__ = __fast_run_start__ + SIZEOF(.fast_run); 410 | __fast_run_size__ = SIZEOF(.fast_run); 411 | __fast_run_load_end__ = __fast_run_end__; 412 | 413 | . = ASSERT(__fast_run_start__ == __fast_run_end__ || (__fast_run_end__ >= __RAM_segment_start__ && __fast_run_end__ <= __RAM_segment_end__) , "error: .fast_run is too large to fit in RAM memory segment"); 414 | 415 | __data_load_start__ = ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4); 416 | .data ALIGN(__fast_run_end__ , 4) : AT(ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4)) 417 | { 418 | __data_start__ = .; 419 | *(.data .data.* .gnu.linkonce.d.*) 420 | } 421 | __data_end__ = __data_start__ + SIZEOF(.data); 422 | __data_size__ = SIZEOF(.data); 423 | __data_load_end__ = __data_load_start__ + SIZEOF(.data); 424 | 425 | . = ASSERT(__data_load_start__ == __data_load_end__ || (__data_load_end__ >= __FLASH_segment_start__ && __data_load_end__ <= __FLASH_segment_end__) , "error: .data is too large to fit in FLASH memory segment"); 426 | 427 | .data_run ALIGN(__fast_run_end__ , 4) (NOLOAD) : 428 | { 429 | __data_run_start__ = .; 430 | . = MAX(__data_run_start__ + SIZEOF(.data), .); 431 | } 432 | __data_run_end__ = __data_run_start__ + SIZEOF(.data_run); 433 | __data_run_size__ = SIZEOF(.data_run); 434 | __data_run_load_end__ = __data_run_end__; 435 | 436 | . = ASSERT(__data_run_start__ == __data_run_end__ || (__data_run_end__ >= __RAM_segment_start__ && __data_run_end__ <= __RAM_segment_end__) , "error: .data_run is too large to fit in RAM memory segment"); 437 | 438 | __tdata_load_start__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4); 439 | .tdata ALIGN(__data_run_end__ , 4) : AT(ALIGN(__data_load_start__ + SIZEOF(.data) , 4)) 440 | { 441 | __tdata_start__ = .; 442 | *(.tdata .tdata.*) 443 | } 444 | __tdata_end__ = __tdata_start__ + SIZEOF(.tdata); 445 | __tdata_size__ = SIZEOF(.tdata); 446 | __tdata_load_end__ = __tdata_load_start__ + SIZEOF(.tdata); 447 | 448 | __FLASH_segment_used_end__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4) + SIZEOF(.tdata); 449 | __FLASH_segment_used_size__ = __FLASH_segment_used_end__ - __FLASH_segment_start__; 450 | 451 | . = ASSERT(__tdata_load_start__ == __tdata_load_end__ || (__tdata_load_end__ >= __FLASH_segment_start__ && __tdata_load_end__ <= __FLASH_segment_end__) , "error: .tdata is too large to fit in FLASH memory segment"); 452 | 453 | .tdata_run ALIGN(__data_run_end__ , 4) (NOLOAD) : 454 | { 455 | __tdata_run_start__ = .; 456 | . = MAX(__tdata_run_start__ + SIZEOF(.tdata), .); 457 | } 458 | __tdata_run_end__ = __tdata_run_start__ + SIZEOF(.tdata_run); 459 | __tdata_run_size__ = SIZEOF(.tdata_run); 460 | __tdata_run_load_end__ = __tdata_run_end__; 461 | 462 | . = ASSERT(__tdata_run_start__ == __tdata_run_end__ || (__tdata_run_end__ >= __RAM_segment_start__ && __tdata_run_end__ <= __RAM_segment_end__) , "error: .tdata_run is too large to fit in RAM memory segment"); 463 | 464 | __bss_load_start__ = ALIGN(__tdata_run_end__ , 4); 465 | .bss ALIGN(__tdata_run_end__ , 4) (NOLOAD) : AT(ALIGN(__tdata_run_end__ , 4)) 466 | { 467 | __bss_start__ = .; 468 | *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) 469 | } 470 | __bss_end__ = __bss_start__ + SIZEOF(.bss); 471 | __bss_size__ = SIZEOF(.bss); 472 | __bss_load_end__ = __bss_end__; 473 | 474 | . = ASSERT(__bss_start__ == __bss_end__ || (__bss_end__ >= __RAM_segment_start__ && __bss_end__ <= __RAM_segment_end__) , "error: .bss is too large to fit in RAM memory segment"); 475 | 476 | __tbss_load_start__ = ALIGN(__bss_end__ , 4); 477 | .tbss ALIGN(__bss_end__ , 4) (NOLOAD) : AT(ALIGN(__bss_end__ , 4)) 478 | { 479 | __tbss_start__ = .; 480 | *(.tbss .tbss.*) 481 | } 482 | __tbss_end__ = __tbss_start__ + SIZEOF(.tbss); 483 | __tbss_size__ = SIZEOF(.tbss); 484 | __tbss_load_end__ = __tbss_end__; 485 | 486 | . = ASSERT(__tbss_start__ == __tbss_end__ || (__tbss_end__ >= __RAM_segment_start__ && __tbss_end__ <= __RAM_segment_end__) , "error: .tbss is too large to fit in RAM memory segment"); 487 | 488 | __non_init_load_start__ = ALIGN(__tbss_end__ , 4); 489 | .non_init ALIGN(__tbss_end__ , 4) (NOLOAD) : AT(ALIGN(__tbss_end__ , 4)) 490 | { 491 | __non_init_start__ = .; 492 | *(.non_init .non_init.*) 493 | } 494 | __non_init_end__ = __non_init_start__ + SIZEOF(.non_init); 495 | __non_init_size__ = SIZEOF(.non_init); 496 | __non_init_load_end__ = __non_init_end__; 497 | 498 | . = ASSERT(__non_init_start__ == __non_init_end__ || (__non_init_end__ >= __RAM_segment_start__ && __non_init_end__ <= __RAM_segment_end__) , "error: .non_init is too large to fit in RAM memory segment"); 499 | 500 | __heap_load_start__ = ALIGN(__non_init_end__ , 4); 501 | .heap ALIGN(__non_init_end__ , 4) (NOLOAD) : AT(ALIGN(__non_init_end__ , 4)) 502 | { 503 | __heap_start__ = .; 504 | *(.heap .heap.*) 505 | . = ALIGN(MAX(__heap_start__ + __HEAPSIZE__ , .), 4); 506 | } 507 | __heap_end__ = __heap_start__ + SIZEOF(.heap); 508 | __heap_size__ = SIZEOF(.heap); 509 | __heap_load_end__ = __heap_end__; 510 | 511 | . = ASSERT(__heap_start__ == __heap_end__ || (__heap_end__ >= __RAM_segment_start__ && __heap_end__ <= __RAM_segment_end__) , "error: .heap is too large to fit in RAM memory segment"); 512 | 513 | __stack_load_start__ = __RAM_segment_end__ - 2048; 514 | .stack __RAM_segment_end__ - 2048 (NOLOAD) : AT(__RAM_segment_end__ - 2048) 515 | { 516 | __stack_start__ = .; 517 | __StackLimit = __stack_start__; 518 | *(.stack .stack.*) 519 | . = ALIGN(MAX(__stack_start__ + __STACKSIZE__ , .), 8); 520 | } 521 | __stack_end__ = __stack_start__ + SIZEOF(.stack); 522 | __stack_size__ = SIZEOF(.stack); 523 | __StackTop = __stack_end__; 524 | __stack_load_end__ = __stack_end__; 525 | 526 | . = ASSERT(__stack_start__ == __stack_end__ || (__stack_end__ >= __RAM_segment_start__ && __stack_end__ <= __RAM_segment_end__) , "error: .stack is too large to fit in RAM memory segment"); 527 | . = ASSERT(__heap_end__ <= __stack_start__ , "error: section .heap overlaps absolute placed section .stack"); 528 | 529 | __stack_process_load_start__ = ALIGN(__stack_end__ , 8); 530 | .stack_process ALIGN(__stack_end__ , 8) (NOLOAD) : AT(ALIGN(__stack_end__ , 8)) 531 | { 532 | __stack_process_start__ = .; 533 | *(.stack_process .stack_process.*) 534 | . = ALIGN(MAX(__stack_process_start__ + __STACKSIZE_PROCESS__ , .), 8); 535 | } 536 | __stack_process_end__ = __stack_process_start__ + SIZEOF(.stack_process); 537 | __stack_process_size__ = SIZEOF(.stack_process); 538 | __stack_process_load_end__ = __stack_process_end__; 539 | 540 | __RAM_segment_used_end__ = ALIGN(__stack_end__ , 8) + SIZEOF(.stack_process); 541 | __RAM_segment_used_size__ = __RAM_segment_used_end__ - __RAM_segment_start__; 542 | 543 | . = ASSERT(__stack_process_start__ == __stack_process_end__ || (__stack_process_end__ >= __RAM_segment_start__ && __stack_process_end__ <= __RAM_segment_end__) , "error: .stack_process is too large to fit in RAM memory segment"); 544 | 545 | } 546 | 547 | -------------------------------------------------------------------------------- /pca10040/s132/ses/Output/ble_app_blinky_pca10040_s132 Release/Obj/ble_app_blinky_pca10040_s132.ind: -------------------------------------------------------------------------------- 1 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/thumb_crt0.o" 2 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_log_backend_rtt.o" 3 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_log_backend_serial.o" 4 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_log_backend_uart.o" 5 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_log_default_backends.o" 6 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_log_frontend.o" 7 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_log_str_formatter.o" 8 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/app_button.o" 9 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/app_error.o" 10 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/app_error_handler_gcc.o" 11 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/app_error_weak.o" 12 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/app_scheduler.o" 13 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/app_timer2.o" 14 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/app_util_platform.o" 15 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/drv_rtc.o" 16 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/hardfault_implementation.o" 17 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_assert.o" 18 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_atfifo.o" 19 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_atflags.o" 20 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_atomic.o" 21 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_balloc.o" 22 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_fprintf.o" 23 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_fprintf_format.o" 24 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_memobj.o" 25 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_pwr_mgmt.o" 26 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_ringbuf.o" 27 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_section_iter.o" 28 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_sortlist.o" 29 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_strerror.o" 30 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/ses_startup_nrf52.o" 31 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/ses_startup_nrf_common.o" 32 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/system_nrf52.o" 33 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/boards.o" 34 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_drv_clock.o" 35 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_drv_uart.o" 36 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrfx_atomic.o" 37 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrfx_clock.o" 38 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrfx_gpiote.o" 39 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrfx_prs.o" 40 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrfx_uart.o" 41 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrfx_uarte.o" 42 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/main.o" 43 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/JLINK_MONITOR.o" 44 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/JLINK_MONITOR_ISR_SES.o" 45 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/SEGGER_RTT.o" 46 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/SEGGER_RTT_Syscalls_SES.o" 47 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/SEGGER_RTT_printf.o" 48 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/ble_advdata.o" 49 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/ble_conn_params.o" 50 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/ble_conn_state.o" 51 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/ble_srv_common.o" 52 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_ble_gatt.o" 53 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_ble_qwr.o" 54 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/utf.o" 55 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/ble_lbs.o" 56 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_sdh.o" 57 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_sdh_ble.o" 58 | "Output/ble_app_blinky_pca10040_s132 Release/Obj/nrf_sdh_soc.o" 59 | "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 4.16/lib/libdebugio_mempoll_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 60 | "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 4.16/lib/libm_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 61 | "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 4.16/lib/libc_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 62 | "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 4.16/lib/libcpp_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 63 | "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 4.16/lib/libdebugio_v7em_fpv4_sp_d16_hard_t_le_eabi.a" 64 | "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 4.16/lib/libvfprintf_v7em_fpv4_sp_d16_hard_t_le_eabi.o" 65 | "C:/Program Files/SEGGER/SEGGER Embedded Studio for ARM 4.16/lib/libvfscanf_v7em_fpv4_sp_d16_hard_t_le_eabi.o" 66 | -------------------------------------------------------------------------------- /pca10040/s132/ses/Output/ble_app_blinky_pca10040_s132 Release/Obj/ble_app_blinky_pca10040_s132.ld: -------------------------------------------------------------------------------- 1 | MEMORY 2 | { 3 | UNPLACED_SECTIONS (wx) : ORIGIN = 0x100000000, LENGTH = 0 4 | RAM (wx) : ORIGIN = 0x20000000, LENGTH = 0x00010000 5 | FLASH (wx) : ORIGIN = 0x00000000, LENGTH = 0x00080000 6 | } 7 | 8 | SECTIONS 9 | { 10 | __RAM_segment_start__ = 0x20000000; 11 | __RAM_segment_end__ = 0x20010000; 12 | __RAM_segment_size__ = 0x00010000; 13 | __FLASH_segment_start__ = 0x00000000; 14 | __FLASH_segment_end__ = 0x00080000; 15 | __FLASH_segment_size__ = 0x00080000; 16 | 17 | __HEAPSIZE__ = 8192; 18 | __STACKSIZE_PROCESS__ = 0; 19 | __STACKSIZE__ = 8192; 20 | 21 | __reserved_ram_load_start__ = 0x20000000; 22 | .reserved_ram 0x20000000 (NOLOAD) : AT(0x20000000) 23 | { 24 | __reserved_ram_start__ = .; 25 | *(.reserved_ram .reserved_ram.*) 26 | . = MAX(__reserved_ram_start__ + 0x200022f0-0x20000000 , .); 27 | } 28 | __reserved_ram_end__ = __reserved_ram_start__ + SIZEOF(.reserved_ram); 29 | __reserved_ram_size__ = SIZEOF(.reserved_ram); 30 | __reserved_ram_load_end__ = __reserved_ram_end__; 31 | 32 | . = ASSERT(__reserved_ram_start__ == __reserved_ram_end__ || (__reserved_ram_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .reserved_ram is too large to fit in RAM memory segment"); 33 | 34 | __vectors_ram_load_start__ = 0x200022f0; 35 | .vectors_ram 0x200022f0 (NOLOAD) : AT(0x200022f0) 36 | { 37 | __vectors_ram_start__ = .; 38 | __app_ram_start__ = __vectors_ram_start__; 39 | *(.vectors_ram .vectors_ram.*) 40 | } 41 | __vectors_ram_end__ = __vectors_ram_start__ + SIZEOF(.vectors_ram); 42 | __vectors_ram_size__ = SIZEOF(.vectors_ram); 43 | __vectors_ram_load_end__ = __vectors_ram_end__; 44 | 45 | . = ASSERT(__vectors_ram_start__ == __vectors_ram_end__ || (__vectors_ram_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .vectors_ram is too large to fit in RAM memory segment"); 46 | . = ASSERT(__reserved_ram_end__ <= __vectors_ram_start__ , "error: section .reserved_ram overlaps absolute placed section .vectors_ram"); 47 | 48 | __nrf_sections_run_load_start__ = ALIGN(__vectors_ram_end__ , 4); 49 | .nrf_sections_run ALIGN(__vectors_ram_end__ , 4) (NOLOAD) : AT(ALIGN(__vectors_ram_end__ , 4)) 50 | { 51 | __nrf_sections_run_start__ = .; 52 | __start_nrf_sections_run = __nrf_sections_run_start__; 53 | KEEP(*(.nrf_sections_run .nrf_sections_run.*)) 54 | } 55 | __nrf_sections_run_end__ = __nrf_sections_run_start__ + SIZEOF(.nrf_sections_run); 56 | __nrf_sections_run_size__ = SIZEOF(.nrf_sections_run); 57 | __nrf_sections_run_load_end__ = __nrf_sections_run_end__; 58 | 59 | . = ASSERT(__nrf_sections_run_start__ == __nrf_sections_run_end__ || (__nrf_sections_run_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .nrf_sections_run is too large to fit in RAM memory segment"); 60 | 61 | __reserved_flash_load_start__ = 0x0; 62 | .reserved_flash 0x0 (NOLOAD) : AT(0x0) 63 | { 64 | __reserved_flash_start__ = .; 65 | *(.reserved_flash .reserved_flash.*) 66 | . = MAX(__reserved_flash_start__ + 0x26000-0x0 , .); 67 | } 68 | __reserved_flash_end__ = __reserved_flash_start__ + SIZEOF(.reserved_flash); 69 | __reserved_flash_size__ = SIZEOF(.reserved_flash); 70 | __reserved_flash_load_end__ = __reserved_flash_end__; 71 | 72 | . = ASSERT(__reserved_flash_start__ == __reserved_flash_end__ || (__reserved_flash_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .reserved_flash is too large to fit in FLASH memory segment"); 73 | 74 | __vectors_load_start__ = 0x26000; 75 | .vectors 0x26000 : AT(0x26000) 76 | { 77 | __vectors_start__ = .; 78 | *(.vectors .vectors.*) 79 | } 80 | __vectors_end__ = __vectors_start__ + SIZEOF(.vectors); 81 | __vectors_size__ = SIZEOF(.vectors); 82 | __vectors_load_end__ = __vectors_end__; 83 | 84 | . = ASSERT(__vectors_start__ == __vectors_end__ || (__vectors_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .vectors is too large to fit in FLASH memory segment"); 85 | . = ASSERT(__reserved_flash_end__ <= __vectors_start__ , "error: section .reserved_flash overlaps absolute placed section .vectors"); 86 | 87 | __init_load_start__ = ALIGN(__vectors_end__ , 4); 88 | .init ALIGN(__vectors_end__ , 4) : AT(ALIGN(__vectors_end__ , 4)) 89 | { 90 | __init_start__ = .; 91 | *(.init .init.*) 92 | } 93 | __init_end__ = __init_start__ + SIZEOF(.init); 94 | __init_size__ = SIZEOF(.init); 95 | __init_load_end__ = __init_end__; 96 | 97 | . = ASSERT(__init_start__ == __init_end__ || (__init_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .init is too large to fit in FLASH memory segment"); 98 | 99 | __init_rodata_load_start__ = ALIGN(__init_end__ , 4); 100 | .init_rodata ALIGN(__init_end__ , 4) : AT(ALIGN(__init_end__ , 4)) 101 | { 102 | __init_rodata_start__ = .; 103 | *(.init_rodata .init_rodata.*) 104 | } 105 | __init_rodata_end__ = __init_rodata_start__ + SIZEOF(.init_rodata); 106 | __init_rodata_size__ = SIZEOF(.init_rodata); 107 | __init_rodata_load_end__ = __init_rodata_end__; 108 | 109 | . = ASSERT(__init_rodata_start__ == __init_rodata_end__ || (__init_rodata_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .init_rodata is too large to fit in FLASH memory segment"); 110 | 111 | __text_load_start__ = ALIGN(__init_rodata_end__ , 4); 112 | .text ALIGN(__init_rodata_end__ , 4) : AT(ALIGN(__init_rodata_end__ , 4)) 113 | { 114 | __text_start__ = .; 115 | *(.text .text.* .glue_7t .glue_7 .gnu.linkonce.t.* .gcc_except_table .ARM.extab* .gnu.linkonce.armextab.*) 116 | } 117 | __text_end__ = __text_start__ + SIZEOF(.text); 118 | __text_size__ = SIZEOF(.text); 119 | __text_load_end__ = __text_end__; 120 | 121 | . = ASSERT(__text_start__ == __text_end__ || (__text_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .text is too large to fit in FLASH memory segment"); 122 | 123 | __sdh_soc_observers_load_start__ = ALIGN(__text_end__ , 4); 124 | .sdh_soc_observers ALIGN(__text_end__ , 4) : AT(ALIGN(__text_end__ , 4)) 125 | { 126 | __sdh_soc_observers_start__ = .; 127 | __start_sdh_soc_observers = __sdh_soc_observers_start__; 128 | KEEP(*(SORT(.sdh_soc_observers*))) 129 | } 130 | __sdh_soc_observers_end__ = __sdh_soc_observers_start__ + SIZEOF(.sdh_soc_observers); 131 | __sdh_soc_observers_size__ = SIZEOF(.sdh_soc_observers); 132 | __stop_sdh_soc_observers = __sdh_soc_observers_end__; 133 | __sdh_soc_observers_load_end__ = __sdh_soc_observers_end__; 134 | 135 | . = ASSERT(__sdh_soc_observers_start__ == __sdh_soc_observers_end__ || (__sdh_soc_observers_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .sdh_soc_observers is too large to fit in FLASH memory segment"); 136 | 137 | __pwr_mgmt_data_load_start__ = ALIGN(__sdh_soc_observers_end__ , 4); 138 | .pwr_mgmt_data ALIGN(__sdh_soc_observers_end__ , 4) : AT(ALIGN(__sdh_soc_observers_end__ , 4)) 139 | { 140 | __pwr_mgmt_data_start__ = .; 141 | __start_pwr_mgmt_data = __pwr_mgmt_data_start__; 142 | KEEP(*(SORT(.pwr_mgmt_data*))) 143 | } 144 | __pwr_mgmt_data_end__ = __pwr_mgmt_data_start__ + SIZEOF(.pwr_mgmt_data); 145 | __pwr_mgmt_data_size__ = SIZEOF(.pwr_mgmt_data); 146 | __stop_pwr_mgmt_data = __pwr_mgmt_data_end__; 147 | __pwr_mgmt_data_load_end__ = __pwr_mgmt_data_end__; 148 | 149 | . = ASSERT(__pwr_mgmt_data_start__ == __pwr_mgmt_data_end__ || (__pwr_mgmt_data_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .pwr_mgmt_data is too large to fit in FLASH memory segment"); 150 | 151 | __sdh_ble_observers_load_start__ = ALIGN(__pwr_mgmt_data_end__ , 4); 152 | .sdh_ble_observers ALIGN(__pwr_mgmt_data_end__ , 4) : AT(ALIGN(__pwr_mgmt_data_end__ , 4)) 153 | { 154 | __sdh_ble_observers_start__ = .; 155 | __start_sdh_ble_observers = __sdh_ble_observers_start__; 156 | KEEP(*(SORT(.sdh_ble_observers*))) 157 | } 158 | __sdh_ble_observers_end__ = __sdh_ble_observers_start__ + SIZEOF(.sdh_ble_observers); 159 | __sdh_ble_observers_size__ = SIZEOF(.sdh_ble_observers); 160 | __stop_sdh_ble_observers = __sdh_ble_observers_end__; 161 | __sdh_ble_observers_load_end__ = __sdh_ble_observers_end__; 162 | 163 | . = ASSERT(__sdh_ble_observers_start__ == __sdh_ble_observers_end__ || (__sdh_ble_observers_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .sdh_ble_observers is too large to fit in FLASH memory segment"); 164 | 165 | __sdh_state_observers_load_start__ = ALIGN(__sdh_ble_observers_end__ , 4); 166 | .sdh_state_observers ALIGN(__sdh_ble_observers_end__ , 4) : AT(ALIGN(__sdh_ble_observers_end__ , 4)) 167 | { 168 | __sdh_state_observers_start__ = .; 169 | __start_sdh_state_observers = __sdh_state_observers_start__; 170 | KEEP(*(SORT(.sdh_state_observers*))) 171 | } 172 | __sdh_state_observers_end__ = __sdh_state_observers_start__ + SIZEOF(.sdh_state_observers); 173 | __sdh_state_observers_size__ = SIZEOF(.sdh_state_observers); 174 | __stop_sdh_state_observers = __sdh_state_observers_end__; 175 | __sdh_state_observers_load_end__ = __sdh_state_observers_end__; 176 | 177 | . = ASSERT(__sdh_state_observers_start__ == __sdh_state_observers_end__ || (__sdh_state_observers_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .sdh_state_observers is too large to fit in FLASH memory segment"); 178 | 179 | __sdh_stack_observers_load_start__ = ALIGN(__sdh_state_observers_end__ , 4); 180 | .sdh_stack_observers ALIGN(__sdh_state_observers_end__ , 4) : AT(ALIGN(__sdh_state_observers_end__ , 4)) 181 | { 182 | __sdh_stack_observers_start__ = .; 183 | __start_sdh_stack_observers = __sdh_stack_observers_start__; 184 | KEEP(*(SORT(.sdh_stack_observers*))) 185 | } 186 | __sdh_stack_observers_end__ = __sdh_stack_observers_start__ + SIZEOF(.sdh_stack_observers); 187 | __sdh_stack_observers_size__ = SIZEOF(.sdh_stack_observers); 188 | __stop_sdh_stack_observers = __sdh_stack_observers_end__; 189 | __sdh_stack_observers_load_end__ = __sdh_stack_observers_end__; 190 | 191 | . = ASSERT(__sdh_stack_observers_start__ == __sdh_stack_observers_end__ || (__sdh_stack_observers_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .sdh_stack_observers is too large to fit in FLASH memory segment"); 192 | 193 | __sdh_req_observers_load_start__ = ALIGN(__sdh_stack_observers_end__ , 4); 194 | .sdh_req_observers ALIGN(__sdh_stack_observers_end__ , 4) : AT(ALIGN(__sdh_stack_observers_end__ , 4)) 195 | { 196 | __sdh_req_observers_start__ = .; 197 | __start_sdh_req_observers = __sdh_req_observers_start__; 198 | KEEP(*(SORT(.sdh_req_observers*))) 199 | } 200 | __sdh_req_observers_end__ = __sdh_req_observers_start__ + SIZEOF(.sdh_req_observers); 201 | __sdh_req_observers_size__ = SIZEOF(.sdh_req_observers); 202 | __stop_sdh_req_observers = __sdh_req_observers_end__; 203 | __sdh_req_observers_load_end__ = __sdh_req_observers_end__; 204 | 205 | . = ASSERT(__sdh_req_observers_start__ == __sdh_req_observers_end__ || (__sdh_req_observers_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .sdh_req_observers is too large to fit in FLASH memory segment"); 206 | 207 | __nrf_queue_load_start__ = ALIGN(__sdh_req_observers_end__ , 4); 208 | .nrf_queue ALIGN(__sdh_req_observers_end__ , 4) : AT(ALIGN(__sdh_req_observers_end__ , 4)) 209 | { 210 | __nrf_queue_start__ = .; 211 | __start_nrf_queue = __nrf_queue_start__; 212 | KEEP(*(.nrf_queue*)) 213 | } 214 | __nrf_queue_end__ = __nrf_queue_start__ + SIZEOF(.nrf_queue); 215 | __nrf_queue_size__ = SIZEOF(.nrf_queue); 216 | __stop_nrf_queue = __nrf_queue_end__; 217 | __nrf_queue_load_end__ = __nrf_queue_end__; 218 | 219 | . = ASSERT(__nrf_queue_start__ == __nrf_queue_end__ || (__nrf_queue_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .nrf_queue is too large to fit in FLASH memory segment"); 220 | 221 | __nrf_balloc_load_start__ = ALIGN(__nrf_queue_end__ , 4); 222 | .nrf_balloc ALIGN(__nrf_queue_end__ , 4) : AT(ALIGN(__nrf_queue_end__ , 4)) 223 | { 224 | __nrf_balloc_start__ = .; 225 | __start_nrf_balloc = __nrf_balloc_start__; 226 | KEEP(*(.nrf_balloc*)) 227 | } 228 | __nrf_balloc_end__ = __nrf_balloc_start__ + SIZEOF(.nrf_balloc); 229 | __nrf_balloc_size__ = SIZEOF(.nrf_balloc); 230 | __stop_nrf_balloc = __nrf_balloc_end__; 231 | __nrf_balloc_load_end__ = __nrf_balloc_end__; 232 | 233 | . = ASSERT(__nrf_balloc_start__ == __nrf_balloc_end__ || (__nrf_balloc_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .nrf_balloc is too large to fit in FLASH memory segment"); 234 | 235 | __cli_command_load_start__ = ALIGN(__nrf_balloc_end__ , 4); 236 | .cli_command ALIGN(__nrf_balloc_end__ , 4) : AT(ALIGN(__nrf_balloc_end__ , 4)) 237 | { 238 | __cli_command_start__ = .; 239 | __start_cli_command = __cli_command_start__; 240 | KEEP(*(.cli_command*)) 241 | } 242 | __cli_command_end__ = __cli_command_start__ + SIZEOF(.cli_command); 243 | __cli_command_size__ = SIZEOF(.cli_command); 244 | __stop_cli_command = __cli_command_end__; 245 | __cli_command_load_end__ = __cli_command_end__; 246 | 247 | . = ASSERT(__cli_command_start__ == __cli_command_end__ || (__cli_command_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .cli_command is too large to fit in FLASH memory segment"); 248 | 249 | __crypto_data_load_start__ = ALIGN(__cli_command_end__ , 4); 250 | .crypto_data ALIGN(__cli_command_end__ , 4) : AT(ALIGN(__cli_command_end__ , 4)) 251 | { 252 | __crypto_data_start__ = .; 253 | __start_crypto_data = __crypto_data_start__; 254 | KEEP(*(SORT(.crypto_data*))) 255 | } 256 | __crypto_data_end__ = __crypto_data_start__ + SIZEOF(.crypto_data); 257 | __crypto_data_size__ = SIZEOF(.crypto_data); 258 | __stop_crypto_data = __crypto_data_end__; 259 | __crypto_data_load_end__ = __crypto_data_end__; 260 | 261 | . = ASSERT(__crypto_data_start__ == __crypto_data_end__ || (__crypto_data_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .crypto_data is too large to fit in FLASH memory segment"); 262 | 263 | __log_const_data_load_start__ = ALIGN(__crypto_data_end__ , 4); 264 | .log_const_data ALIGN(__crypto_data_end__ , 4) : AT(ALIGN(__crypto_data_end__ , 4)) 265 | { 266 | __log_const_data_start__ = .; 267 | __start_log_const_data = __log_const_data_start__; 268 | KEEP(*(SORT(.log_const_data*))) 269 | } 270 | __log_const_data_end__ = __log_const_data_start__ + SIZEOF(.log_const_data); 271 | __log_const_data_size__ = SIZEOF(.log_const_data); 272 | __stop_log_const_data = __log_const_data_end__; 273 | __log_const_data_load_end__ = __log_const_data_end__; 274 | 275 | . = ASSERT(__log_const_data_start__ == __log_const_data_end__ || (__log_const_data_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .log_const_data is too large to fit in FLASH memory segment"); 276 | 277 | __log_backends_load_start__ = ALIGN(__log_const_data_end__ , 4); 278 | .log_backends ALIGN(__log_const_data_end__ , 4) : AT(ALIGN(__log_const_data_end__ , 4)) 279 | { 280 | __log_backends_start__ = .; 281 | __start_log_backends = __log_backends_start__; 282 | KEEP(*(SORT(.log_backends*))) 283 | } 284 | __log_backends_end__ = __log_backends_start__ + SIZEOF(.log_backends); 285 | __log_backends_size__ = SIZEOF(.log_backends); 286 | __stop_log_backends = __log_backends_end__; 287 | __log_backends_load_end__ = __log_backends_end__; 288 | 289 | . = ASSERT(__log_backends_start__ == __log_backends_end__ || (__log_backends_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .log_backends is too large to fit in FLASH memory segment"); 290 | 291 | __nrf_sections_load_start__ = ALIGN(__log_backends_end__ , 4); 292 | .nrf_sections ALIGN(__log_backends_end__ , 4) (NOLOAD) : AT(ALIGN(__log_backends_end__ , 4)) 293 | { 294 | __nrf_sections_start__ = .; 295 | __start_nrf_sections = __nrf_sections_start__; 296 | KEEP(*(.nrf_sections .nrf_sections.*)) 297 | } 298 | __nrf_sections_end__ = __nrf_sections_start__ + SIZEOF(.nrf_sections); 299 | __nrf_sections_size__ = SIZEOF(.nrf_sections); 300 | __nrf_sections_load_end__ = __nrf_sections_end__; 301 | 302 | . = ASSERT(__nrf_sections_start__ == __nrf_sections_end__ || (__nrf_sections_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .nrf_sections is too large to fit in FLASH memory segment"); 303 | 304 | __cli_sorted_cmd_ptrs_load_start__ = ALIGN(__nrf_sections_end__ , 4); 305 | .cli_sorted_cmd_ptrs ALIGN(__nrf_sections_run_end__ , 4) : AT(ALIGN(__nrf_sections_end__ , 4)) 306 | { 307 | __cli_sorted_cmd_ptrs_start__ = .; 308 | KEEP(*(.cli_sorted_cmd_ptrs*)) 309 | } 310 | __cli_sorted_cmd_ptrs_end__ = __cli_sorted_cmd_ptrs_start__ + SIZEOF(.cli_sorted_cmd_ptrs); 311 | __cli_sorted_cmd_ptrs_size__ = SIZEOF(.cli_sorted_cmd_ptrs); 312 | __cli_sorted_cmd_ptrs_load_end__ = __cli_sorted_cmd_ptrs_load_start__ + SIZEOF(.cli_sorted_cmd_ptrs); 313 | 314 | . = ASSERT(__cli_sorted_cmd_ptrs_load_start__ == __cli_sorted_cmd_ptrs_load_end__ || (__cli_sorted_cmd_ptrs_load_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .cli_sorted_cmd_ptrs is too large to fit in FLASH memory segment"); 315 | 316 | .cli_sorted_cmd_ptrs_run ALIGN(__nrf_sections_run_end__ , 4) (NOLOAD) : 317 | { 318 | __cli_sorted_cmd_ptrs_run_start__ = .; 319 | __start_cli_sorted_cmd_ptrs = __cli_sorted_cmd_ptrs_run_start__; 320 | . = MAX(__cli_sorted_cmd_ptrs_run_start__ + SIZEOF(.cli_sorted_cmd_ptrs), .); 321 | } 322 | __cli_sorted_cmd_ptrs_run_end__ = __cli_sorted_cmd_ptrs_run_start__ + SIZEOF(.cli_sorted_cmd_ptrs_run); 323 | __cli_sorted_cmd_ptrs_run_size__ = SIZEOF(.cli_sorted_cmd_ptrs_run); 324 | __stop_cli_sorted_cmd_ptrs = __cli_sorted_cmd_ptrs_run_end__; 325 | __cli_sorted_cmd_ptrs_run_load_end__ = __cli_sorted_cmd_ptrs_run_end__; 326 | 327 | . = ASSERT(__cli_sorted_cmd_ptrs_run_start__ == __cli_sorted_cmd_ptrs_run_end__ || (__cli_sorted_cmd_ptrs_run_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .cli_sorted_cmd_ptrs_run is too large to fit in RAM memory segment"); 328 | 329 | __fs_data_load_start__ = ALIGN(__cli_sorted_cmd_ptrs_load_start__ + SIZEOF(.cli_sorted_cmd_ptrs) , 4); 330 | .fs_data ALIGN(__cli_sorted_cmd_ptrs_run_end__ , 4) : AT(ALIGN(__cli_sorted_cmd_ptrs_load_start__ + SIZEOF(.cli_sorted_cmd_ptrs) , 4)) 331 | { 332 | __fs_data_start__ = .; 333 | KEEP(*(.fs_data*)) 334 | } 335 | __fs_data_end__ = __fs_data_start__ + SIZEOF(.fs_data); 336 | __fs_data_size__ = SIZEOF(.fs_data); 337 | __fs_data_load_end__ = __fs_data_load_start__ + SIZEOF(.fs_data); 338 | 339 | . = ASSERT(__fs_data_load_start__ == __fs_data_load_end__ || (__fs_data_load_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .fs_data is too large to fit in FLASH memory segment"); 340 | 341 | .fs_data_run ALIGN(__cli_sorted_cmd_ptrs_run_end__ , 4) (NOLOAD) : 342 | { 343 | __fs_data_run_start__ = .; 344 | __start_fs_data = __fs_data_run_start__; 345 | . = MAX(__fs_data_run_start__ + SIZEOF(.fs_data), .); 346 | } 347 | __fs_data_run_end__ = __fs_data_run_start__ + SIZEOF(.fs_data_run); 348 | __fs_data_run_size__ = SIZEOF(.fs_data_run); 349 | __stop_fs_data = __fs_data_run_end__; 350 | __fs_data_run_load_end__ = __fs_data_run_end__; 351 | 352 | . = ASSERT(__fs_data_run_start__ == __fs_data_run_end__ || (__fs_data_run_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .fs_data_run is too large to fit in RAM memory segment"); 353 | 354 | __log_dynamic_data_load_start__ = ALIGN(__fs_data_load_start__ + SIZEOF(.fs_data) , 4); 355 | .log_dynamic_data ALIGN(__fs_data_run_end__ , 4) : AT(ALIGN(__fs_data_load_start__ + SIZEOF(.fs_data) , 4)) 356 | { 357 | __log_dynamic_data_start__ = .; 358 | KEEP(*(SORT(.log_dynamic_data*))) 359 | } 360 | __log_dynamic_data_end__ = __log_dynamic_data_start__ + SIZEOF(.log_dynamic_data); 361 | __log_dynamic_data_size__ = SIZEOF(.log_dynamic_data); 362 | __log_dynamic_data_load_end__ = __log_dynamic_data_load_start__ + SIZEOF(.log_dynamic_data); 363 | 364 | . = ASSERT(__log_dynamic_data_load_start__ == __log_dynamic_data_load_end__ || (__log_dynamic_data_load_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .log_dynamic_data is too large to fit in FLASH memory segment"); 365 | 366 | .log_dynamic_data_run ALIGN(__fs_data_run_end__ , 4) (NOLOAD) : 367 | { 368 | __log_dynamic_data_run_start__ = .; 369 | __start_log_dynamic_data = __log_dynamic_data_run_start__; 370 | . = MAX(__log_dynamic_data_run_start__ + SIZEOF(.log_dynamic_data), .); 371 | } 372 | __log_dynamic_data_run_end__ = __log_dynamic_data_run_start__ + SIZEOF(.log_dynamic_data_run); 373 | __log_dynamic_data_run_size__ = SIZEOF(.log_dynamic_data_run); 374 | __stop_log_dynamic_data = __log_dynamic_data_run_end__; 375 | __log_dynamic_data_run_load_end__ = __log_dynamic_data_run_end__; 376 | 377 | . = ASSERT(__log_dynamic_data_run_start__ == __log_dynamic_data_run_end__ || (__log_dynamic_data_run_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .log_dynamic_data_run is too large to fit in RAM memory segment"); 378 | 379 | __log_filter_data_load_start__ = ALIGN(__log_dynamic_data_load_start__ + SIZEOF(.log_dynamic_data) , 4); 380 | .log_filter_data ALIGN(__log_dynamic_data_run_end__ , 4) : AT(ALIGN(__log_dynamic_data_load_start__ + SIZEOF(.log_dynamic_data) , 4)) 381 | { 382 | __log_filter_data_start__ = .; 383 | KEEP(*(SORT(.log_filter_data*))) 384 | } 385 | __log_filter_data_end__ = __log_filter_data_start__ + SIZEOF(.log_filter_data); 386 | __log_filter_data_size__ = SIZEOF(.log_filter_data); 387 | __log_filter_data_load_end__ = __log_filter_data_load_start__ + SIZEOF(.log_filter_data); 388 | 389 | . = ASSERT(__log_filter_data_load_start__ == __log_filter_data_load_end__ || (__log_filter_data_load_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .log_filter_data is too large to fit in FLASH memory segment"); 390 | 391 | .log_filter_data_run ALIGN(__log_dynamic_data_run_end__ , 4) (NOLOAD) : 392 | { 393 | __log_filter_data_run_start__ = .; 394 | __start_log_filter_data = __log_filter_data_run_start__; 395 | . = MAX(__log_filter_data_run_start__ + SIZEOF(.log_filter_data), .); 396 | } 397 | __log_filter_data_run_end__ = __log_filter_data_run_start__ + SIZEOF(.log_filter_data_run); 398 | __log_filter_data_run_size__ = SIZEOF(.log_filter_data_run); 399 | __stop_log_filter_data = __log_filter_data_run_end__; 400 | __log_filter_data_run_load_end__ = __log_filter_data_run_end__; 401 | 402 | . = ASSERT(__log_filter_data_run_start__ == __log_filter_data_run_end__ || (__log_filter_data_run_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .log_filter_data_run is too large to fit in RAM memory segment"); 403 | 404 | __nrf_sections_run_end_load_start__ = ALIGN(__log_filter_data_run_end__ , 4); 405 | .nrf_sections_run_end ALIGN(__log_filter_data_run_end__ , 4) (NOLOAD) : AT(ALIGN(__log_filter_data_run_end__ , 4)) 406 | { 407 | __nrf_sections_run_end_start__ = .; 408 | __end_nrf_sections_run = __nrf_sections_run_end_start__; 409 | KEEP(*(.nrf_sections_run_end .nrf_sections_run_end.*)) 410 | } 411 | __nrf_sections_run_end_end__ = __nrf_sections_run_end_start__ + SIZEOF(.nrf_sections_run_end); 412 | __nrf_sections_run_end_size__ = SIZEOF(.nrf_sections_run_end); 413 | __nrf_sections_run_end_load_end__ = __nrf_sections_run_end_end__; 414 | 415 | . = ASSERT(__nrf_sections_run_end_start__ == __nrf_sections_run_end_end__ || (__nrf_sections_run_end_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .nrf_sections_run_end is too large to fit in RAM memory segment"); 416 | 417 | __dtors_load_start__ = ALIGN(__log_filter_data_load_start__ + SIZEOF(.log_filter_data) , 4); 418 | .dtors ALIGN(__log_filter_data_load_start__ + SIZEOF(.log_filter_data) , 4) : AT(ALIGN(__log_filter_data_load_start__ + SIZEOF(.log_filter_data) , 4)) 419 | { 420 | __dtors_start__ = .; 421 | KEEP (*(SORT(.dtors.*))) KEEP (*(.dtors)) KEEP (*(.fini_array)) KEEP (*(SORT(.fini_array.*))) 422 | } 423 | __dtors_end__ = __dtors_start__ + SIZEOF(.dtors); 424 | __dtors_size__ = SIZEOF(.dtors); 425 | __dtors_load_end__ = __dtors_end__; 426 | 427 | . = ASSERT(__dtors_start__ == __dtors_end__ || (__dtors_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .dtors is too large to fit in FLASH memory segment"); 428 | 429 | __ctors_load_start__ = ALIGN(__dtors_end__ , 4); 430 | .ctors ALIGN(__dtors_end__ , 4) : AT(ALIGN(__dtors_end__ , 4)) 431 | { 432 | __ctors_start__ = .; 433 | KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors)) KEEP (*(.init_array)) KEEP (*(SORT(.init_array.*))) 434 | } 435 | __ctors_end__ = __ctors_start__ + SIZEOF(.ctors); 436 | __ctors_size__ = SIZEOF(.ctors); 437 | __ctors_load_end__ = __ctors_end__; 438 | 439 | . = ASSERT(__ctors_start__ == __ctors_end__ || (__ctors_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .ctors is too large to fit in FLASH memory segment"); 440 | 441 | __rodata_load_start__ = ALIGN(__ctors_end__ , 4); 442 | .rodata ALIGN(__ctors_end__ , 4) : AT(ALIGN(__ctors_end__ , 4)) 443 | { 444 | __rodata_start__ = .; 445 | *(.rodata .rodata.* .gnu.linkonce.r.*) 446 | } 447 | __rodata_end__ = __rodata_start__ + SIZEOF(.rodata); 448 | __rodata_size__ = SIZEOF(.rodata); 449 | __rodata_load_end__ = __rodata_end__; 450 | 451 | . = ASSERT(__rodata_start__ == __rodata_end__ || (__rodata_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .rodata is too large to fit in FLASH memory segment"); 452 | 453 | __ARM.exidx_load_start__ = ALIGN(__rodata_end__ , 4); 454 | .ARM.exidx ALIGN(__rodata_end__ , 4) : AT(ALIGN(__rodata_end__ , 4)) 455 | { 456 | __ARM.exidx_start__ = .; 457 | __exidx_start = __ARM.exidx_start__; 458 | *(.ARM.exidx .ARM.exidx.*) 459 | } 460 | __ARM.exidx_end__ = __ARM.exidx_start__ + SIZEOF(.ARM.exidx); 461 | __ARM.exidx_size__ = SIZEOF(.ARM.exidx); 462 | __exidx_end = __ARM.exidx_end__; 463 | __ARM.exidx_load_end__ = __ARM.exidx_end__; 464 | 465 | . = ASSERT(__ARM.exidx_start__ == __ARM.exidx_end__ || (__ARM.exidx_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .ARM.exidx is too large to fit in FLASH memory segment"); 466 | 467 | __fast_load_start__ = ALIGN(__ARM.exidx_end__ , 4); 468 | .fast ALIGN(__nrf_sections_run_end_end__ , 4) : AT(ALIGN(__ARM.exidx_end__ , 4)) 469 | { 470 | __fast_start__ = .; 471 | *(.fast .fast.*) 472 | } 473 | __fast_end__ = __fast_start__ + SIZEOF(.fast); 474 | __fast_size__ = SIZEOF(.fast); 475 | __fast_load_end__ = __fast_load_start__ + SIZEOF(.fast); 476 | 477 | . = ASSERT(__fast_load_start__ == __fast_load_end__ || (__fast_load_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .fast is too large to fit in FLASH memory segment"); 478 | 479 | .fast_run ALIGN(__nrf_sections_run_end_end__ , 4) (NOLOAD) : 480 | { 481 | __fast_run_start__ = .; 482 | . = MAX(__fast_run_start__ + SIZEOF(.fast), .); 483 | } 484 | __fast_run_end__ = __fast_run_start__ + SIZEOF(.fast_run); 485 | __fast_run_size__ = SIZEOF(.fast_run); 486 | __fast_run_load_end__ = __fast_run_end__; 487 | 488 | . = ASSERT(__fast_run_start__ == __fast_run_end__ || (__fast_run_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .fast_run is too large to fit in RAM memory segment"); 489 | 490 | __data_load_start__ = ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4); 491 | .data ALIGN(__fast_run_end__ , 4) : AT(ALIGN(__fast_load_start__ + SIZEOF(.fast) , 4)) 492 | { 493 | __data_start__ = .; 494 | *(.data .data.* .gnu.linkonce.d.*) 495 | } 496 | __data_end__ = __data_start__ + SIZEOF(.data); 497 | __data_size__ = SIZEOF(.data); 498 | __data_load_end__ = __data_load_start__ + SIZEOF(.data); 499 | 500 | . = ASSERT(__data_load_start__ == __data_load_end__ || (__data_load_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .data is too large to fit in FLASH memory segment"); 501 | 502 | .data_run ALIGN(__fast_run_end__ , 4) (NOLOAD) : 503 | { 504 | __data_run_start__ = .; 505 | . = MAX(__data_run_start__ + SIZEOF(.data), .); 506 | } 507 | __data_run_end__ = __data_run_start__ + SIZEOF(.data_run); 508 | __data_run_size__ = SIZEOF(.data_run); 509 | __data_run_load_end__ = __data_run_end__; 510 | 511 | . = ASSERT(__data_run_start__ == __data_run_end__ || (__data_run_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .data_run is too large to fit in RAM memory segment"); 512 | 513 | __tdata_load_start__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4); 514 | .tdata ALIGN(__data_run_end__ , 4) : AT(ALIGN(__data_load_start__ + SIZEOF(.data) , 4)) 515 | { 516 | __tdata_start__ = .; 517 | *(.tdata .tdata.*) 518 | } 519 | __tdata_end__ = __tdata_start__ + SIZEOF(.tdata); 520 | __tdata_size__ = SIZEOF(.tdata); 521 | __tdata_load_end__ = __tdata_load_start__ + SIZEOF(.tdata); 522 | 523 | __FLASH_segment_used_end__ = ALIGN(__data_load_start__ + SIZEOF(.data) , 4) + SIZEOF(.tdata); 524 | __FLASH_segment_used_size__ = __FLASH_segment_used_end__ - __FLASH_segment_start__; 525 | 526 | . = ASSERT(__tdata_load_start__ == __tdata_load_end__ || (__tdata_load_end__ - __FLASH_segment_start__) <= __FLASH_segment_size__ , "error: .tdata is too large to fit in FLASH memory segment"); 527 | 528 | .tdata_run ALIGN(__data_run_end__ , 4) (NOLOAD) : 529 | { 530 | __tdata_run_start__ = .; 531 | . = MAX(__tdata_run_start__ + SIZEOF(.tdata), .); 532 | } 533 | __tdata_run_end__ = __tdata_run_start__ + SIZEOF(.tdata_run); 534 | __tdata_run_size__ = SIZEOF(.tdata_run); 535 | __tdata_run_load_end__ = __tdata_run_end__; 536 | 537 | . = ASSERT(__tdata_run_start__ == __tdata_run_end__ || (__tdata_run_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .tdata_run is too large to fit in RAM memory segment"); 538 | 539 | __bss_load_start__ = ALIGN(__tdata_run_end__ , 4); 540 | .bss ALIGN(__tdata_run_end__ , 4) (NOLOAD) : AT(ALIGN(__tdata_run_end__ , 4)) 541 | { 542 | __bss_start__ = .; 543 | *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON) 544 | } 545 | __bss_end__ = __bss_start__ + SIZEOF(.bss); 546 | __bss_size__ = SIZEOF(.bss); 547 | __bss_load_end__ = __bss_end__; 548 | 549 | . = ASSERT(__bss_start__ == __bss_end__ || (__bss_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .bss is too large to fit in RAM memory segment"); 550 | 551 | __tbss_load_start__ = ALIGN(__bss_end__ , 4); 552 | .tbss ALIGN(__bss_end__ , 4) (NOLOAD) : AT(ALIGN(__bss_end__ , 4)) 553 | { 554 | __tbss_start__ = .; 555 | *(.tbss .tbss.*) 556 | } 557 | __tbss_end__ = __tbss_start__ + SIZEOF(.tbss); 558 | __tbss_size__ = SIZEOF(.tbss); 559 | __tbss_load_end__ = __tbss_end__; 560 | 561 | . = ASSERT(__tbss_start__ == __tbss_end__ || (__tbss_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .tbss is too large to fit in RAM memory segment"); 562 | 563 | __non_init_load_start__ = ALIGN(__tbss_end__ , 4); 564 | .non_init ALIGN(__tbss_end__ , 4) (NOLOAD) : AT(ALIGN(__tbss_end__ , 4)) 565 | { 566 | __non_init_start__ = .; 567 | *(.non_init .non_init.*) 568 | } 569 | __non_init_end__ = __non_init_start__ + SIZEOF(.non_init); 570 | __non_init_size__ = SIZEOF(.non_init); 571 | __non_init_load_end__ = __non_init_end__; 572 | 573 | . = ASSERT(__non_init_start__ == __non_init_end__ || (__non_init_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .non_init is too large to fit in RAM memory segment"); 574 | 575 | __heap_load_start__ = ALIGN(__non_init_end__ , 4); 576 | .heap ALIGN(__non_init_end__ , 4) (NOLOAD) : AT(ALIGN(__non_init_end__ , 4)) 577 | { 578 | __heap_start__ = .; 579 | *(.heap .heap.*) 580 | . = ALIGN(MAX(__heap_start__ + __HEAPSIZE__ , .), 4); 581 | } 582 | __heap_end__ = __heap_start__ + SIZEOF(.heap); 583 | __heap_size__ = SIZEOF(.heap); 584 | __heap_load_end__ = __heap_end__; 585 | 586 | . = ASSERT(__heap_start__ == __heap_end__ || (__heap_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .heap is too large to fit in RAM memory segment"); 587 | 588 | __stack_load_start__ = __RAM_segment_start__ + (__RAM_segment_size__ - 8192); 589 | .stack __RAM_segment_start__ + (__RAM_segment_size__ - 8192) (NOLOAD) : AT(__RAM_segment_start__ + (__RAM_segment_size__ - 8192)) 590 | { 591 | __stack_start__ = .; 592 | __StackLimit = __stack_start__; 593 | *(.stack .stack.*) 594 | . = ALIGN(MAX(__stack_start__ + __STACKSIZE__ , .), 8); 595 | } 596 | __stack_end__ = __stack_start__ + SIZEOF(.stack); 597 | __stack_size__ = SIZEOF(.stack); 598 | __StackTop = __stack_end__; 599 | __stack_load_end__ = __stack_end__; 600 | 601 | . = ASSERT(__stack_start__ == __stack_end__ || (__stack_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .stack is too large to fit in RAM memory segment"); 602 | . = ASSERT(__heap_end__ <= __stack_start__ , "error: section .heap overlaps absolute placed section .stack"); 603 | 604 | __stack_process_load_start__ = ALIGN(__stack_end__ , 8); 605 | .stack_process ALIGN(__stack_end__ , 8) (NOLOAD) : AT(ALIGN(__stack_end__ , 8)) 606 | { 607 | __stack_process_start__ = .; 608 | *(.stack_process .stack_process.*) 609 | . = ALIGN(MAX(__stack_process_start__ + __STACKSIZE_PROCESS__ , .), 8); 610 | } 611 | __stack_process_end__ = __stack_process_start__ + SIZEOF(.stack_process); 612 | __stack_process_size__ = SIZEOF(.stack_process); 613 | __stack_process_load_end__ = __stack_process_end__; 614 | 615 | __RAM_segment_used_end__ = ALIGN(__stack_end__ , 8) + SIZEOF(.stack_process); 616 | __RAM_segment_used_size__ = __RAM_segment_used_end__ - __RAM_segment_start__; 617 | 618 | . = ASSERT(__stack_process_start__ == __stack_process_end__ || (__stack_process_end__ - __RAM_segment_start__) <= __RAM_segment_size__ , "error: .stack_process is too large to fit in RAM memory segment"); 619 | 620 | } 621 | 622 | -------------------------------------------------------------------------------- /pca10040/s132/ses/README.md: -------------------------------------------------------------------------------- 1 | # Monitor Mode Debugging in Segger embedded studios 2 | 3 | Segger Embedded Studios has a better integration with MMD than Keil. 4 | 5 | Steps: 6 | 1. Unzip/clone into SDK16.0/examples/ble_peripheral 7 | 8 | 2. Open the ses project file [ble_app_blinky_pca10040_s132.emProject](ble_app_blinky_pca10040_s132.emProject) 9 | 10 | 3. Compile the example. 11 | 12 | 4. Flash the application to the nRF52DK via ses. 13 | NOTE: In SES you have the option to flash additional files, in this example the S132 SoftDevice is flashed automatically. See 'Project->Edit Options->Debug->Loader->Additional Load File' 14 | 15 | 5. Enter debug mode. 16 | NOTE: When prompted with the dialog box 'Monitor Mode missing license' you need to press 'Yes'. 17 | 18 | ![JlinkPromptYes](../../../Documentation/Images/JLinkPromptYes.png " ") 19 | 20 | 6. Start code execution. 21 | 22 | 7. Open nRF Connect and connect to 'NORDIC_BLINKY'. Expand the 'Nordic LED Button Service' and enable notifications for the Button characteristics (press the three downward pointing arrows button). 23 | 24 | 8. Press 'Button 1' on the nRF52DK and verify that the Button characteristic's Value field appears and changes value from 'Button pressed' to 'Button released' when pushing the button. 25 | 26 | 9. Stop code execution. 27 | 28 | 10. Verify that the button value in nRF Connect does not change when pressing 'Button 1' 29 | 30 | 11. Start code execution and verify that the value in nRF Connect now changes when pressing 'Button 1'. 31 | 32 | 12. You have now verified that the BLE link remained intact despite halting the CPU. 33 | 34 | 13. Feel free to play around with the LED and single stepping through application code. Now you can finally figure out what your BLE service is actually doing without losing the BLE link ^^ 35 | 36 | 37 | ## Hey that really is neat, but how do I implement MMD in my project? 38 | The differences between this example and the standard ble_app_blinky demo are listed below: 39 | 40 | 1. You need to compile the MMD ISR (DebugMon_Handler) found in [JLINK_MONITOR_ISR_SES.s](../../../JLINK_MONITOR_ISR_SES.s) 41 | 42 | 2. You need to stop the app_timer (and feed a watchdog if needed) with the MMD utility functions that the assembly coded ISR refers to in [JLINK_MONITOR.c](../../../JLINK_MONITOR.c) and [JLINK_MONITOR.h](../../../JLINK_MONITOR.h) 43 | 44 | 3. You need to enable the interrupt by NVIC_SetPriority(DebugMonitor_IRQn, _PRIO_SD_LOW) at the start of your main loop. The priority level determines what execution priority levels you want to block. 45 | 4. You need to set the applications vector table because the J-Link driver needs it in order to execute the MMD ISR. 46 | The application's vector table is at the start of the application's starting address in flash. In a SES project you'll find it in: 47 | Option for project -> Common -> Linker -> Section Placement Macros -> FLASH_START. 48 | Open up the example project from the SDK15.0 branch. 49 | Right-click 'Project ble_app_blinky...' and choose 'Edit Options'. 50 | Select 'Debug' from the drop-down menu. (Common, Debug, Release). 51 | Go to Debug -> J-Link -> Additional J-Link Options. Double click to view or edit. 52 | See this tutorial's project settings for reference, as well as https://www.segger.com/downloads/jlink/UM08001 Chapter 9.7 Forwarding of Monitor Interrupts. The reference to "additional software layer that takes all interrupts in the first place and forwards them to the user application" in the J-link User Guide chapter 9.7 is in our case the SoftDevice. 53 | 54 | ###Wait, that's it!? 55 | Youp, that's it. 56 | 57 | Happy debugging! 58 | 59 | -------------------------------------------------------------------------------- /pca10040/s132/ses/ble_app_blinky_pca10040_s132.emProject: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 125 | 129 | 130 | -------------------------------------------------------------------------------- /pca10040/s132/ses/ble_app_blinky_pca10040_s132.emSession: -------------------------------------------------------------------------------- 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 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /pca10040/s132/ses/ble_app_blinky_pca10040_s132_Debug.jlink: -------------------------------------------------------------------------------- 1 | [BREAKPOINTS] 2 | ForceImpTypeAny = 0 3 | ShowInfoWin = 1 4 | EnableFlashBP = 2 5 | BPDuringExecution = 0 6 | [CFI] 7 | CFISize = 0x00 8 | CFIAddr = 0x00 9 | [CPU] 10 | MonModeVTableAddr = 0xFFFFFFFF 11 | MonModeDebug = 0 12 | MaxNumAPs = 0 13 | LowPowerHandlingMode = 0 14 | OverrideMemMap = 0 15 | AllowSimulation = 1 16 | ScriptFile="" 17 | [FLASH] 18 | CacheExcludeSize = 0x00 19 | CacheExcludeAddr = 0x00 20 | MinNumBytesFlashDL = 0 21 | SkipProgOnCRCMatch = 1 22 | VerifyDownload = 1 23 | AllowCaching = 1 24 | EnableFlashDL = 2 25 | Override = 0 26 | Device="ARM7" 27 | [GENERAL] 28 | WorkRAMSize = 0x00 29 | WorkRAMAddr = 0x00 30 | RAMUsageLimit = 0x00 31 | [SWO] 32 | SWOLogFile="" 33 | [MEM] 34 | RdOverrideOrMask = 0x00 35 | RdOverrideAndMask = 0xFFFFFFFF 36 | RdOverrideAddr = 0xFFFFFFFF 37 | WrOverrideOrMask = 0x00 38 | WrOverrideAndMask = 0xFFFFFFFF 39 | WrOverrideAddr = 0xFFFFFFFF 40 | -------------------------------------------------------------------------------- /pca10040/s132/ses/ble_app_blinky_pca10040_s132_Release.jlink: -------------------------------------------------------------------------------- 1 | [BREAKPOINTS] 2 | ForceImpTypeAny = 0 3 | ShowInfoWin = 1 4 | EnableFlashBP = 2 5 | BPDuringExecution = 0 6 | [CFI] 7 | CFISize = 0x00 8 | CFIAddr = 0x00 9 | [CPU] 10 | MonModeVTableAddr = 0xFFFFFFFF 11 | MonModeDebug = 0 12 | MaxNumAPs = 0 13 | LowPowerHandlingMode = 0 14 | OverrideMemMap = 0 15 | AllowSimulation = 1 16 | ScriptFile="" 17 | [FLASH] 18 | CacheExcludeSize = 0x00 19 | CacheExcludeAddr = 0x00 20 | MinNumBytesFlashDL = 0 21 | SkipProgOnCRCMatch = 1 22 | VerifyDownload = 1 23 | AllowCaching = 1 24 | EnableFlashDL = 2 25 | Override = 0 26 | Device="ARM7" 27 | [GENERAL] 28 | WorkRAMSize = 0x00 29 | WorkRAMAddr = 0x00 30 | RAMUsageLimit = 0x00 31 | [SWO] 32 | SWOLogFile="" 33 | [MEM] 34 | RdOverrideOrMask = 0x00 35 | RdOverrideAndMask = 0xFFFFFFFF 36 | RdOverrideAddr = 0xFFFFFFFF 37 | WrOverrideOrMask = 0x00 38 | WrOverrideAndMask = 0xFFFFFFFF 39 | WrOverrideAddr = 0xFFFFFFFF 40 | -------------------------------------------------------------------------------- /pca10040/s132/ses/flash_placement.xml: -------------------------------------------------------------------------------- 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 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | --------------------------------------------------------------------------------