├── .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 | 
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 | 
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 | 
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 |
--------------------------------------------------------------------------------