Very strange, I have lots of nRF52x experience, but this one has me stumped.
Successfully updated our custom board/application from nRF5_SDK_15.0.0 to latest as indicated below:
FreeRTOS (from SDK)
Segger Embedded Studio (same issue on 4.12 / 4.18 / 4.50)
After migrating to SKD16, everything works very nicely. It is a reasonably complex application.
We use default flash_placement.xml from SDK16 example applications.
Application passes all of our testing. In Debug mode, NRF_LOG via RTT is active. This all operates fine.
Verified we have excess RAM available to the application. RAM_START=0x20002a98.
ret_code_t ret_code = sd_ble_enable(p_app_ram_start); returns a start value of 0x20002220 ... so we are good here.
To help me isolate the problem, I have erased my nRF52832 IC, and no longer are using our Bootloader.
Only the Softdevice and Application are being loaded via SES.
The last to do item was to re-enable our JLINK debug monitor. This is the ONLY change we are making to the application
We use the recommended method, as outlined in https://github.com/NordicPlayground/j-link-monitoring-mode-debugging. We use the 3 files as is unmodified.
We use the SDK16.0.0 branch, and our JLINK options are set to:
SetMonModeDebug = 1
SetMonModeVTableAddr = 0x26000
We execute NVIC_SetPriority(DebugMonitor_IRQn, _PRIO_SD_LOW); in our Logger task.
When we do this, our application does not startup up at all, and the SES Debugger shows us at address 0x00000000 ... see attached picture below [Crash.png]
Note also the messaging indicating: T-bit of XPSR is 0 but should be 1. Changed to 1.
To further isolate the problem, I commented out NVIC_SetPriority(DebugMonitor_IRQn, _PRIO_SD_LOW); ... but no change...
Very weird ... [DebugMon_Handler] is being compiled in, but not being executed.
... and all of this causes the SES to fail in loading the application. I am a bit stymied.
I tried setting early breakpoints in thumb_crt0.s ... but it would not hit any of the early breakpoints.
As a very last investigative step, I took the SDK 16.0.0 example application, and modified it to support JLINK_MONITOR ...
... after some tweaking ... works like a charm :}
Free beer to whoever can solve my problem :}
I meant to say ...
As a very last investigative step, I took the SDK 16.0.0 **ble_app_hrs_freertos_pca10040_s132** example application, and modified it to support JLINK_MONITOR ...
Using Softdevice s132_nrf52_7.0.1_softdevice.hex
OK, looks like it is likely nothing deeply wrong with my code.
I set my JLink Debugger options to SetMonModeDebug = 0; SetMonModeVTableAddr = 0x26000
so that JLink Debugger is not active, but my JLINK_MONITOR code is still compiled in.
Now application works perfectly fine. Below is my Section Placement Macros ... address 0x26000 is correct.
JLink is V6.54c ... I think it was an installed update a couple of days ago. I'll put focus to see if related to that.
My JLink device is a nRF52-DK.
I don't think the nRF52-DK will work with Monitor Mode, but I can try mine .. recently I found one of my Segger J-Links purchased from IAR also didn't work, but another from Segger did. I hear the -PRO is a better option, but more dosh. Hmm .. beer .. let me try my DK
Edit: The nRF52 DK does indeed work with Monitor Mode, good to know! Haven't earned a beer yet though
Are any of your interrupt priorities at _PRIO_SD_LOW (4) or higher by mistake? I have a complex application running fine, however I am at SD v6.1.1 and not v7.0.1; No RTOS either.
When removing the Bootloader, was the MBR also removed?