Cannot Set Breakpoints in C Code – STR736FV2T6, Keil + ULINK2, Debug Symbols Not Loading

Hi everyone,

I'm working on a project using the STR736FV2T6 microcontroller in Keil µVision 5.42 with a ULINK2 debugger. My firmware builds and runs, but I can't set breakpoints in the C source code — they only work in the disassembly window.

What I’ve Tried:

  • Optimization is set to Level 0 (-O0)

  • "Debug Information" is enabled in the target and C/C++ options

  • I’ve rebuilt the project multiple times (Rebuild All)

  • IROM1 is set to 0x00000000, since the CPU starts from this address after reset (due to Flash aliasing from 0x80000000)

  • The code is later flashed using J-Flash (after shifting the .hex file to 0x80000000 using srec_cat)

  • I disabled "Load Application at Startup" and tried loading the .axf manually using:

    LOAD "C:/.../Hybrid_7_6_0x1_6_6GPA.axf"
    

New Problem:

When I try to load the .axf, I get this error:

*** error 57: illegal address (0x00008006)
ULINK - ARM Error:
Memory Mismatch!
Address: 0x00008006
Value = 0x08
Expected = 0x00

Also:

  • Watch Window shows <cannot evaluate>

  • Symbol Browser is empty

This suggests that my debug symbols are not loading properly, even though I’ve verified they are generated and the file is being rebuilt. I'm not sure why Keil is trying to verify or flash memory at 0x00008006, since Flash is physically located at 0x80000000.

My Goal:

  • I want to debug the existing firmware already flashed via J-Flash (manually offset to 0x80000000)

  • I want to step through C code and use breakpoints, without Keil trying to re-flash anything

Questions:

  • How do I properly load debug symbols without triggering flashing or memory mismatch errors?

  • Is there a better way to get breakpoints working in C code on STR73x chips when code is physically at 0x80000000?

Any advice or insight would be greatly appreciated.

Thanks,

0