This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Cannot breakpoint on UART0_IRQHandler with C++

Hello all,

I am using the examples/peripheral/uart project, which by default is set up as follows:

Language = C Dialect = C99 Language conformance = Standard with IAR extensions

I can breakpoint on UART0_IRQHandler.

However, if I switch this project as follows:

Language = C++ Dialect = Extended embedded C++ Language conformance = Standard with IAR extensions

I now find I can no longer set a breakpoint on UART0_IRQHandler.

Does anyone have any idea how I resolve this? The reason I care about this is I am developing a C++ application and have hit upon this problem, and have found I can reproduce it (more-or-less) using the example project mentioned above.

Regards, Richard.

Parents
  • Go to the disassembly window and try setting a breakpoint on the first assembly instruction of UART0_IRQHandler(). You can get the address of this instruction via the linker .map file (which will probably consist of a PUSH {r?-r?,lr} type of instruction.

    EDIT: I just re-read your post and noticed you said IAR wouldn't even let you set a breakpoint at all. This would seem to indicate your interrupt handler is not even getting compiled in the first place. I would again check the linker .map file and see if this symbol is included in the image. Maybe your code is conditionally compiled out? Maybe your compiler is having trouble recognizing the weak binding of the UART0_IRQHandler symbol and is instead using the stock interrupt handler @ address 0x00000048?

  • Sorry, in the previous comment I think I meant UART0_IRQHandler was "taken from" the specified files as detailed in the log-file, not the lst-files. My fault for doing this late at night!

Reply Children
No Data
Related