This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Software breakpoints with J-Link probe

Hi,

I am not able to make software breakpoints working with a Segger J-Link probe.

As an exemple, here is my assert callback function:

void __attribute__((noreturn)) __assert_func(const char *file, int line, const char *func, const char *failedexpr) {
  asm volatile("bkpt");
  abort();
}

My program should be stopped automatically when entering any assert function. In general, I would like to stop the execution of my program using the asm volatile("bkpt") instruction.

Using an ST-Link v2 probe, the code above works. Unfortunately, it doesn't work with a Segger J-Link probe. Any experience with this ? Is any specific configuration require to make this working ?

Note: I use the latest available J-Link firmware "SEGGER J-Link Lite-Cortex-M V8.00" with SEGGER J-Link V5.12 software.

  • Hi Metch,

    I attached here the project. It's basically the same with the blinky project provided by Vidar here.

    armgccEclipse.zip

    May I ask why you want to use the software breakpoint ?

  • They are no source in the Zip file you gave me... <locationURI>PARENT-3-PROJECT_LOC/main.c</locationURI> I try to make this working with the nRF51 and not the nRF52. There are some error callbacks in my code where it makes sense to stop the program automatically. This is a very developer-friendly way to debug a software. Could you tell me which version of the Segger tools you use ? I use the latest version available today, and this is maybe the problem...

  • @hungbui the code above works with my Segger J-Link lite probe and the Segger tools 5.10m, but it's not working with the latest version V5.12 :(

    I will post a message on the Segger forum, or I will contact the GNU ARM Ecplise plugin guys. Thanks for your help !

  • I really don't know what problem you're having but I can tell you this code works with GCC every time, including on the current JLINK version, I use it in my hardfault handler to toss me out to the debugger and I was using it today because .. it's been Hardfault Wednesday

    .....

        volatile uint32_t __attribute__((unused)) pc_ret	= stacked_data[ 6 ];
        volatile uint32_t __attribute__((unused)) xPSR		= stacked_data[ 7 ];
    
    	__BKPT(0);
    }
    
  • Thanks for your help @rols. With my setup, the processor is not stopped when I use your code.

    • JLinkARM.dll V5.12f
    • Target device nRF51822_xxAA
    • Firmware: J-Link Lite-Cortex-M V8
    • GNU ARM C/C++ J-Link Debugging version 3.2.1.201604190915
    • arm-none-eabi-gcc.exe (GNU Tools for ARM Embedded Processors) version 5.3.1 20160307

    But it's working with the Segger tools version 5.10m.

Related