ARM Technical Support Knowledge Articles


Applies to: uVision Debugger


Information in this article applies to:


I have a assembler modules that use MPL MACROs. In previous versions of C51 (before 6.23) the uVision Debugger did not synchronize with the source code at all. This problem seems to be fixed in Version 6.23. However, I'm still unable to set breakpoints at the MPL macro itself. Is there some trick?


MPL macros are an historic feature of the 8051 assembler. They were initally implemented in the Intel ASM51 Assembler and we have added them to the Keil A51 Assembler. At the time MPL macros were developed, debug tools did not support source-level debugging. Therefore, the concept of the MPL macro processor did not correctly handle problems that arise when you want synchronization between source code and the generated object files.

The Keil A51 Assembler (starting with C51 Version 6.23) implements proper line number synchronisation for assembler files that contain MPL macros. It is possible to set breakpoints on the MPL macro when the first assembler instruction of the macro is in the same line as the %define statement of the MPL macro language. For example:


; First MPL macro line does not start with code
%*define (ldxdata1 (Var))

   mov dptr,#%Var
   movx a,@dptr

; First MPL macro line contains assembler instructions
%*define (ldxdata2 (Var)) ( mov dptr,#%Var
   movx a,@dptr

?XD?mplmac segment xdata
rseg ?XD?mplmac
Var1:   DS 1
Var2:   DS 1

RSEG ?PR?mplmac

   %ldxdata1(Var1)  ; no code at macro begin
                    ; -> no break information at source level
   MOV  R6,A
   %ldxdata2(Var2)  ; code at macro begin
                    ; -> breaks at source level possible
   MOV  R7,A



The uVision debugger supports source-level debugging for code that was initally written for Intel ASM51. However, you must have an assembler instruction in the same line as the MPL %define statement.

Article last edited on: 2004-07-09 00:27:14

Rate this article

Disagree? Move your mouse over the bar and click

Did you find this article helpful? Yes No

How can we improve this article?

Link to this article
Copyright © 2011 ARM Limited. All rights reserved. External (Open), Non-Confidential